pub mod cow;
pub mod ops;
pub mod spmv;
pub mod types;
pub mod view;
pub use cow::{
CowFormat,
OwnedBlockedCoo,
OwnedCsr,
OwnedDenseWithMask,
OwnedSellP,
SparseCow,
};
pub use ops::SparseOps;
pub use spmv::SparseSpMv;
pub use types::{
BlockedCooData, CsrData, DenseWithMaskData, SellPData, SparseShape, ValidatedData,
};
pub use view::{SparseView, SparseViewShape};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct Csr;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct SellP<const C: usize>;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct BlockedCoo<const BM: usize, const BN: usize>;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct DenseWithMask;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct Validated<F>(core::marker::PhantomData<F>);
impl crate::private::Sealed for Csr {}
impl<const C: usize> crate::private::Sealed for SellP<C> {}
impl<const BM: usize, const BN: usize> crate::private::Sealed for BlockedCoo<BM, BN> {}
impl crate::private::Sealed for DenseWithMask {}
impl<F: SparseFormat> crate::private::Sealed for Validated<F> {}
pub trait SparseFormat: crate::private::Sealed + Send + Sync + 'static {
const NAME: &'static str;
type Storage<'a, T: 'a>: SparseShape;
}
impl SparseFormat for Csr {
const NAME: &'static str = "CSR";
type Storage<'a, T: 'a> = CsrData<'a, T>;
}
impl<const C: usize> SparseFormat for SellP<C> {
const NAME: &'static str = "SELL-p";
type Storage<'a, T: 'a> = SellPData<'a, T, C>;
}
impl<const BM: usize, const BN: usize> SparseFormat for BlockedCoo<BM, BN> {
const NAME: &'static str = "Blocked-COO";
type Storage<'a, T: 'a> = BlockedCooData<'a, T, BM, BN>;
}
impl SparseFormat for DenseWithMask {
const NAME: &'static str = "DenseWithMask";
type Storage<'a, T: 'a> = DenseWithMaskData<'a, T>;
}
impl<F: SparseFormat> SparseFormat for Validated<F> {
const NAME: &'static str = F::NAME;
type Storage<'a, T: 'a> = ValidatedData<F::Storage<'a, T>>;
}