def new_block(self, op_name, grid_entry, grid_meta): op_func = np.__getattribute__(op_name) grid = ArrayGrid.from_meta(grid_meta) block_shape = grid.get_block_shape(grid_entry) if op_name == "eye": assert np.all(np.diff(grid_entry) == 0) return op_func(*block_shape, dtype=grid.dtype) else: return op_func(block_shape, dtype=grid.dtype)
def csc(self): meta_swap = self.grid.to_meta() grid_swap = ArrayGrid.from_meta(meta_swap) rarr_src = np.ndarray(self.blocks.shape, dtype='O') for grid_entry in self.grid.get_entry_iterator(): rarr_src[grid_entry] = self.blocks[grid_entry].csc() rarr_swap = SparseBlockArray(grid_swap, self.system, rarr_src) return rarr_swap
def read_fs(self, filename: str): meta = self._filesystem.read_meta_fs(filename) addresses = meta["addresses"] grid_meta = meta["grid_meta"] grid = ArrayGrid.from_meta(grid_meta) ba: BlockArray = BlockArray(grid, self._system) for grid_entry in addresses: node_address = addresses[grid_entry] options = {"resources": {node_address: 1.0 / 10**4}} ba.blocks[grid_entry].oid = self._filesystem.read_block_fs( filename, grid_entry, grid_meta, options=options) return ba
def __getattr__(self, item): if item != "T": raise NotImplementedError(item) metaT = self.grid.to_meta() metaT["shape"] = tuple(reversed(metaT["shape"])) metaT["block_shape"] = tuple(reversed(metaT["block_shape"])) result_grid: ArrayGrid = ArrayGrid.from_meta(metaT) result_graphs = np.copy(self.graphs.T) for grid_entry in result_grid.get_entry_iterator(): self._add_uop("transpose", grid_entry, result_graphs, result_graphs) return GraphArray(result_grid, self.cluster_state, result_graphs, copy_on_op=self.copy_on_op)
def __getattr__(self, item): if item == "__array_priority__" or item == "__array_struct__": # This is triggered by a numpy array on the LHS. raise ValueError("Unable to covert numpy array to block array.") if item != "T": raise NotImplementedError(item) metaT = self.grid.to_meta() metaT["shape"] = tuple(reversed(metaT["shape"])) metaT["block_shape"] = tuple(reversed(metaT["block_shape"])) gridT = ArrayGrid.from_meta(metaT) rarrT = BlockArray(gridT, self.system) rarrT.blocks = np.copy(self.blocks.T) for grid_entry in rarrT.grid.get_entry_iterator(): rarrT.blocks[grid_entry] = rarrT.blocks[grid_entry].transpose() return rarrT
def delete_fs(self, filename: str): meta = self._filesystem.read_meta_fs(filename) addresses = meta["addresses"] grid_meta = meta["grid_meta"] grid = ArrayGrid.from_meta(grid_meta) result_grid = ArrayGrid(grid.grid_shape, tuple(np.ones_like(grid.shape, dtype=np.int)), dtype=dict.__name__) rarr = BlockArray(result_grid, self._system) for grid_entry in addresses: node_address = addresses[grid_entry] options = {"resources": {node_address: 1.0 / 10**4}} rarr.blocks[grid_entry].oid = self._filesystem.delete_block_fs( filename, grid_entry, grid_meta, options=options) self._filesystem.delete_meta_fs(filename) return rarr
def swapaxes(self, axis1, axis2): meta_swap = self.grid.to_meta() shape = list(meta_swap["shape"]) block_shape = list(meta_swap["block_shape"]) dim = len(shape) if axis1 >= dim or axis2 >= dim: raise ValueError("axis is larger than the array dimension") shape[axis1], shape[axis2] = shape[axis2], shape[axis1] block_shape[axis1], block_shape[axis2] = block_shape[axis2], block_shape[axis1] meta_swap["shape"] = tuple(shape) meta_swap["block_shape"] = tuple(block_shape) grid_swap = ArrayGrid.from_meta(meta_swap) rarr_src = np.ndarray(self.blocks.shape, dtype='O') for grid_entry in self.grid.get_entry_iterator(): rarr_src[grid_entry] = self.blocks[grid_entry].swapaxes(axis1, axis2) rarr_src = rarr_src.swapaxes(axis1, axis2) rarr_swap = BlockArray(grid_swap, self.system, rarr_src) return rarr_swap
def empty(self, grid_entry, grid_meta): grid = ArrayGrid.from_meta(grid_meta) block_shape = grid.get_block_shape(grid_entry) return np.empty(block_shape, dtype=grid.dtype)
def delete_block_s3(filename: AnyStr, grid_entry: Tuple, grid_meta: Dict): return np.array(StoredArrayS3( filename, ArrayGrid.from_meta(grid_meta)).delete(grid_entry), dtype=dict)
def read_block_s3(filename: AnyStr, grid_entry: Tuple, grid_meta: Dict): return StoredArrayS3(filename, ArrayGrid.from_meta(grid_meta)).get(grid_entry)
def write_block_s3(block: Any, filename: AnyStr, grid_entry: Tuple, grid_meta: Dict): return np.array(StoredArrayS3(filename, ArrayGrid.from_meta(grid_meta)).put( grid_entry, block), dtype=dict)
def write_meta_s3(filename: AnyStr, grid_meta: Dict): sa: StoredArrayS3 = StoredArrayS3(filename, ArrayGrid.from_meta(grid_meta)) return np.array(sa.put_grid(sa.grid), dtype=dict)