use crate::transpose::Transpose;
use coaster::plugin::Error;
use coaster::tensor::SharedTensor;
pub trait IOperationAsum<F> {
fn compute(&self, x: &SharedTensor<F>, result: &mut SharedTensor<F>) -> Result<(), Error>;
}
pub trait IOperationAxpy<F> {
fn compute(
&self,
a: &SharedTensor<F>,
x: &SharedTensor<F>,
y: &mut SharedTensor<F>,
) -> Result<(), Error>;
}
pub trait IOperationCopy<F> {
fn compute(&self, x: &SharedTensor<F>, y: &mut SharedTensor<F>) -> Result<(), Error>;
}
pub trait IOperationDot<F> {
fn compute(
&self,
x: &SharedTensor<F>,
y: &SharedTensor<F>,
result: &mut SharedTensor<F>,
) -> Result<(), Error>;
}
pub trait IOperationNrm2<F> {
fn compute(&self, x: &SharedTensor<F>, result: &mut SharedTensor<F>) -> Result<(), Error>;
}
pub trait IOperationScale<F> {
fn compute(&self, a: &SharedTensor<F>, x: &mut SharedTensor<F>) -> Result<(), Error>;
}
pub trait IOperationSwap<F> {
fn compute(&self, x: &mut SharedTensor<F>, y: &mut SharedTensor<F>) -> Result<(), Error>;
}
pub trait IOperationGemm<F> {
#[allow(clippy::too_many_arguments)]
#[allow(clippy::many_single_char_names)]
fn compute(
&self,
alpha: &SharedTensor<F>,
at: Transpose,
a_dims: &[usize],
a: &SharedTensor<F>,
bt: Transpose,
b_dims: &[usize],
b: &SharedTensor<F>,
beta: &SharedTensor<F>,
c_dims: &[usize],
c: &mut SharedTensor<F>,
) -> Result<(), ::coaster::error::Error>;
}