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.

§Errors

Returns Error::InvalidSubscripts for malformed notation, Error::Validation with shape, rank, or dtype payloads for an invalid contraction, or Error::Tensor for a typed backend failure.

Source

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

Execute an einsum from parsed integer-label subscripts.

§Errors

Returns Error::Validation with shape, rank, or dtype payloads for an invalid contraction, or Error::Tensor for a typed backend failure.

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§