| 961 | |
| 962 | |
| 963 | class MemoryCachedArray(ExplicitlyIndexedNDArrayMixin): |
| 964 | __slots__ = ("array",) |
| 965 | |
| 966 | def __init__(self, array): |
| 967 | self.array = _wrap_numpy_scalars(as_indexable(array)) |
| 968 | |
| 969 | def get_duck_array(self): |
| 970 | duck_array = self.array.get_duck_array() |
| 971 | # ensure the array object is cached in-memory |
| 972 | self.array = as_indexable(duck_array) |
| 973 | return duck_array |
| 974 | |
| 975 | async def async_get_duck_array(self): |
| 976 | duck_array = await self.array.async_get_duck_array() |
| 977 | # ensure the array object is cached in-memory |
| 978 | self.array = as_indexable(duck_array) |
| 979 | return duck_array |
| 980 | |
| 981 | def _oindex_get(self, indexer: OuterIndexer): |
| 982 | return type(self)(_wrap_numpy_scalars(self.array.oindex[indexer])) |
| 983 | |
| 984 | def _vindex_get(self, indexer: VectorizedIndexer): |
| 985 | return type(self)(_wrap_numpy_scalars(self.array.vindex[indexer])) |
| 986 | |
| 987 | def __getitem__(self, indexer: ExplicitIndexer): |
| 988 | self._check_and_raise_if_non_basic_indexer(indexer) |
| 989 | return type(self)(_wrap_numpy_scalars(self.array[indexer])) |
| 990 | |
| 991 | def transpose(self, order): |
| 992 | return self.array.transpose(order) |
| 993 | |
| 994 | def _vindex_set(self, indexer: VectorizedIndexer, value: Any) -> None: |
| 995 | self.array.vindex[indexer] = value |
| 996 | |
| 997 | def _oindex_set(self, indexer: OuterIndexer, value: Any) -> None: |
| 998 | self.array.oindex[indexer] = value |
| 999 | |
| 1000 | def __setitem__(self, indexer: ExplicitIndexer, value: Any) -> None: |
| 1001 | self._check_and_raise_if_non_basic_indexer(indexer) |
| 1002 | self.array[indexer] = value |
| 1003 | |
| 1004 | |
| 1005 | def as_indexable(array): |
no outgoing calls
searching dependent graphs…