def select(self, subscript: tuple): if selection.is_advanced_selection(subscript): # This is not optimized. return self.advanced_select(subscript) else: # This is optimized. return self.basic_select(subscript)
def __getitem__(self, item): if not isinstance(item, tuple): ss = (item,) else: ss = item # We need to fetch any block arrays. tmp = [] for entry in ss: if isinstance(entry, BlockArray): tmp.append(entry.get()) else: tmp.append(entry) ss = tmp is_handled_advanced = True if len(ss) > 1: # Check if all entries are full slices except the last entry. for entry in ss[:-1]: is_handled_advanced = is_handled_advanced and (isinstance(entry, slice) and entry.start is None and entry.stop is None) if is_handled_advanced and selection.is_advanced_selection((ss[-1],)): # Treat this as a shuffle. return self._advanced_single_array_subscript(sel=(ss[-1],), axis=len(ss)-1) av: ArrayView = ArrayView.from_block_array(self) # TODO (hme): We don't have to create, but do so for now until we need to optimize. return av[item].create(BlockArray)
def assign(self, subscript: Tuple, value): if selection.is_advanced_selection(subscript): # This is not optimized. return self.advanced_assign(subscript, value) else: # This is optimized. return self.basic_assign(subscript, value)
def test_basics(): assert is_advanced_selection((0, np.array([3, 1, 2])))