Exemplo n.º 1
0
 def cholesky(self, X: BlockArray):
     # TODO (hme): Implement scalable version.
     # Note:
     # A = Q, R
     # A.T @ A = R.T @ R
     # A.T @ A = L @ L.T
     # => R == L.T
     block_shape = X.block_shape
     assert len(X.shape) == 2
     assert X.shape[0] == X.shape[1]
     single_block = X.shape[0] == X.block_shape[0] and X.shape[
         1] == X.block_shape[1]
     if single_block:
         result = X.copy()
     else:
         result = X.reshape(block_shape=X.shape)
     result.blocks[0,
                   0].oid = self._system.cholesky(result.blocks[0, 0].oid,
                                                  syskwargs={
                                                      "grid_entry": (0, 0),
                                                      "grid_shape": (1, 1)
                                                  })
     if not single_block:
         result = result.reshape(block_shape=block_shape)
     return result
Exemplo n.º 2
0
def inv(app: ArrayApplication, X: BlockArray):
    # TODO (hme): Implement scalable version.
    block_shape = X.block_shape
    assert len(X.shape) == 2
    assert X.shape[0] == X.shape[1]
    single_block = X.shape[0] == X.block_shape[0] and X.shape[1] == X.block_shape[1]
    if single_block:
        result = X.copy()
    else:
        result = X.reshape(block_shape=X.shape)
    result.blocks[0, 0].oid = app.cm.inv(result.blocks[0, 0].oid,
                                         syskwargs={
                                             "grid_entry": (0, 0),
                                             "grid_shape": (1, 1)
                                         })
    if not single_block:
        result = result.reshape(block_shape=block_shape)
    return result
Exemplo n.º 3
0
 def _inv(self, remote_func, kwargs, X: BlockArray):
     # TODO (hme): Implement scalable version.
     block_shape = X.block_shape
     assert len(X.shape) == 2
     assert X.shape[0] == X.shape[1]
     single_block = X.shape[0] == X.block_shape[0] and X.shape[
         1] == X.block_shape[1]
     if single_block:
         result = X.copy()
     else:
         result = X.reshape(block_shape=X.shape)
     result.blocks[0, 0].oid = remote_func(result.blocks[0, 0].oid,
                                           **kwargs,
                                           syskwargs={
                                               "grid_entry": (0, 0),
                                               "grid_shape": (1, 1)
                                           })
     if not single_block:
         result = result.reshape(block_shape=block_shape)
     return result
Exemplo n.º 4
0
 def inv_sym_psd(self, X: BlockArray):
     # Assumes X is symmetric PSD.
     # TODO (hme): Implement scalable version.
     assert len(X.shape) == 2
     assert X.shape[0] == X.shape[1]
     single_block = X.shape[0] == X.block_shape[0] and X.shape[
         1] == X.block_shape[1]
     if single_block:
         result = X.copy()
     else:
         result = X.reshape(block_shape=X.shape)
     result.blocks[0,
                   0].oid = self._system.inv_sym_psd(result.blocks[0,
                                                                   0].oid,
                                                     syskwargs={
                                                         "grid_entry":
                                                         (0, 0),
                                                         "grid_shape":
                                                         (1, 1)
                                                     })
     if not single_block:
         result = result.reshape(block_shape=X.block_shape)
     return result
Exemplo n.º 5
0
def copy(a: BlockArray, order="K", subok=False):
    assert order == "K" and not subok, "Only default args supported."
    return a.copy()