#![allow(deprecated)]
#[allow(unused_imports)]
use crate::error::Status;
use std::fmt::{self, Display, Formatter};
use num_enum::{IntoPrimitive, TryFromPrimitive};
use singe_cublas_sys as sys;
use singe_core::impl_enum_conversion;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, TryFromPrimitive, IntoPrimitive)]
#[repr(u32)]
pub enum PointerMode {
Host = sys::cublasPointerMode_t::CUBLAS_POINTER_MODE_HOST as _,
Device = sys::cublasPointerMode_t::CUBLAS_POINTER_MODE_DEVICE as _,
}
impl_enum_conversion!(sys::cublasPointerMode_t, PointerMode);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, TryFromPrimitive, IntoPrimitive)]
#[repr(u32)]
pub enum AtomicsMode {
NotAllowed = sys::cublasAtomicsMode_t::CUBLAS_ATOMICS_NOT_ALLOWED as _,
Allowed = sys::cublasAtomicsMode_t::CUBLAS_ATOMICS_ALLOWED as _,
}
impl_enum_conversion!(sys::cublasAtomicsMode_t, AtomicsMode);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, TryFromPrimitive, IntoPrimitive)]
#[repr(u32)]
pub enum MathMode {
Default = sys::cublasMath_t::CUBLAS_DEFAULT_MATH as _,
#[deprecated]
TensorOp = 1,
Pedantic = sys::cublasMath_t::CUBLAS_PEDANTIC_MATH as _,
Tf32TensorOp = sys::cublasMath_t::CUBLAS_TF32_TENSOR_OP_MATH as _,
Fp32EmulatedBf16x9 = sys::cublasMath_t::CUBLAS_FP32_EMULATED_BF16X9_MATH as _,
Fp64EmulatedFixedPoint = sys::cublasMath_t::CUBLAS_FP64_EMULATED_FIXEDPOINT_MATH as _,
DisallowReducedPrecisionReduction =
sys::cublasMath_t::CUBLAS_MATH_DISALLOW_REDUCED_PRECISION_REDUCTION as _,
}
impl_enum_conversion!(sys::cublasMath_t, MathMode);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, TryFromPrimitive, IntoPrimitive)]
#[repr(u32)]
pub enum FillMode {
Lower = sys::cublasFillMode_t::CUBLAS_FILL_MODE_LOWER as _,
Upper = sys::cublasFillMode_t::CUBLAS_FILL_MODE_UPPER as _,
Full = sys::cublasFillMode_t::CUBLAS_FILL_MODE_FULL as _,
}
impl_enum_conversion!(sys::cublasFillMode_t, FillMode);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, TryFromPrimitive, IntoPrimitive)]
#[repr(u32)]
pub enum DiagonalType {
NonUnit = sys::cublasDiagType_t::CUBLAS_DIAG_NON_UNIT as _,
Unit = sys::cublasDiagType_t::CUBLAS_DIAG_UNIT as _,
}
impl_enum_conversion!(sys::cublasDiagType_t, DiagonalType);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, TryFromPrimitive, IntoPrimitive)]
#[repr(u32)]
pub enum SideMode {
Left = sys::cublasSideMode_t::CUBLAS_SIDE_LEFT as _,
Right = sys::cublasSideMode_t::CUBLAS_SIDE_RIGHT as _,
}
impl_enum_conversion!(sys::cublasSideMode_t, SideMode);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, TryFromPrimitive, IntoPrimitive)]
#[repr(u32)]
pub enum Operation {
NonTranspose = sys::cublasOperation_t::CUBLAS_OP_N as _,
Transpose = sys::cublasOperation_t::CUBLAS_OP_T as _,
ConjugateTranspose = sys::cublasOperation_t::CUBLAS_OP_C as _,
Conjugate = sys::cublasOperation_t::CUBLAS_OP_CONJG as _,
}
impl Operation {
pub const HERMITIAN: Self = Self::ConjugateTranspose;
}
impl_enum_conversion!(sys::cublasOperation_t, Operation);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, TryFromPrimitive, IntoPrimitive)]
#[repr(i32)]
pub enum GemmAlgorithm {
Default = sys::cublasGemmAlgo_t::CUBLAS_GEMM_DFALT as _,
Algo0 = sys::cublasGemmAlgo_t::CUBLAS_GEMM_ALGO0 as _,
Algo1 = sys::cublasGemmAlgo_t::CUBLAS_GEMM_ALGO1 as _,
Algo2 = sys::cublasGemmAlgo_t::CUBLAS_GEMM_ALGO2 as _,
Algo3 = sys::cublasGemmAlgo_t::CUBLAS_GEMM_ALGO3 as _,
Algo4 = sys::cublasGemmAlgo_t::CUBLAS_GEMM_ALGO4 as _,
Algo5 = sys::cublasGemmAlgo_t::CUBLAS_GEMM_ALGO5 as _,
Algo6 = sys::cublasGemmAlgo_t::CUBLAS_GEMM_ALGO6 as _,
Algo7 = sys::cublasGemmAlgo_t::CUBLAS_GEMM_ALGO7 as _,
Algo8 = sys::cublasGemmAlgo_t::CUBLAS_GEMM_ALGO8 as _,
Algo9 = sys::cublasGemmAlgo_t::CUBLAS_GEMM_ALGO9 as _,
Algo10 = sys::cublasGemmAlgo_t::CUBLAS_GEMM_ALGO10 as _,
Algo11 = sys::cublasGemmAlgo_t::CUBLAS_GEMM_ALGO11 as _,
Algo12 = sys::cublasGemmAlgo_t::CUBLAS_GEMM_ALGO12 as _,
Algo13 = sys::cublasGemmAlgo_t::CUBLAS_GEMM_ALGO13 as _,
Algo14 = sys::cublasGemmAlgo_t::CUBLAS_GEMM_ALGO14 as _,
Algo15 = sys::cublasGemmAlgo_t::CUBLAS_GEMM_ALGO15 as _,
Algo16 = sys::cublasGemmAlgo_t::CUBLAS_GEMM_ALGO16 as _,
Algo17 = sys::cublasGemmAlgo_t::CUBLAS_GEMM_ALGO17 as _,
Algo18 = sys::cublasGemmAlgo_t::CUBLAS_GEMM_ALGO18 as _,
Algo19 = sys::cublasGemmAlgo_t::CUBLAS_GEMM_ALGO19 as _,
Algo20 = sys::cublasGemmAlgo_t::CUBLAS_GEMM_ALGO20 as _,
Algo21 = sys::cublasGemmAlgo_t::CUBLAS_GEMM_ALGO21 as _,
Algo22 = sys::cublasGemmAlgo_t::CUBLAS_GEMM_ALGO22 as _,
Algo23 = sys::cublasGemmAlgo_t::CUBLAS_GEMM_ALGO23 as _,
#[deprecated]
Algo0TensorOp = sys::cublasGemmAlgo_t::CUBLAS_GEMM_ALGO0_TENSOR_OP as _,
#[deprecated]
Algo1TensorOp = sys::cublasGemmAlgo_t::CUBLAS_GEMM_ALGO1_TENSOR_OP as _,
#[deprecated]
Algo2TensorOp = sys::cublasGemmAlgo_t::CUBLAS_GEMM_ALGO2_TENSOR_OP as _,
#[deprecated]
Algo3TensorOp = sys::cublasGemmAlgo_t::CUBLAS_GEMM_ALGO3_TENSOR_OP as _,
#[deprecated]
Algo4TensorOp = sys::cublasGemmAlgo_t::CUBLAS_GEMM_ALGO4_TENSOR_OP as _,
#[deprecated]
Algo5TensorOp = sys::cublasGemmAlgo_t::CUBLAS_GEMM_ALGO5_TENSOR_OP as _,
#[deprecated]
Algo6TensorOp = sys::cublasGemmAlgo_t::CUBLAS_GEMM_ALGO6_TENSOR_OP as _,
#[deprecated]
Algo7TensorOp = sys::cublasGemmAlgo_t::CUBLAS_GEMM_ALGO7_TENSOR_OP as _,
#[deprecated]
Algo8TensorOp = sys::cublasGemmAlgo_t::CUBLAS_GEMM_ALGO8_TENSOR_OP as _,
#[deprecated]
Algo9TensorOp = sys::cublasGemmAlgo_t::CUBLAS_GEMM_ALGO9_TENSOR_OP as _,
#[deprecated]
Algo10TensorOp = sys::cublasGemmAlgo_t::CUBLAS_GEMM_ALGO10_TENSOR_OP as _,
#[deprecated]
Algo11TensorOp = sys::cublasGemmAlgo_t::CUBLAS_GEMM_ALGO11_TENSOR_OP as _,
#[deprecated]
Algo12TensorOp = sys::cublasGemmAlgo_t::CUBLAS_GEMM_ALGO12_TENSOR_OP as _,
#[deprecated]
Algo13TensorOp = sys::cublasGemmAlgo_t::CUBLAS_GEMM_ALGO13_TENSOR_OP as _,
#[deprecated]
Algo14TensorOp = sys::cublasGemmAlgo_t::CUBLAS_GEMM_ALGO14_TENSOR_OP as _,
#[deprecated]
Algo15TensorOp = sys::cublasGemmAlgo_t::CUBLAS_GEMM_ALGO15_TENSOR_OP as _,
Autotune = sys::cublasGemmAlgo_t::CUBLAS_GEMM_AUTOTUNE as _,
}
impl_enum_conversion!(i32, sys::cublasGemmAlgo_t, GemmAlgorithm);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, TryFromPrimitive, IntoPrimitive)]
#[repr(u32)]
pub enum ComputeType {
F16 = sys::cublasComputeType_t::CUBLAS_COMPUTE_16F as _,
F16Pedantic = sys::cublasComputeType_t::CUBLAS_COMPUTE_16F_PEDANTIC as _,
F32 = sys::cublasComputeType_t::CUBLAS_COMPUTE_32F as _,
F32Pedantic = sys::cublasComputeType_t::CUBLAS_COMPUTE_32F_PEDANTIC as _,
F32FastF16 = sys::cublasComputeType_t::CUBLAS_COMPUTE_32F_FAST_16F as _,
F32FastBf16 = sys::cublasComputeType_t::CUBLAS_COMPUTE_32F_FAST_16BF as _,
F32FastTf32 = sys::cublasComputeType_t::CUBLAS_COMPUTE_32F_FAST_TF32 as _,
F32EmulatedBf16x9 = sys::cublasComputeType_t::CUBLAS_COMPUTE_32F_EMULATED_16BFX9 as _,
F64 = sys::cublasComputeType_t::CUBLAS_COMPUTE_64F as _,
F64Pedantic = sys::cublasComputeType_t::CUBLAS_COMPUTE_64F_PEDANTIC as _,
F64EmulatedFixedPoint = sys::cublasComputeType_t::CUBLAS_COMPUTE_64F_EMULATED_FIXEDPOINT as _,
I32 = sys::cublasComputeType_t::CUBLAS_COMPUTE_32I as _,
I32Pedantic = sys::cublasComputeType_t::CUBLAS_COMPUTE_32I_PEDANTIC as _,
}
impl_enum_conversion!(sys::cublasComputeType_t, ComputeType);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, TryFromPrimitive, IntoPrimitive)]
#[repr(u32)]
pub enum EmulationStrategy {
Default = sys::cublasEmulationStrategy_t::CUBLAS_EMULATION_STRATEGY_DEFAULT as _,
Performant = sys::cublasEmulationStrategy_t::CUBLAS_EMULATION_STRATEGY_PERFORMANT as _,
Eager = sys::cublasEmulationStrategy_t::CUBLAS_EMULATION_STRATEGY_EAGER as _,
}
impl_enum_conversion!(sys::cublasEmulationStrategy_t, EmulationStrategy);
impl Display for PointerMode {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
Self::Host => write!(f, "CUBLAS_POINTER_MODE_HOST"),
Self::Device => write!(f, "CUBLAS_POINTER_MODE_DEVICE"),
}
}
}
impl Display for AtomicsMode {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
Self::NotAllowed => write!(f, "CUBLAS_ATOMICS_NOT_ALLOWED"),
Self::Allowed => write!(f, "CUBLAS_ATOMICS_ALLOWED"),
}
}
}
impl Display for MathMode {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
Self::Default => write!(f, "CUBLAS_DEFAULT_MATH"),
Self::TensorOp => write!(f, "CUBLAS_TENSOR_OP_MATH"),
Self::Pedantic => write!(f, "CUBLAS_PEDANTIC_MATH"),
Self::Tf32TensorOp => write!(f, "CUBLAS_TF32_TENSOR_OP_MATH"),
Self::Fp32EmulatedBf16x9 => write!(f, "CUBLAS_FP32_EMULATED_BF16X9_MATH"),
Self::Fp64EmulatedFixedPoint => write!(f, "CUBLAS_FP64_EMULATED_FIXEDPOINT_MATH"),
Self::DisallowReducedPrecisionReduction => {
write!(f, "CUBLAS_MATH_DISALLOW_REDUCED_PRECISION_REDUCTION")
}
}
}
}
impl Display for FillMode {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
Self::Lower => write!(f, "CUBLAS_FILL_MODE_LOWER"),
Self::Upper => write!(f, "CUBLAS_FILL_MODE_UPPER"),
Self::Full => write!(f, "CUBLAS_FILL_MODE_FULL"),
}
}
}
impl Display for DiagonalType {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
Self::NonUnit => write!(f, "CUBLAS_DIAG_NON_UNIT"),
Self::Unit => write!(f, "CUBLAS_DIAG_UNIT"),
}
}
}
impl Display for SideMode {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
Self::Left => write!(f, "CUBLAS_SIDE_LEFT"),
Self::Right => write!(f, "CUBLAS_SIDE_RIGHT"),
}
}
}
impl Display for Operation {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
Self::NonTranspose => write!(f, "CUBLAS_OP_N"),
Self::Transpose => write!(f, "CUBLAS_OP_T"),
Self::ConjugateTranspose => write!(f, "CUBLAS_OP_C"),
Self::Conjugate => write!(f, "CUBLAS_OP_CONJG"),
}
}
}
impl Display for GemmAlgorithm {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
write!(f, "{:?}", self)
}
}
impl Display for ComputeType {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
Self::F16 => write!(f, "CUBLAS_COMPUTE_16F"),
Self::F16Pedantic => write!(f, "CUBLAS_COMPUTE_16F_PEDANTIC"),
Self::F32 => write!(f, "CUBLAS_COMPUTE_32F"),
Self::F32Pedantic => write!(f, "CUBLAS_COMPUTE_32F_PEDANTIC"),
Self::F32FastF16 => write!(f, "CUBLAS_COMPUTE_32F_FAST_16F"),
Self::F32FastBf16 => write!(f, "CUBLAS_COMPUTE_32F_FAST_16BF"),
Self::F32FastTf32 => write!(f, "CUBLAS_COMPUTE_32F_FAST_TF32"),
Self::F32EmulatedBf16x9 => write!(f, "CUBLAS_COMPUTE_32F_EMULATED_16BFX9"),
Self::F64 => write!(f, "CUBLAS_COMPUTE_64F"),
Self::F64Pedantic => write!(f, "CUBLAS_COMPUTE_64F_PEDANTIC"),
Self::F64EmulatedFixedPoint => {
write!(f, "CUBLAS_COMPUTE_64F_EMULATED_FIXEDPOINT")
}
Self::I32 => write!(f, "CUBLAS_COMPUTE_32I"),
Self::I32Pedantic => write!(f, "CUBLAS_COMPUTE_32I_PEDANTIC"),
}
}
}
impl Display for EmulationStrategy {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
Self::Default => write!(f, "CUBLAS_EMULATION_STRATEGY_DEFAULT"),
Self::Performant => write!(f, "CUBLAS_EMULATION_STRATEGY_PERFORMANT"),
Self::Eager => write!(f, "CUBLAS_EMULATION_STRATEGY_EAGER"),
}
}
}