Source code for openmdao.matrices.csc_matrix

"""Define the CSCmatrix class."""

from scipy.sparse import csc_matrix

from openmdao.matrices.coo_matrix import COOMatrix


[docs]class CSCMatrix(COOMatrix): """ Sparse matrix in Compressed Col Storage format. Parameters ---------- submats : dict Dictionary of sub-jacobian data keyed by (row_name, col_name). """ def _pre_update(self, dtype): """ Do anything that needs to be done at the start of SplitJacobian._update. Parameters ---------- dtype : dtype The dtype of the jacobian. """ super()._pre_update(dtype) self._matrix = self._coo def _post_update(self): """ Do anything that needs to be done at the end of SplitJacobian._update. """ coo = self._coo # this will add any repeated entries together # NOTE: The CSC matrix was created in the following way instead of using self._coo.tocsc() # because on older versions of scipy, self._coo.tocsc() reuses the row/col arrays and the # result is that self._coo.row and self._coo.col get scrambled after csc conversion. self._matrix = csc_matrix((coo.data, (coo.row, coo.col)), shape=coo.shape) self._matrix_T = None # reset the transpose
[docs] def transpose(self): """ Transpose the matrix. Returns ------- csr_matrix Transposed matrix. """ if self._matrix_T is None: # the transpose should only happen in reverse mode for apply_linear, and _matrix.T # will be CSR, which is preferred for a matvec product. self._matrix_T = self._matrix.T return self._matrix_T