#![forbid(unsafe_code)]
#![warn(missing_docs)]
use oxmera_core::Result;
use oxmera_tensor::Tensor;
pub trait UnaryOps {
fn neg(&self, a: &Tensor) -> Result<Tensor>;
fn exp(&self, a: &Tensor) -> Result<Tensor>;
fn ln(&self, a: &Tensor) -> Result<Tensor>;
fn abs(&self, a: &Tensor) -> Result<Tensor>;
}
pub trait BinaryOps {
fn add(&self, lhs: &Tensor, rhs: &Tensor) -> Result<Tensor>;
fn sub(&self, lhs: &Tensor, rhs: &Tensor) -> Result<Tensor>;
fn mul(&self, lhs: &Tensor, rhs: &Tensor) -> Result<Tensor>;
fn div(&self, lhs: &Tensor, rhs: &Tensor) -> Result<Tensor>;
}
pub trait MatmulOps {
fn matmul(&self, lhs: &Tensor, rhs: &Tensor) -> Result<Tensor>;
}
pub trait ReduceOps {
fn sum(&self, a: &Tensor, axes: &[usize]) -> Result<Tensor>;
fn max(&self, a: &Tensor, axes: &[usize]) -> Result<Tensor>;
}