Skip to main content

TypedTensorEinsumExt

Trait TypedTensorEinsumExt 

Source
pub trait TypedTensorEinsumExt<T: TensorScalar> {
    // Required methods
    fn einsum(
        &self,
        subscripts: &str,
        session: &mut dyn BackendSession,
    ) -> Result<TypedTensor<T>>;
    fn einsum_notation(
        &self,
        notation: &EinsumNotation,
        session: &mut dyn BackendSession,
    ) -> Result<TypedTensor<T>>;
    fn einsum_subscripts(
        &self,
        subscripts: &EinsumSubscripts,
        session: &mut dyn BackendSession,
    ) -> 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::{BackendSessionHost, 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 = backend.with_backend_session(|session| {
    [&lhs, &rhs].einsum("ij,jk->ik", session)
})?;
assert_eq!(out.shape(), &[2, 4]);

Required Methods§

Source

fn einsum( &self, subscripts: &str, session: &mut dyn BackendSession, ) -> Result<TypedTensor<T>>

Execute an einsum from string notation.

§Errors

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

Source

fn einsum_notation( &self, notation: &EinsumNotation, session: &mut dyn BackendSession, ) -> Result<TypedTensor<T>>

Execute an einsum from rank-unresolved notation.

§Examples
use tenferro_einsum::{EinsumAxis, EinsumNotation};
let notation = EinsumNotation::new(&[&[EinsumAxis::Ellipsis]], &[]);
assert_eq!(notation.input_count(), 1);
§Errors

Returns a typed validation or backend error when notation, shapes, or execution are invalid.

Source

fn einsum_subscripts( &self, subscripts: &EinsumSubscripts, session: &mut dyn BackendSession, ) -> Result<TypedTensor<T>>

Execute an einsum from parsed integer-label subscripts.

§Errors

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

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementations on Foreign Types§

Source§

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

Source§

fn einsum( &self, subscripts: &str, session: &mut dyn BackendSession, ) -> Result<TypedTensor<T>>

Source§

fn einsum_notation( &self, notation: &EinsumNotation, session: &mut dyn BackendSession, ) -> Result<TypedTensor<T>>

Source§

fn einsum_subscripts( &self, subscripts: &EinsumSubscripts, session: &mut dyn BackendSession, ) -> Result<TypedTensor<T>>

Source§

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

Source§

fn einsum( &self, subscripts: &str, session: &mut dyn BackendSession, ) -> Result<TypedTensor<T>>

Source§

fn einsum_notation( &self, notation: &EinsumNotation, session: &mut dyn BackendSession, ) -> Result<TypedTensor<T>>

Source§

fn einsum_subscripts( &self, subscripts: &EinsumSubscripts, session: &mut dyn BackendSession, ) -> Result<TypedTensor<T>>

Implementors§