| 573 | |
| 574 | |
| 575 | class DataNode(GraphNode): |
| 576 | value: Any |
| 577 | typ: type |
| 578 | __slots__ = tuple(__annotations__) |
| 579 | |
| 580 | def __init__(self, key: Any, value: Any): |
| 581 | if key is None: |
| 582 | key = (type(value).__name__, next(_anom_count)) |
| 583 | self.key = key |
| 584 | self.value = value |
| 585 | self.typ = type(value) |
| 586 | self._dependencies = _no_deps |
| 587 | |
| 588 | @property |
| 589 | def data_producer(self) -> bool: |
| 590 | return True |
| 591 | |
| 592 | def copy(self): |
| 593 | return DataNode(self.key, self.value) |
| 594 | |
| 595 | def __call__(self, values=()): |
| 596 | return self.value |
| 597 | |
| 598 | def __repr__(self): |
| 599 | return f"DataNode({self.value!r})" |
| 600 | |
| 601 | def __reduce__(self): |
| 602 | return (DataNode, (self.key, self.value)) |
| 603 | |
| 604 | def __dask_tokenize__(self): |
| 605 | from dask.base import tokenize |
| 606 | |
| 607 | return (type(self).__name__, tokenize(self.value)) |
| 608 | |
| 609 | def substitute( |
| 610 | self, subs: dict[KeyType, KeyType | GraphNode], key: KeyType | None = None |
| 611 | ) -> DataNode: |
| 612 | if key is not None and key != self.key: |
| 613 | return DataNode(key, self.value) |
| 614 | return self |
| 615 | |
| 616 | def __iter__(self): |
| 617 | return iter(self.value) |
| 618 | |
| 619 | |
| 620 | def _get_dependencies(obj: object) -> set | frozenset: |
no outgoing calls
searching dependent graphs…