Skip to main content

TensorEinsumExt

Trait TensorEinsumExt 

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

Backend-explicit einsum methods for dtype-erased concrete tensors.

Implementations are provided for slices and fixed-size arrays of Tensor references, so both inputs.as_slice().einsum(...) and [&lhs, &rhs].einsum(...) work.

§Examples

use tenferro_cpu::CpuBackend;
use tenferro_einsum::TensorEinsumExt;
use tenferro_tensor::Tensor;

let lhs = Tensor::from_vec_col_major(vec![2, 3], vec![1.0_f64; 6]).unwrap();
let rhs = Tensor::from_vec_col_major(vec![3, 4], vec![1.0_f64; 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<Tensor>

Execute an einsum from string notation.

Source

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

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 TensorEinsumExt for [&Tensor]

Source§

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

Source§

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

Source§

impl<const N: usize> TensorEinsumExt for [&Tensor; N]

Source§

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

Source§

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

Implementors§