Describe a time you designed or implemented task scheduling for a data or ML workflow.
For the coding exercise, implement schedule_tasks(tasks, workers) to produce executable batches while respecting task dependencies and the worker limit. Each task is a dictionary with a unique string id and a list of dependency IDs. Return a list of batches, where each batch contains task IDs that may run concurrently. Return [] if the dependency graph contains a cycle.
Input/output: tasks is a list of dictionaries and workers is a positive integer; return list[list[str]].
tasksid and dependenciesdef schedule_tasks(tasks, workers):