use num_enum::{IntoPrimitive, TryFromPrimitive};
use singe_core::{impl_enum_conversion, impl_enum_display};
use singe_cusparse_sys as sys;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, TryFromPrimitive, IntoPrimitive)]
#[repr(u32)]
#[non_exhaustive]
pub enum PointerMode {
Host = sys::cusparsePointerMode_t::CUSPARSE_POINTER_MODE_HOST as _,
Device = sys::cusparsePointerMode_t::CUSPARSE_POINTER_MODE_DEVICE as _,
}
impl_enum_conversion!(sys::cusparsePointerMode_t, PointerMode);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, TryFromPrimitive, IntoPrimitive)]
#[repr(u32)]
#[non_exhaustive]
pub enum Action {
Symbolic = sys::cusparseAction_t::CUSPARSE_ACTION_SYMBOLIC as _,
Numeric = sys::cusparseAction_t::CUSPARSE_ACTION_NUMERIC as _,
}
impl_enum_conversion!(sys::cusparseAction_t, Action);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, TryFromPrimitive, IntoPrimitive)]
#[repr(u32)]
#[non_exhaustive]
pub enum MatrixType {
General = sys::cusparseMatrixType_t::CUSPARSE_MATRIX_TYPE_GENERAL as _,
Symmetric = sys::cusparseMatrixType_t::CUSPARSE_MATRIX_TYPE_SYMMETRIC as _,
Hermitian = sys::cusparseMatrixType_t::CUSPARSE_MATRIX_TYPE_HERMITIAN as _,
Triangular = sys::cusparseMatrixType_t::CUSPARSE_MATRIX_TYPE_TRIANGULAR as _,
}
impl_enum_conversion!(sys::cusparseMatrixType_t, MatrixType);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, TryFromPrimitive, IntoPrimitive)]
#[repr(u32)]
#[non_exhaustive]
pub enum FillMode {
Lower = sys::cusparseFillMode_t::CUSPARSE_FILL_MODE_LOWER as _,
Upper = sys::cusparseFillMode_t::CUSPARSE_FILL_MODE_UPPER as _,
}
impl_enum_conversion!(sys::cusparseFillMode_t, FillMode);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, TryFromPrimitive, IntoPrimitive)]
#[repr(u32)]
#[non_exhaustive]
pub enum DiagonalType {
NonUnit = sys::cusparseDiagType_t::CUSPARSE_DIAG_TYPE_NON_UNIT as _,
Unit = sys::cusparseDiagType_t::CUSPARSE_DIAG_TYPE_UNIT as _,
}
impl_enum_conversion!(sys::cusparseDiagType_t, DiagonalType);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, TryFromPrimitive, IntoPrimitive)]
#[repr(u32)]
#[non_exhaustive]
pub enum IndexBase {
Zero = sys::cusparseIndexBase_t::CUSPARSE_INDEX_BASE_ZERO as _,
One = sys::cusparseIndexBase_t::CUSPARSE_INDEX_BASE_ONE as _,
}
impl_enum_conversion!(sys::cusparseIndexBase_t, IndexBase);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, TryFromPrimitive, IntoPrimitive)]
#[repr(u32)]
#[non_exhaustive]
pub enum Operation {
NonTranspose = sys::cusparseOperation_t::CUSPARSE_OPERATION_NON_TRANSPOSE as _,
Transpose = sys::cusparseOperation_t::CUSPARSE_OPERATION_TRANSPOSE as _,
ConjugateTranspose = sys::cusparseOperation_t::CUSPARSE_OPERATION_CONJUGATE_TRANSPOSE as _,
}
impl Operation {
pub const HERMITIAN: Self = Self::ConjugateTranspose;
}
impl_enum_conversion!(sys::cusparseOperation_t, Operation);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, TryFromPrimitive, IntoPrimitive)]
#[repr(u32)]
#[non_exhaustive]
pub enum Direction {
Row = sys::cusparseDirection_t::CUSPARSE_DIRECTION_ROW as _,
Column = sys::cusparseDirection_t::CUSPARSE_DIRECTION_COLUMN as _,
}
impl_enum_conversion!(sys::cusparseDirection_t, Direction);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, TryFromPrimitive, IntoPrimitive)]
#[repr(u32)]
#[non_exhaustive]
pub enum ColorAlgorithm {
Algorithm0 = sys::cusparseColorAlg_t::CUSPARSE_COLOR_ALG0 as _,
Algorithm1 = sys::cusparseColorAlg_t::CUSPARSE_COLOR_ALG1 as _,
}
impl_enum_conversion!(sys::cusparseColorAlg_t, ColorAlgorithm);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, TryFromPrimitive, IntoPrimitive)]
#[repr(u32)]
#[non_exhaustive]
pub enum CsrToCscAlgorithm {
Default = sys::cusparseCsr2CscAlg_t::CUSPARSE_CSR2CSC_ALG_DEFAULT as _,
}
impl_enum_conversion!(sys::cusparseCsr2CscAlg_t, CsrToCscAlgorithm);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, TryFromPrimitive, IntoPrimitive)]
#[repr(u32)]
#[non_exhaustive]
pub enum Format {
Csr = sys::cusparseFormat_t::CUSPARSE_FORMAT_CSR as _,
Csc = sys::cusparseFormat_t::CUSPARSE_FORMAT_CSC as _,
Coo = sys::cusparseFormat_t::CUSPARSE_FORMAT_COO as _,
BlockedEll = sys::cusparseFormat_t::CUSPARSE_FORMAT_BLOCKED_ELL as _,
Bsr = sys::cusparseFormat_t::CUSPARSE_FORMAT_BSR as _,
SlicedEllpack = sys::cusparseFormat_t::CUSPARSE_FORMAT_SLICED_ELLPACK as _,
}
impl_enum_conversion!(sys::cusparseFormat_t, Format);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, TryFromPrimitive, IntoPrimitive)]
#[repr(u32)]
#[non_exhaustive]
pub enum Order {
Column = sys::cusparseOrder_t::CUSPARSE_ORDER_COL as _,
Row = sys::cusparseOrder_t::CUSPARSE_ORDER_ROW as _,
}
impl_enum_conversion!(sys::cusparseOrder_t, Order);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, TryFromPrimitive, IntoPrimitive)]
#[repr(u32)]
#[non_exhaustive]
pub enum IndexType {
I16 = sys::cusparseIndexType_t::CUSPARSE_INDEX_16U as _,
I32 = sys::cusparseIndexType_t::CUSPARSE_INDEX_32I as _,
I64 = sys::cusparseIndexType_t::CUSPARSE_INDEX_64I as _,
}
impl_enum_conversion!(sys::cusparseIndexType_t, IndexType);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, TryFromPrimitive, IntoPrimitive)]
#[repr(u32)]
#[non_exhaustive]
pub enum SparseMatrixAttribute {
FillMode = sys::cusparseSpMatAttribute_t::CUSPARSE_SPMAT_FILL_MODE as _,
DiagonalType = sys::cusparseSpMatAttribute_t::CUSPARSE_SPMAT_DIAG_TYPE as _,
}
impl_enum_conversion!(sys::cusparseSpMatAttribute_t, SparseMatrixAttribute);
pub trait IndexTypeLike: Copy + 'static {
fn index_type() -> IndexType;
}
impl IndexTypeLike for u16 {
fn index_type() -> IndexType {
IndexType::I16
}
}
impl IndexTypeLike for i32 {
fn index_type() -> IndexType {
IndexType::I32
}
}
impl IndexTypeLike for i64 {
fn index_type() -> IndexType {
IndexType::I64
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, TryFromPrimitive, IntoPrimitive)]
#[repr(u32)]
#[non_exhaustive]
pub enum SpMvAlgorithm {
Default = sys::cusparseSpMVAlg_t::CUSPARSE_SPMV_ALG_DEFAULT as _,
Csr1 = sys::cusparseSpMVAlg_t::CUSPARSE_SPMV_CSR_ALG1 as _,
Csr2 = sys::cusparseSpMVAlg_t::CUSPARSE_SPMV_CSR_ALG2 as _,
Coo1 = sys::cusparseSpMVAlg_t::CUSPARSE_SPMV_COO_ALG1 as _,
Coo2 = sys::cusparseSpMVAlg_t::CUSPARSE_SPMV_COO_ALG2 as _,
Sell1 = sys::cusparseSpMVAlg_t::CUSPARSE_SPMV_SELL_ALG1 as _,
Bsr1 = sys::cusparseSpMVAlg_t::CUSPARSE_SPMV_BSR_ALG1 as _,
}
impl_enum_conversion!(sys::cusparseSpMVAlg_t, SpMvAlgorithm);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, TryFromPrimitive, IntoPrimitive)]
#[repr(u32)]
#[non_exhaustive]
pub enum SpSvAlgorithm {
Default = sys::cusparseSpSVAlg_t::CUSPARSE_SPSV_ALG_DEFAULT as _,
}
impl_enum_conversion!(sys::cusparseSpSVAlg_t, SpSvAlgorithm);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, TryFromPrimitive, IntoPrimitive)]
#[repr(u32)]
#[non_exhaustive]
pub enum SpSvUpdate {
General = sys::cusparseSpSVUpdate_t::CUSPARSE_SPSV_UPDATE_GENERAL as _,
Diagonal = sys::cusparseSpSVUpdate_t::CUSPARSE_SPSV_UPDATE_DIAGONAL as _,
}
impl_enum_conversion!(sys::cusparseSpSVUpdate_t, SpSvUpdate);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, TryFromPrimitive, IntoPrimitive)]
#[repr(u32)]
#[non_exhaustive]
pub enum SpSMAlgorithm {
Default = sys::cusparseSpSMAlg_t::CUSPARSE_SPSM_ALG_DEFAULT as _,
}
impl_enum_conversion!(sys::cusparseSpSMAlg_t, SpSMAlgorithm);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, TryFromPrimitive, IntoPrimitive)]
#[repr(u32)]
#[non_exhaustive]
pub enum SpSmUpdate {
General = sys::cusparseSpSMUpdate_t::CUSPARSE_SPSM_UPDATE_GENERAL as _,
Diagonal = sys::cusparseSpSMUpdate_t::CUSPARSE_SPSM_UPDATE_DIAGONAL as _,
}
impl_enum_conversion!(sys::cusparseSpSMUpdate_t, SpSmUpdate);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, TryFromPrimitive, IntoPrimitive)]
#[repr(u32)]
#[non_exhaustive]
pub enum SparseToDenseAlgorithm {
Default = sys::cusparseSparseToDenseAlg_t::CUSPARSE_SPARSETODENSE_ALG_DEFAULT as _,
}
impl_enum_conversion!(sys::cusparseSparseToDenseAlg_t, SparseToDenseAlgorithm);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, TryFromPrimitive, IntoPrimitive)]
#[repr(u32)]
#[non_exhaustive]
pub enum DenseToSparseAlgorithm {
Default = sys::cusparseDenseToSparseAlg_t::CUSPARSE_DENSETOSPARSE_ALG_DEFAULT as _,
}
impl_enum_conversion!(sys::cusparseDenseToSparseAlg_t, DenseToSparseAlgorithm);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, TryFromPrimitive, IntoPrimitive)]
#[repr(u32)]
#[non_exhaustive]
pub enum SpMmAlgorithm {
Default = sys::cusparseSpMMAlg_t::CUSPARSE_SPMM_ALG_DEFAULT as _,
Coo1 = sys::cusparseSpMMAlg_t::CUSPARSE_SPMM_COO_ALG1 as _,
Coo2 = sys::cusparseSpMMAlg_t::CUSPARSE_SPMM_COO_ALG2 as _,
Coo3 = sys::cusparseSpMMAlg_t::CUSPARSE_SPMM_COO_ALG3 as _,
Coo4 = sys::cusparseSpMMAlg_t::CUSPARSE_SPMM_COO_ALG4 as _,
Csr1 = sys::cusparseSpMMAlg_t::CUSPARSE_SPMM_CSR_ALG1 as _,
Csr2 = sys::cusparseSpMMAlg_t::CUSPARSE_SPMM_CSR_ALG2 as _,
Csr3 = sys::cusparseSpMMAlg_t::CUSPARSE_SPMM_CSR_ALG3 as _,
BlockedEll1 = sys::cusparseSpMMAlg_t::CUSPARSE_SPMM_BLOCKED_ELL_ALG1 as _,
Bsr1 = sys::cusparseSpMMAlg_t::CUSPARSE_SPMM_BSR_ALG1 as _,
}
impl_enum_conversion!(sys::cusparseSpMMAlg_t, SpMmAlgorithm);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, TryFromPrimitive, IntoPrimitive)]
#[repr(u32)]
#[non_exhaustive]
pub enum SpMmOpAlgorithm {
Default = sys::cusparseSpMMOpAlg_t::CUSPARSE_SPMM_OP_ALG_DEFAULT as _,
}
impl_enum_conversion!(sys::cusparseSpMMOpAlg_t, SpMmOpAlgorithm);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, TryFromPrimitive, IntoPrimitive)]
#[repr(u32)]
#[non_exhaustive]
pub enum SpGemmAlgorithm {
Default = sys::cusparseSpGEMMAlg_t::CUSPARSE_SPGEMM_DEFAULT as _,
CsrDeterministic = sys::cusparseSpGEMMAlg_t::CUSPARSE_SPGEMM_CSR_ALG_DETERMINITIC as _,
CsrNondeterministic = sys::cusparseSpGEMMAlg_t::CUSPARSE_SPGEMM_CSR_ALG_NONDETERMINITIC as _,
Algorithm1 = sys::cusparseSpGEMMAlg_t::CUSPARSE_SPGEMM_ALG1 as _,
Algorithm2 = sys::cusparseSpGEMMAlg_t::CUSPARSE_SPGEMM_ALG2 as _,
Algorithm3 = sys::cusparseSpGEMMAlg_t::CUSPARSE_SPGEMM_ALG3 as _,
}
impl_enum_conversion!(sys::cusparseSpGEMMAlg_t, SpGemmAlgorithm);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, TryFromPrimitive, IntoPrimitive)]
#[repr(u32)]
#[non_exhaustive]
pub enum SddmmAlgorithm {
Default = sys::cusparseSDDMMAlg_t::CUSPARSE_SDDMM_ALG_DEFAULT as _,
}
impl_enum_conversion!(sys::cusparseSDDMMAlg_t, SddmmAlgorithm);
impl_enum_display!(PointerMode, {
PointerMode::Host => "CUSPARSE_POINTER_MODE_HOST",
PointerMode::Device => "CUSPARSE_POINTER_MODE_DEVICE",
});
impl_enum_display!(Action, {
Action::Symbolic => "CUSPARSE_ACTION_SYMBOLIC",
Action::Numeric => "CUSPARSE_ACTION_NUMERIC",
});
impl_enum_display!(MatrixType, {
MatrixType::General => "CUSPARSE_MATRIX_TYPE_GENERAL",
MatrixType::Symmetric => "CUSPARSE_MATRIX_TYPE_SYMMETRIC",
MatrixType::Hermitian => "CUSPARSE_MATRIX_TYPE_HERMITIAN",
MatrixType::Triangular => "CUSPARSE_MATRIX_TYPE_TRIANGULAR",
});
impl_enum_display!(FillMode, {
FillMode::Lower => "CUSPARSE_FILL_MODE_LOWER",
FillMode::Upper => "CUSPARSE_FILL_MODE_UPPER",
});
impl_enum_display!(DiagonalType, {
DiagonalType::NonUnit => "CUSPARSE_DIAG_TYPE_NON_UNIT",
DiagonalType::Unit => "CUSPARSE_DIAG_TYPE_UNIT",
});
impl_enum_display!(IndexBase, {
IndexBase::Zero => "CUSPARSE_INDEX_BASE_ZERO",
IndexBase::One => "CUSPARSE_INDEX_BASE_ONE",
});
impl_enum_display!(Operation, {
Operation::NonTranspose => "CUSPARSE_OPERATION_NON_TRANSPOSE",
Operation::Transpose => "CUSPARSE_OPERATION_TRANSPOSE",
Operation::ConjugateTranspose => "CUSPARSE_OPERATION_CONJUGATE_TRANSPOSE",
});
impl_enum_display!(Direction, {
Direction::Row => "CUSPARSE_DIRECTION_ROW",
Direction::Column => "CUSPARSE_DIRECTION_COLUMN",
});
impl_enum_display!(ColorAlgorithm, {
ColorAlgorithm::Algorithm0 => "CUSPARSE_COLOR_ALG0",
ColorAlgorithm::Algorithm1 => "CUSPARSE_COLOR_ALG1",
});
impl_enum_display!(CsrToCscAlgorithm, {
CsrToCscAlgorithm::Default => "CUSPARSE_CSR2CSC_ALG_DEFAULT",
});
impl_enum_display!(Format, {
Format::Csr => "CUSPARSE_FORMAT_CSR",
Format::Csc => "CUSPARSE_FORMAT_CSC",
Format::Coo => "CUSPARSE_FORMAT_COO",
Format::BlockedEll => "CUSPARSE_FORMAT_BLOCKED_ELL",
Format::Bsr => "CUSPARSE_FORMAT_BSR",
Format::SlicedEllpack => "CUSPARSE_FORMAT_SLICED_ELLPACK",
});
impl_enum_display!(Order, {
Order::Column => "CUSPARSE_ORDER_COL",
Order::Row => "CUSPARSE_ORDER_ROW",
});
impl_enum_display!(IndexType, {
IndexType::I16 => "CUSPARSE_INDEX_16U",
IndexType::I32 => "CUSPARSE_INDEX_32I",
IndexType::I64 => "CUSPARSE_INDEX_64I",
});
impl_enum_display!(SparseMatrixAttribute, {
SparseMatrixAttribute::FillMode => "CUSPARSE_SPMAT_FILL_MODE",
SparseMatrixAttribute::DiagonalType => "CUSPARSE_SPMAT_DIAG_TYPE",
});
impl_enum_display!(SpMvAlgorithm, {
SpMvAlgorithm::Default => "CUSPARSE_SPMV_ALG_DEFAULT",
SpMvAlgorithm::Csr1 => "CUSPARSE_SPMV_CSR_ALG1",
SpMvAlgorithm::Csr2 => "CUSPARSE_SPMV_CSR_ALG2",
SpMvAlgorithm::Coo1 => "CUSPARSE_SPMV_COO_ALG1",
SpMvAlgorithm::Coo2 => "CUSPARSE_SPMV_COO_ALG2",
SpMvAlgorithm::Sell1 => "CUSPARSE_SPMV_SELL_ALG1",
SpMvAlgorithm::Bsr1 => "CUSPARSE_SPMV_BSR_ALG1",
});
impl_enum_display!(SpSvAlgorithm, {
SpSvAlgorithm::Default => "CUSPARSE_SPSV_ALG_DEFAULT",
});
impl_enum_display!(SpSvUpdate, {
SpSvUpdate::General => "CUSPARSE_SPSV_UPDATE_GENERAL",
SpSvUpdate::Diagonal => "CUSPARSE_SPSV_UPDATE_DIAGONAL",
});
impl_enum_display!(SpSMAlgorithm, {
SpSMAlgorithm::Default => "CUSPARSE_SPSM_ALG_DEFAULT",
});
impl_enum_display!(SpSmUpdate, {
SpSmUpdate::General => "CUSPARSE_SPSM_UPDATE_GENERAL",
SpSmUpdate::Diagonal => "CUSPARSE_SPSM_UPDATE_DIAGONAL",
});
impl_enum_display!(SparseToDenseAlgorithm, {
SparseToDenseAlgorithm::Default => "CUSPARSE_SPARSETODENSE_ALG_DEFAULT",
});
impl_enum_display!(DenseToSparseAlgorithm, {
DenseToSparseAlgorithm::Default => "CUSPARSE_DENSETOSPARSE_ALG_DEFAULT",
});
impl_enum_display!(SpMmAlgorithm, {
SpMmAlgorithm::Default => "CUSPARSE_SPMM_ALG_DEFAULT",
SpMmAlgorithm::Coo1 => "CUSPARSE_SPMM_COO_ALG1",
SpMmAlgorithm::Coo2 => "CUSPARSE_SPMM_COO_ALG2",
SpMmAlgorithm::Coo3 => "CUSPARSE_SPMM_COO_ALG3",
SpMmAlgorithm::Coo4 => "CUSPARSE_SPMM_COO_ALG4",
SpMmAlgorithm::Csr1 => "CUSPARSE_SPMM_CSR_ALG1",
SpMmAlgorithm::Csr2 => "CUSPARSE_SPMM_CSR_ALG2",
SpMmAlgorithm::Csr3 => "CUSPARSE_SPMM_CSR_ALG3",
SpMmAlgorithm::BlockedEll1 => "CUSPARSE_SPMM_BLOCKED_ELL_ALG1",
SpMmAlgorithm::Bsr1 => "CUSPARSE_SPMM_BSR_ALG1",
});
impl_enum_display!(SpMmOpAlgorithm, {
SpMmOpAlgorithm::Default => "CUSPARSE_SPMM_OP_ALG_DEFAULT",
});
impl_enum_display!(SpGemmAlgorithm, {
SpGemmAlgorithm::Default => "CUSPARSE_SPGEMM_DEFAULT",
SpGemmAlgorithm::CsrDeterministic => "CUSPARSE_SPGEMM_CSR_ALG_DETERMINITIC",
SpGemmAlgorithm::CsrNondeterministic => "CUSPARSE_SPGEMM_CSR_ALG_NONDETERMINITIC",
SpGemmAlgorithm::Algorithm1 => "CUSPARSE_SPGEMM_ALG1",
SpGemmAlgorithm::Algorithm2 => "CUSPARSE_SPGEMM_ALG2",
SpGemmAlgorithm::Algorithm3 => "CUSPARSE_SPGEMM_ALG3",
});
impl_enum_display!(SddmmAlgorithm, {
SddmmAlgorithm::Default => "CUSPARSE_SDDMM_ALG_DEFAULT",
});