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