Skip to main content

TypedTensorEinsumExt

Trait TypedTensorEinsumExt 

Source
pub trait TypedTensorEinsumExt<T: TensorScalar> {
    // Required methods
    fn einsum<B: TensorBackend>(
        &self,
        subscripts: &str,
        backend: &mut B,
    ) -> Result<TypedTensor<T>>;
    fn einsum_subscripts<B: TensorBackend>(
        &self,
        subscripts: &EinsumSubscripts,
        backend: &mut B,
    ) -> Result<TypedTensor<T>>;
}
Expand description

Backend-explicit einsum methods for typed concrete tensors.

The result keeps the same scalar type as the inputs. Mixed dtypes should use TensorEinsumExt on dtype-erased Tensor values instead.

§Examples

use tenferro_cpu::CpuBackend;
use tenferro_einsum::TypedTensorEinsumExt;
use tenferro_tensor::TypedTensor;

let lhs = TypedTensor::<f64>::from_vec_col_major(vec![2, 3], vec![1.0; 6]).unwrap();
let rhs = TypedTensor::<f64>::from_vec_col_major(vec![3, 4], vec![1.0; 12]).unwrap();
let mut backend = CpuBackend::new();

let out = [&lhs, &rhs].einsum("ij,jk->ik", &mut backend)?;
assert_eq!(out.shape(), &[2, 4]);

Required Methods§

Source

fn einsum<B: TensorBackend>( &self, subscripts: &str, backend: &mut B, ) -> Result<TypedTensor<T>>

Execute an einsum from string notation.

Source

fn einsum_subscripts<B: TensorBackend>( &self, subscripts: &EinsumSubscripts, backend: &mut B, ) -> Result<TypedTensor<T>>

Execute an einsum from parsed integer-label subscripts.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl<'a, T: TensorScalar> TypedTensorEinsumExt<T> for [TypedTensorView<'a, T>]

Source§

fn einsum<B: TensorBackend>( &self, subscripts: &str, backend: &mut B, ) -> Result<TypedTensor<T>>

Source§

fn einsum_subscripts<B: TensorBackend>( &self, subscripts: &EinsumSubscripts, backend: &mut B, ) -> Result<TypedTensor<T>>

Source§

impl<'a, T: TensorScalar, const N: usize> TypedTensorEinsumExt<T> for [TypedTensorView<'a, T>; N]

Source§

fn einsum<B: TensorBackend>( &self, subscripts: &str, backend: &mut B, ) -> Result<TypedTensor<T>>

Source§

fn einsum_subscripts<B: TensorBackend>( &self, subscripts: &EinsumSubscripts, backend: &mut B, ) -> Result<TypedTensor<T>>

Source§

impl<T: TensorScalar> TypedTensorEinsumExt<T> for [&TypedTensor<T>]

Source§

fn einsum<B: TensorBackend>( &self, subscripts: &str, backend: &mut B, ) -> Result<TypedTensor<T>>

Source§

fn einsum_subscripts<B: TensorBackend>( &self, subscripts: &EinsumSubscripts, backend: &mut B, ) -> Result<TypedTensor<T>>

Source§

impl<T: TensorScalar, const N: usize> TypedTensorEinsumExt<T> for [&TypedTensor<T>; N]

Source§

fn einsum<B: TensorBackend>( &self, subscripts: &str, backend: &mut B, ) -> Result<TypedTensor<T>>

Source§

fn einsum_subscripts<B: TensorBackend>( &self, subscripts: &EinsumSubscripts, backend: &mut B, ) -> Result<TypedTensor<T>>

Implementors§