Solve a dependency graph. :param dependencies: dependency dictionary. For each key, the value is an iterable indicating its dependencies. :param all_members: If provided :return: list of sets, each containing independent task only dependent of the p
(dependencies, all_members=None)
| 468 | |
| 469 | |
| 470 | def _solve_dependencies(dependencies, all_members=None): |
| 471 | """Solve a dependency graph. |
| 472 | |
| 473 | :param dependencies: dependency dictionary. For each key, the value is |
| 474 | an iterable indicating its dependencies. |
| 475 | :param all_members: If provided |
| 476 | :return: list of sets, each containing independent task only dependent of the |
| 477 | previous set in the list. |
| 478 | |
| 479 | """ |
| 480 | d = dict((key, set(value)) for key, value in dependencies.items()) |
| 481 | if all_members: |
| 482 | d.update({key: set() for key in all_members if key not in d}) |
| 483 | r = [] |
| 484 | while d: |
| 485 | # values not in keys (items without dep) |
| 486 | t = set(i for v in d.values() for i in v) - set(d.keys()) |
| 487 | # and keys without value (items without dep) |
| 488 | t.update(k for k, v in d.items() if not v) |
| 489 | # can be done right away |
| 490 | r.append(t) |
| 491 | # and cleaned up |
| 492 | d = dict(((k, v - t) for k, v in d.items() if v)) |
| 493 | |
| 494 | return r |
| 495 | |
| 496 | |
| 497 | def initialize_many(drivers, register_finalizer=True, |
no test coverage detected