use std::fmt::{self, Display, Formatter};
use num_enum::{IntoPrimitive, TryFromPrimitive};
use singe_core::impl_enum_conversion;
use singe_cusparse_sys as sys;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, TryFromPrimitive, IntoPrimitive)]
#[repr(u32)]
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)]
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)]
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)]
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)]
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)]
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)]
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)]
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)]
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)]
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)]
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)]
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)]
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)]
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)]
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)]
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)]
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)]
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)]
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)]
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)]
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)]
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)]
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)]
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)]
pub enum SddmmAlgorithm {
Default = sys::cusparseSDDMMAlg_t::CUSPARSE_SDDMM_ALG_DEFAULT as _,
}
impl_enum_conversion!(sys::cusparseSDDMMAlg_t, SddmmAlgorithm);
impl Display for PointerMode {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
Self::Host => write!(f, "CUSPARSE_POINTER_MODE_HOST"),
Self::Device => write!(f, "CUSPARSE_POINTER_MODE_DEVICE"),
}
}
}
impl Display for Action {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
Self::Symbolic => write!(f, "CUSPARSE_ACTION_SYMBOLIC"),
Self::Numeric => write!(f, "CUSPARSE_ACTION_NUMERIC"),
}
}
}
impl Display for MatrixType {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
Self::General => write!(f, "CUSPARSE_MATRIX_TYPE_GENERAL"),
Self::Symmetric => write!(f, "CUSPARSE_MATRIX_TYPE_SYMMETRIC"),
Self::Hermitian => write!(f, "CUSPARSE_MATRIX_TYPE_HERMITIAN"),
Self::Triangular => write!(f, "CUSPARSE_MATRIX_TYPE_TRIANGULAR"),
}
}
}
impl Display for FillMode {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
Self::Lower => write!(f, "CUSPARSE_FILL_MODE_LOWER"),
Self::Upper => write!(f, "CUSPARSE_FILL_MODE_UPPER"),
}
}
}
impl Display for DiagonalType {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
Self::NonUnit => write!(f, "CUSPARSE_DIAG_TYPE_NON_UNIT"),
Self::Unit => write!(f, "CUSPARSE_DIAG_TYPE_UNIT"),
}
}
}
impl Display for IndexBase {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
Self::Zero => write!(f, "CUSPARSE_INDEX_BASE_ZERO"),
Self::One => write!(f, "CUSPARSE_INDEX_BASE_ONE"),
}
}
}
impl Display for Operation {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
Self::NonTranspose => write!(f, "CUSPARSE_OPERATION_NON_TRANSPOSE"),
Self::Transpose => write!(f, "CUSPARSE_OPERATION_TRANSPOSE"),
Self::ConjugateTranspose => write!(f, "CUSPARSE_OPERATION_CONJUGATE_TRANSPOSE"),
}
}
}
impl Display for Direction {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
Self::Row => write!(f, "CUSPARSE_DIRECTION_ROW"),
Self::Column => write!(f, "CUSPARSE_DIRECTION_COLUMN"),
}
}
}
impl Display for ColorAlgorithm {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
Self::Algorithm0 => write!(f, "CUSPARSE_COLOR_ALG0"),
Self::Algorithm1 => write!(f, "CUSPARSE_COLOR_ALG1"),
}
}
}
impl Display for CsrToCscAlgorithm {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
Self::Default => write!(f, "CUSPARSE_CSR2CSC_ALG_DEFAULT"),
}
}
}
impl Display for Format {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
Self::Csr => write!(f, "CUSPARSE_FORMAT_CSR"),
Self::Csc => write!(f, "CUSPARSE_FORMAT_CSC"),
Self::Coo => write!(f, "CUSPARSE_FORMAT_COO"),
Self::BlockedEll => write!(f, "CUSPARSE_FORMAT_BLOCKED_ELL"),
Self::Bsr => write!(f, "CUSPARSE_FORMAT_BSR"),
Self::SlicedEllpack => write!(f, "CUSPARSE_FORMAT_SLICED_ELLPACK"),
}
}
}
impl Display for Order {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
Self::Column => write!(f, "CUSPARSE_ORDER_COL"),
Self::Row => write!(f, "CUSPARSE_ORDER_ROW"),
}
}
}
impl Display for IndexType {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
Self::I16 => write!(f, "CUSPARSE_INDEX_16U"),
Self::I32 => write!(f, "CUSPARSE_INDEX_32I"),
Self::I64 => write!(f, "CUSPARSE_INDEX_64I"),
}
}
}
impl Display for SparseMatrixAttribute {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
Self::FillMode => write!(f, "CUSPARSE_SPMAT_FILL_MODE"),
Self::DiagonalType => write!(f, "CUSPARSE_SPMAT_DIAG_TYPE"),
}
}
}
impl Display for SpMvAlgorithm {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
Self::Default => write!(f, "CUSPARSE_SPMV_ALG_DEFAULT"),
Self::Csr1 => write!(f, "CUSPARSE_SPMV_CSR_ALG1"),
Self::Csr2 => write!(f, "CUSPARSE_SPMV_CSR_ALG2"),
Self::Coo1 => write!(f, "CUSPARSE_SPMV_COO_ALG1"),
Self::Coo2 => write!(f, "CUSPARSE_SPMV_COO_ALG2"),
Self::Sell1 => write!(f, "CUSPARSE_SPMV_SELL_ALG1"),
Self::Bsr1 => write!(f, "CUSPARSE_SPMV_BSR_ALG1"),
}
}
}
impl Display for SpSvAlgorithm {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
Self::Default => write!(f, "CUSPARSE_SPSV_ALG_DEFAULT"),
}
}
}
impl Display for SpSvUpdate {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
Self::General => write!(f, "CUSPARSE_SPSV_UPDATE_GENERAL"),
Self::Diagonal => write!(f, "CUSPARSE_SPSV_UPDATE_DIAGONAL"),
}
}
}
impl Display for SpSMAlgorithm {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
Self::Default => write!(f, "CUSPARSE_SPSM_ALG_DEFAULT"),
}
}
}
impl Display for SpSmUpdate {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
Self::General => write!(f, "CUSPARSE_SPSM_UPDATE_GENERAL"),
Self::Diagonal => write!(f, "CUSPARSE_SPSM_UPDATE_DIAGONAL"),
}
}
}
impl Display for SparseToDenseAlgorithm {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
Self::Default => write!(f, "CUSPARSE_SPARSETODENSE_ALG_DEFAULT"),
}
}
}
impl Display for DenseToSparseAlgorithm {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
Self::Default => write!(f, "CUSPARSE_DENSETOSPARSE_ALG_DEFAULT"),
}
}
}
impl Display for SpMmAlgorithm {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
Self::Default => write!(f, "CUSPARSE_SPMM_ALG_DEFAULT"),
Self::Coo1 => write!(f, "CUSPARSE_SPMM_COO_ALG1"),
Self::Coo2 => write!(f, "CUSPARSE_SPMM_COO_ALG2"),
Self::Coo3 => write!(f, "CUSPARSE_SPMM_COO_ALG3"),
Self::Coo4 => write!(f, "CUSPARSE_SPMM_COO_ALG4"),
Self::Csr1 => write!(f, "CUSPARSE_SPMM_CSR_ALG1"),
Self::Csr2 => write!(f, "CUSPARSE_SPMM_CSR_ALG2"),
Self::Csr3 => write!(f, "CUSPARSE_SPMM_CSR_ALG3"),
Self::BlockedEll1 => write!(f, "CUSPARSE_SPMM_BLOCKED_ELL_ALG1"),
Self::Bsr1 => write!(f, "CUSPARSE_SPMM_BSR_ALG1"),
}
}
}
impl Display for SpMmOpAlgorithm {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
Self::Default => write!(f, "CUSPARSE_SPMM_OP_ALG_DEFAULT"),
}
}
}
impl Display for SpGemmAlgorithm {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
Self::Default => write!(f, "CUSPARSE_SPGEMM_DEFAULT"),
Self::CsrDeterministic => {
write!(f, "CUSPARSE_SPGEMM_CSR_ALG_DETERMINITIC")
}
Self::CsrNondeterministic => {
write!(f, "CUSPARSE_SPGEMM_CSR_ALG_NONDETERMINITIC")
}
Self::Algorithm1 => write!(f, "CUSPARSE_SPGEMM_ALG1"),
Self::Algorithm2 => write!(f, "CUSPARSE_SPGEMM_ALG2"),
Self::Algorithm3 => write!(f, "CUSPARSE_SPGEMM_ALG3"),
}
}
}
impl Display for SddmmAlgorithm {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
Self::Default => write!(f, "CUSPARSE_SDDMM_ALG_DEFAULT"),
}
}
}