| 830 | |
| 831 | |
| 832 | class DelayedLeaf(Delayed): |
| 833 | __slots__ = ("_obj", "_pure", "_nout") |
| 834 | |
| 835 | def __init__(self, obj, key, pure=None, nout=None): |
| 836 | super().__init__(key, None, length=nout) |
| 837 | self._obj = obj |
| 838 | self._pure = pure |
| 839 | self._nout = nout |
| 840 | |
| 841 | @property |
| 842 | def dask(self): |
| 843 | if isinstance(self._obj, (TaskRef, GraphNode)): |
| 844 | dsk = {self._key: self._obj} |
| 845 | else: |
| 846 | dsk = {self._key: DataNode(self._key, self._obj)} |
| 847 | return HighLevelGraph.from_collections(self._key, dsk, dependencies=()) |
| 848 | |
| 849 | def __call__(self, *args, **kwargs): |
| 850 | return call_function( |
| 851 | self._obj, self._key, args, kwargs, pure=self._pure, nout=self._nout |
| 852 | ) |
| 853 | |
| 854 | @property |
| 855 | def __name__(self): |
| 856 | return self._obj.__name__ |
| 857 | |
| 858 | @property |
| 859 | def __doc__(self): |
| 860 | return self._obj.__doc__ |
| 861 | |
| 862 | @property |
| 863 | def __wrapped__(self): |
| 864 | return self._obj |
| 865 | |
| 866 | |
| 867 | class DelayedAttr(Delayed): |