use crate::rocblas::ffi;
pub use ffi::rocblas_bfloat16;
pub use ffi::rocblas_double_complex;
pub use ffi::rocblas_float_complex;
pub use ffi::rocblas_half;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Operation {
None,
Transpose,
ConjugateTranspose,
}
impl From<Operation> for ffi::rocblas_operation {
fn from(op: Operation) -> Self {
match op {
Operation::None => ffi::rocblas_operation__rocblas_operation_none,
Operation::Transpose => ffi::rocblas_operation__rocblas_operation_transpose,
Operation::ConjugateTranspose => {
ffi::rocblas_operation__rocblas_operation_conjugate_transpose
}
}
}
}
impl From<ffi::rocblas_operation> for Operation {
fn from(op: ffi::rocblas_operation) -> Self {
match op {
ffi::rocblas_operation__rocblas_operation_none => Operation::None,
ffi::rocblas_operation__rocblas_operation_transpose => Operation::Transpose,
ffi::rocblas_operation__rocblas_operation_conjugate_transpose => {
Operation::ConjugateTranspose
}
_ => Operation::None, }
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Fill {
Upper,
Lower,
Full,
}
impl From<Fill> for ffi::rocblas_fill {
fn from(fill: Fill) -> Self {
match fill {
Fill::Upper => ffi::rocblas_fill__rocblas_fill_upper,
Fill::Lower => ffi::rocblas_fill__rocblas_fill_lower,
Fill::Full => ffi::rocblas_fill__rocblas_fill_full,
}
}
}
impl From<ffi::rocblas_fill> for Fill {
fn from(fill: ffi::rocblas_fill) -> Self {
match fill {
ffi::rocblas_fill__rocblas_fill_upper => Fill::Upper,
ffi::rocblas_fill__rocblas_fill_lower => Fill::Lower,
ffi::rocblas_fill__rocblas_fill_full => Fill::Full,
_ => Fill::Full, }
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Diagonal {
NonUnit,
Unit,
}
impl From<Diagonal> for ffi::rocblas_diagonal {
fn from(diag: Diagonal) -> Self {
match diag {
Diagonal::NonUnit => ffi::rocblas_diagonal__rocblas_diagonal_non_unit,
Diagonal::Unit => ffi::rocblas_diagonal__rocblas_diagonal_unit,
}
}
}
impl From<ffi::rocblas_diagonal> for Diagonal {
fn from(diag: ffi::rocblas_diagonal) -> Self {
match diag {
ffi::rocblas_diagonal__rocblas_diagonal_non_unit => Diagonal::NonUnit,
ffi::rocblas_diagonal__rocblas_diagonal_unit => Diagonal::Unit,
_ => Diagonal::NonUnit, }
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Side {
Left,
Right,
Both,
}
impl From<Side> for ffi::rocblas_side {
fn from(side: Side) -> Self {
match side {
Side::Left => ffi::rocblas_side__rocblas_side_left,
Side::Right => ffi::rocblas_side__rocblas_side_right,
Side::Both => ffi::rocblas_side__rocblas_side_both,
}
}
}
impl From<ffi::rocblas_side> for Side {
fn from(side: ffi::rocblas_side) -> Self {
match side {
ffi::rocblas_side__rocblas_side_left => Side::Left,
ffi::rocblas_side__rocblas_side_right => Side::Right,
ffi::rocblas_side__rocblas_side_both => Side::Both,
_ => Side::Left, }
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum DataType {
F16Real,
F32Real,
F64Real,
F16Complex,
F32Complex,
F64Complex,
I8Real,
U8Real,
I32Real,
U32Real,
I8Complex,
U8Complex,
I32Complex,
U32Complex,
BF16Real,
BF16Complex,
}
impl From<DataType> for ffi::rocblas_datatype {
fn from(dtype: DataType) -> Self {
match dtype {
DataType::F16Real => ffi::rocblas_datatype__rocblas_datatype_f16_r,
DataType::F32Real => ffi::rocblas_datatype__rocblas_datatype_f32_r,
DataType::F64Real => ffi::rocblas_datatype__rocblas_datatype_f64_r,
DataType::F16Complex => ffi::rocblas_datatype__rocblas_datatype_f16_c,
DataType::F32Complex => ffi::rocblas_datatype__rocblas_datatype_f32_c,
DataType::F64Complex => ffi::rocblas_datatype__rocblas_datatype_f64_c,
DataType::I8Real => ffi::rocblas_datatype__rocblas_datatype_i8_r,
DataType::U8Real => ffi::rocblas_datatype__rocblas_datatype_u8_r,
DataType::I32Real => ffi::rocblas_datatype__rocblas_datatype_i32_r,
DataType::U32Real => ffi::rocblas_datatype__rocblas_datatype_u32_r,
DataType::I8Complex => ffi::rocblas_datatype__rocblas_datatype_i8_c,
DataType::U8Complex => ffi::rocblas_datatype__rocblas_datatype_u8_c,
DataType::I32Complex => ffi::rocblas_datatype__rocblas_datatype_i32_c,
DataType::U32Complex => ffi::rocblas_datatype__rocblas_datatype_u32_c,
DataType::BF16Real => ffi::rocblas_datatype__rocblas_datatype_bf16_r,
DataType::BF16Complex => ffi::rocblas_datatype__rocblas_datatype_bf16_c,
}
}
}
impl From<ffi::rocblas_datatype> for DataType {
fn from(dtype: ffi::rocblas_datatype) -> Self {
match dtype {
ffi::rocblas_datatype__rocblas_datatype_f16_r => DataType::F16Real,
ffi::rocblas_datatype__rocblas_datatype_f32_r => DataType::F32Real,
ffi::rocblas_datatype__rocblas_datatype_f64_r => DataType::F64Real,
ffi::rocblas_datatype__rocblas_datatype_f16_c => DataType::F16Complex,
ffi::rocblas_datatype__rocblas_datatype_f32_c => DataType::F32Complex,
ffi::rocblas_datatype__rocblas_datatype_f64_c => DataType::F64Complex,
ffi::rocblas_datatype__rocblas_datatype_i8_r => DataType::I8Real,
ffi::rocblas_datatype__rocblas_datatype_u8_r => DataType::U8Real,
ffi::rocblas_datatype__rocblas_datatype_i32_r => DataType::I32Real,
ffi::rocblas_datatype__rocblas_datatype_u32_r => DataType::U32Real,
ffi::rocblas_datatype__rocblas_datatype_i8_c => DataType::I8Complex,
ffi::rocblas_datatype__rocblas_datatype_u8_c => DataType::U8Complex,
ffi::rocblas_datatype__rocblas_datatype_i32_c => DataType::I32Complex,
ffi::rocblas_datatype__rocblas_datatype_u32_c => DataType::U32Complex,
ffi::rocblas_datatype__rocblas_datatype_bf16_r => DataType::BF16Real,
ffi::rocblas_datatype__rocblas_datatype_bf16_c => DataType::BF16Complex,
_ => DataType::F32Real, }
}
}
pub use ffi::rocblas_datatype;
pub use ffi::rocblas_diagonal;
pub use ffi::rocblas_fill;
pub use ffi::rocblas_operation;
pub use ffi::rocblas_side;