| 816 | return HighLevelGraph(ret_layers, ret_dependencies) |
| 817 | |
| 818 | def validate(self) -> None: |
| 819 | # Check dependencies |
| 820 | for layer_name, deps in self.dependencies.items(): |
| 821 | if layer_name not in self.layers: |
| 822 | raise ValueError(f"dependencies[{layer_name!r}] not found in layers") |
| 823 | for dep in deps: |
| 824 | if dep not in self.dependencies: |
| 825 | raise ValueError(f"{dep!r} not found in dependencies") |
| 826 | |
| 827 | for layer in self.layers.values(): |
| 828 | assert hasattr(layer, "annotations") |
| 829 | |
| 830 | # Re-calculate all layer dependencies |
| 831 | dependencies = compute_layer_dependencies(self.layers) |
| 832 | |
| 833 | # Check keys |
| 834 | dep_key1 = self.dependencies.keys() |
| 835 | dep_key2 = dependencies.keys() |
| 836 | if dep_key1 != dep_key2: |
| 837 | raise ValueError( |
| 838 | f"incorrect dependencies keys {set(dep_key1)!r} " |
| 839 | f"expected {set(dep_key2)!r}" |
| 840 | ) |
| 841 | |
| 842 | # Check values |
| 843 | for k in dep_key1: |
| 844 | if self.dependencies[k] != dependencies[k]: |
| 845 | raise ValueError( |
| 846 | f"incorrect HLG dependencies[{k!r}]: {self.dependencies[k]!r} " |
| 847 | f"expected {dependencies[k]!r} from task dependencies" |
| 848 | ) |
| 849 | |
| 850 | def __repr__(self) -> str: |
| 851 | representation = f"{type(self).__name__} with {len(self.layers)} layers.\n" |