| 510 | |
| 511 | |
| 512 | class Alias(GraphNode): |
| 513 | target: KeyType |
| 514 | __slots__ = tuple(__annotations__) |
| 515 | |
| 516 | def __init__( |
| 517 | self, key: KeyType | TaskRef, target: Alias | TaskRef | KeyType | None = None |
| 518 | ): |
| 519 | if isinstance(key, TaskRef): |
| 520 | key = key.key |
| 521 | self.key = key |
| 522 | if target is None: |
| 523 | target = key |
| 524 | if isinstance(target, Alias): |
| 525 | target = target.target |
| 526 | if isinstance(target, TaskRef): |
| 527 | target = target.key |
| 528 | self.target = target |
| 529 | self._dependencies = frozenset((self.target,)) |
| 530 | |
| 531 | def __reduce__(self): |
| 532 | return Alias, (self.key, self.target) |
| 533 | |
| 534 | def copy(self): |
| 535 | return Alias(self.key, self.target) |
| 536 | |
| 537 | def substitute( |
| 538 | self, subs: dict[KeyType, KeyType | GraphNode], key: KeyType | None = None |
| 539 | ) -> GraphNode: |
| 540 | if self.key in subs or self.target in subs: |
| 541 | sub_key = subs.get(self.key, self.key) |
| 542 | val = subs.get(self.target, self.target) |
| 543 | if sub_key == self.key and val == self.target: |
| 544 | return self |
| 545 | if isinstance(val, (GraphNode, TaskRef)): |
| 546 | return val.substitute({}, key=key) |
| 547 | if key is None and isinstance(sub_key, GraphNode): |
| 548 | raise RuntimeError( |
| 549 | f"Invalid substitution encountered {self.key!r} -> {sub_key}" |
| 550 | ) |
| 551 | return Alias(key or sub_key, val) # type: ignore [arg-type] |
| 552 | return self |
| 553 | |
| 554 | def __dask_tokenize__(self): |
| 555 | return (type(self).__name__, self.key, self.target) |
| 556 | |
| 557 | def __call__(self, values=()): |
| 558 | self._verify_values(values) |
| 559 | return values[self.target] |
| 560 | |
| 561 | def __repr__(self): |
| 562 | if self.key != self.target: |
| 563 | return f"Alias({self.key!r}->{self.target!r})" |
| 564 | else: |
| 565 | return f"Alias({self.key!r})" |
| 566 | |
| 567 | def __eq__(self, value: object) -> bool: |
| 568 | if not isinstance(value, Alias): |
| 569 | return False |
no outgoing calls
searching dependent graphs…