def sp_profile(A): """Returns the total, lower, and upper profiles of a sparse matrix. If the matrix is symmetric then the upper and lower profiles are identical. Diagonal matrices have zero profile. Parameters ---------- A : csr_matrix, csc_matrix Input matrix """ if sp.isspmatrix_csr(A): up = _sparse_profile(A.indices, A.indptr, A.shape[0]) A = A.tocsc() lp = _sparse_profile(A.indices, A.indptr, A.shape[0]) elif sp.isspmatrix_csc(A): lp = _sparse_profile(A.indices, A.indptr, A.shape[0]) A = A.tocsr() up = _sparse_profile(A.indices, A.indptr, A.shape[0]) else: raise TypeError('Input sparse matrix must be in CSR or CSC format.') return up+lp, lp, up