| 1004 | |
| 1005 | |
| 1006 | class DependenciesMapping(MutableMapping): |
| 1007 | def __init__(self, dsk): |
| 1008 | self.dsk = dsk |
| 1009 | self._removed = set() |
| 1010 | # Set a copy of dsk to avoid dct resizing |
| 1011 | self._cache = dsk.copy() |
| 1012 | self._cache.clear() |
| 1013 | |
| 1014 | def __getitem__(self, key): |
| 1015 | if (val := self._cache.get(key)) is not None: |
| 1016 | return val |
| 1017 | else: |
| 1018 | v = self.dsk[key] |
| 1019 | try: |
| 1020 | deps = v.dependencies |
| 1021 | except AttributeError: |
| 1022 | from dask.core import get_dependencies |
| 1023 | |
| 1024 | deps = get_dependencies(self.dsk, task=v) |
| 1025 | |
| 1026 | if self._removed: |
| 1027 | # deps is a frozenset but for good measure, let's not use -= since |
| 1028 | # that _may_ perform an inplace mutation |
| 1029 | deps = deps - self._removed |
| 1030 | self._cache[key] = deps |
| 1031 | return deps |
| 1032 | |
| 1033 | def __iter__(self): |
| 1034 | return iter(self.dsk) |
| 1035 | |
| 1036 | def __delitem__(self, key: Any) -> None: |
| 1037 | self._cache.clear() |
| 1038 | self._removed.add(key) |
| 1039 | |
| 1040 | def __setitem__(self, key: Any, value: Any) -> None: |
| 1041 | raise NotImplementedError |
| 1042 | |
| 1043 | def __len__(self) -> int: |
| 1044 | return len(self.dsk) |
| 1045 | |
| 1046 | |
| 1047 | class _DevNullMapping(MutableMapping): |
no outgoing calls
searching dependent graphs…