pub trait TensorElementwise {
Show 24 methods
// Required methods
fn add(&mut self, lhs: &Tensor, rhs: &Tensor) -> Result<Tensor>;
fn mul(&mut self, lhs: &Tensor, rhs: &Tensor) -> Result<Tensor>;
fn neg(&mut self, input: &Tensor) -> Result<Tensor>;
fn conj(&mut self, input: &Tensor) -> Result<Tensor>;
fn div(&mut self, lhs: &Tensor, rhs: &Tensor) -> Result<Tensor>;
fn abs(&mut self, input: &Tensor) -> Result<Tensor>;
fn sign(&mut self, input: &Tensor) -> Result<Tensor>;
fn maximum(&mut self, lhs: &Tensor, rhs: &Tensor) -> Result<Tensor>;
fn minimum(&mut self, lhs: &Tensor, rhs: &Tensor) -> Result<Tensor>;
fn compare(
&mut self,
lhs: &Tensor,
rhs: &Tensor,
dir: &CompareDir,
) -> Result<Tensor>;
fn select(
&mut self,
pred: &Tensor,
on_true: &Tensor,
on_false: &Tensor,
) -> Result<Tensor>;
fn clamp(
&mut self,
input: &Tensor,
lower: &Tensor,
upper: &Tensor,
) -> Result<Tensor>;
// Provided methods
fn add_read(
&mut self,
lhs: TensorRead<'_>,
rhs: TensorRead<'_>,
) -> Result<Tensor> { ... }
fn mul_read(
&mut self,
lhs: TensorRead<'_>,
rhs: TensorRead<'_>,
) -> Result<Tensor> { ... }
fn neg_read(&mut self, input: TensorRead<'_>) -> Result<Tensor> { ... }
fn conj_read(&mut self, input: TensorRead<'_>) -> Result<Tensor> { ... }
fn div_read(
&mut self,
lhs: TensorRead<'_>,
rhs: TensorRead<'_>,
) -> Result<Tensor> { ... }
fn abs_read(&mut self, input: TensorRead<'_>) -> Result<Tensor> { ... }
fn sign_read(&mut self, input: TensorRead<'_>) -> Result<Tensor> { ... }
fn maximum_read(
&mut self,
lhs: TensorRead<'_>,
rhs: TensorRead<'_>,
) -> Result<Tensor> { ... }
fn minimum_read(
&mut self,
lhs: TensorRead<'_>,
rhs: TensorRead<'_>,
) -> Result<Tensor> { ... }
fn compare_read(
&mut self,
lhs: TensorRead<'_>,
rhs: TensorRead<'_>,
dir: &CompareDir,
) -> Result<Tensor> { ... }
fn select_read(
&mut self,
pred: TensorRead<'_>,
on_true: TensorRead<'_>,
on_false: TensorRead<'_>,
) -> Result<Tensor> { ... }
fn clamp_read(
&mut self,
input: TensorRead<'_>,
lower: TensorRead<'_>,
upper: TensorRead<'_>,
) -> Result<Tensor> { ... }
}Expand description
Elementwise tensor operations.
§Examples
use tenferro_tensor::TensorElementwise;
fn accepts_elementwise<B: TensorElementwise>(_backend: &mut B) {}Required Methods§
fn add(&mut self, lhs: &Tensor, rhs: &Tensor) -> Result<Tensor>
fn mul(&mut self, lhs: &Tensor, rhs: &Tensor) -> Result<Tensor>
fn neg(&mut self, input: &Tensor) -> Result<Tensor>
fn conj(&mut self, input: &Tensor) -> Result<Tensor>
fn div(&mut self, lhs: &Tensor, rhs: &Tensor) -> Result<Tensor>
fn abs(&mut self, input: &Tensor) -> Result<Tensor>
fn sign(&mut self, input: &Tensor) -> Result<Tensor>
fn maximum(&mut self, lhs: &Tensor, rhs: &Tensor) -> Result<Tensor>
fn minimum(&mut self, lhs: &Tensor, rhs: &Tensor) -> Result<Tensor>
fn compare( &mut self, lhs: &Tensor, rhs: &Tensor, dir: &CompareDir, ) -> Result<Tensor>
fn select( &mut self, pred: &Tensor, on_true: &Tensor, on_false: &Tensor, ) -> Result<Tensor>
fn clamp( &mut self, input: &Tensor, lower: &Tensor, upper: &Tensor, ) -> Result<Tensor>
Provided Methods§
Sourcefn add_read(
&mut self,
lhs: TensorRead<'_>,
rhs: TensorRead<'_>,
) -> Result<Tensor>
fn add_read( &mut self, lhs: TensorRead<'_>, rhs: TensorRead<'_>, ) -> Result<Tensor>
Elementwise addition accepting either owned tensors or borrowed views.
Backends that implement this method must not silently move data across devices. A backend that cannot consume views should return an explicit backend error rather than materializing or transferring implicitly.
§Examples
use tenferro_tensor::{Tensor, TensorElementwise, TensorRead};
fn add_owned<B: TensorElementwise>(
backend: &mut B,
lhs: &Tensor,
rhs: &Tensor,
) -> tenferro_tensor::Result<Tensor> {
backend.add_read(TensorRead::from_tensor(lhs), TensorRead::from_tensor(rhs))
}