#![allow(clippy::redundant_slicing)]
pub mod array_backend;
mod dense_vector;
pub mod errors;
pub mod indexing;
pub mod io;
mod mul_acc;
pub mod num_kinds;
mod range;
mod sparse;
pub mod stack;
pub type Ix1 = ndarray::Ix1;
pub type Ix2 = ndarray::Ix2;
pub use crate::indexing::SpIndex;
pub use crate::sparse::{
csmat::CsIter,
indptr::{IndPtr, IndPtrBase, IndPtrView},
kronecker::kronecker_product,
CsMat, CsMatBase, CsMatI, CsMatVecView, CsMatView, CsMatViewI,
CsMatViewMut, CsMatViewMutI, CsStructure, CsStructureI, CsStructureView,
CsStructureViewI, CsVec, CsVecBase, CsVecI, CsVecView, CsVecViewI,
CsVecViewMut, CsVecViewMutI, SparseMat, TriMat, TriMatBase, TriMatI,
TriMatIter, TriMatView, TriMatViewI, TriMatViewMut, TriMatViewMutI,
};
pub use crate::dense_vector::{DenseVector, DenseVectorMut};
pub use crate::mul_acc::MulAcc;
pub use crate::sparse::symmetric::is_symmetric;
pub use crate::sparse::permutation::{
perm_is_valid, transform_mat_papt, PermOwned, PermOwnedI, PermView,
PermViewI, Permutation,
};
pub use crate::sparse::CompressedStorage::{self, CSC, CSR};
pub use crate::sparse::binop;
pub use crate::sparse::linalg;
pub use crate::sparse::prod;
pub use crate::sparse::smmp;
pub use crate::sparse::special_mats;
pub use crate::sparse::visu;
pub mod vec {
pub use crate::sparse::{CsVec, CsVecBase, CsVecView, CsVecViewMut};
pub use crate::sparse::vec::{
IntoSparseVecIter, NnzEither, NnzIndex, NnzOrZip, SparseIterTools,
VecDim, VectorIterator, VectorIteratorMut,
};
}
pub use crate::sparse::construct::{bmat, hstack, vstack};
pub use crate::sparse::to_dense::assign_to_dense;
pub type Shape = (usize, usize);
#[derive(Copy, Clone, Eq, PartialEq, Debug)]
pub enum SymmetryCheck {
CheckSymmetry,
DontCheckSymmetry,
}
pub use SymmetryCheck::*;
#[derive(Copy, Clone, Eq, PartialEq, Debug)]
pub enum PermutationCheck {
CheckPerm,
DontCheckPerm,
}
pub use PermutationCheck::*;
#[derive(Copy, Clone, Eq, PartialEq, Debug)]
#[non_exhaustive]
pub enum FillInReduction {
NoReduction,
ReverseCuthillMcKee,
#[allow(clippy::upper_case_acronyms)]
CAMDSuiteSparse,
}
#[cfg(feature = "approx")]
pub mod approx {
pub use approx::{AbsDiffEq, RelativeEq, UlpsEq};
}
#[cfg(test)]
mod test_data;
#[cfg(test)]
mod test {
use super::CsMat;
#[test]
fn iter_rbr() {
let mat = CsMat::new(
(3, 3),
vec![0, 2, 3, 3],
vec![1, 2, 0],
vec![0.1, 0.2, 0.3],
);
let view = mat.view();
let mut iter = view.iter();
assert_eq!(iter.next(), Some((&0.1, (0, 1))));
assert_eq!(iter.next(), Some((&0.2, (0, 2))));
assert_eq!(iter.next(), Some((&0.3, (1, 0))));
assert_eq!(iter.next(), None);
}
}