| 7 | using namespace PyMesh; |
| 8 | |
| 9 | void ZSparseMatrix::import_raw_csc( |
| 10 | size_t num_rows, size_t num_cols, |
| 11 | int* inner_idx_array, size_t inner_size, |
| 12 | int* outer_idx_array, size_t outer_size, |
| 13 | double* value_array, size_t value_size) { |
| 14 | assert(outer_size > 1); |
| 15 | assert(inner_size == value_size); |
| 16 | assert(num_cols == outer_size - 1); |
| 17 | |
| 18 | VectorI nnz(outer_size - 1); |
| 19 | for (size_t i=1; i<outer_size; i++) { |
| 20 | nnz[i-1] = outer_idx_array[i] - outer_idx_array[i-1]; |
| 21 | } |
| 22 | |
| 23 | resize(num_rows, num_cols); |
| 24 | reserve(value_size); |
| 25 | |
| 26 | size_t col,row; |
| 27 | double val; |
| 28 | for (size_t i=0; i<outer_size-1; i++) { |
| 29 | col = i; |
| 30 | const size_t start = outer_idx_array[i]; |
| 31 | const size_t end = outer_idx_array[i+1]; |
| 32 | for (size_t j=start; j<end; j++) { |
| 33 | row = inner_idx_array[j]; |
| 34 | val = value_array[j]; |
| 35 | insert(row, col) = val; |
| 36 | } |
| 37 | } |
| 38 | |
| 39 | makeCompressed(); |
| 40 | assert(isCompressed()); |
| 41 | assert(outer_size == get_outer_size()); |
| 42 | assert(inner_size == get_inner_size()); |
| 43 | assert(value_size == get_value_size()); |
| 44 | for (size_t i=0; i<outer_size; i++) { |
| 45 | assert(outer_idx_array[i] == outerIndexPtr()[i]); |
| 46 | } |
| 47 | for (size_t i=0; i<inner_size; i++) { |
| 48 | assert(inner_idx_array[i] == innerIndexPtr()[i]); |
| 49 | assert(value_array[i] == valuePtr()[i]); |
| 50 | } |
| 51 | } |
| 52 | |
| 53 | void ZSparseMatrix::import_raw_coo( |
| 54 | size_t num_rows, size_t num_cols, |