Add an (incomplete) overview of planned functionality for nalgebra-sparse

The way it is currently written is temporary, but it helps structure
the work towards an initial MVP.
This commit is contained in:
Andreas Longva 2020-09-22 10:51:29 +02:00
parent b1199da206
commit 7e94a1539a

View File

@ -1,6 +1,63 @@
//! Sparse matrices and algorithms for nalgebra. //! Sparse matrices and algorithms for nalgebra.
//! //!
//! TODO: Docs //! TODO: Docs
//!
//!
//! ### Planned functionality
//!
//! Below we list desired functionality. This further needs to be refined into what is needed
//! for an initial contribution, and what can be added in future contributions.
//!
//! - Sparsity pattern type. Functionality:
//! - [x] Access to offsets, indices as slices.
//! - [x] Return number of nnz
//! - [x] Access a given lane as a slice of minor indices
//! - [x] Construct from valid offset + index data
//! - [ ] Construct from unsorted (but otherwise valid) offset + index data
//! - [x] Iterate over entries (i, j) in the pattern
//! - CSR matrix type. Functionality:
//! - [x] Access to CSR data as slices.
//! - [x] Return number of nnz
//! - [x] Access a given row, which gives convenient access to the data associated
//! with a particular row
//! - [x] Construct from valid CSR data
//! - [ ] Construct from unsorted CSR data
//! - [x] Iterate over entries (i, j, v) in the matrix (+mutable).
//! - [x] Iterate over rows in the matrix (+ mutable).
//!
//! - CSC matrix type. Functionality:
//! - Same as CSR, but with columns instead of rows.
//! - COO matrix type. Functionality:
//! - [x] Construct new "empty" COO matrix
//! - [x] Construct from triplet arrays.
//! - [x] Push new triplets to the matrix.
//! - [x] Iterate over triplets.
//! - [x] "Disassemble" the COO matrix into its underlying triplet arrays.
//! - Format conversion:
//! - [x] COO -> Dense
//! - [ ] CSR -> Dense
//! - [ ] CSC -> Dense
//! - [ ] COO -> CSR
//! - [ ] COO -> CSC
//! - [ ] CSR -> CSC
//! - [ ] CSC -> CSR
//! - [ ] CSR -> COO
//! - [ ] CSC -> COO
//! - Arithmetic. In general arithmetic is only implemented between instances of the same format,
//! or between dense and instances of a given format. For example, we do not implement
//! CSR * CSC, only CSR * CSR and CSC * CSC.
//! - CSR:
//! - [ ] Dense = CSR * Dense (the other way around is not particularly useful)
//! - [ ] CSR = CSR * CSR
//! - [ ] CSR = CSR +- CSR
//! - [ ] CSR +=/-= CSR
//! - COO:
//! - [ ] Dense = COO * Dense (sometimes useful for very sparse matrices)
//! - CSC:
//! - Same as CSR
//! - Cholesky factorization (port existing factorization from nalgebra's sparse module)
//!
//!
#![deny(non_camel_case_types)] #![deny(non_camel_case_types)]
#![deny(unused_parens)] #![deny(unused_parens)]
#![deny(non_upper_case_globals)] #![deny(non_upper_case_globals)]