def __init__(self, edges: dict[str, set[str]]) -> None:
for label in edges:
if not label:
message = 'edges must not contain empty labels'
raise InvalidParameterError(message)
self._edges = {
label: set(dependencies)
for label, dependencies in edges.items()
}
all_labels = set(self._edges)
for label, dependencies in self._edges.items():
unknown = dependencies - all_labels
if unknown:
message = (
f'Model {label!r} declares dependencies on '
f'unknown models: {unknown}'
)
raise UnknownDependencyError(message)
self._dependents: dict[str, set[str]] = {
label: set() for label in self._edges
}
for label, dependencies in self._edges.items():
for dep in dependencies:
self._dependents[dep].add(label)
self._order = self._compute_order()