Skip to main content

EinsumOptimize

Enum EinsumOptimize 

Source
pub enum EinsumOptimize {
    Auto(ContractionOptimizerOptions),
    False,
    Nested(NestedEinsum),
    Path(Vec<(usize, usize)>),
    Tree(ContractionTree),
}
Expand description

Controls how the contraction path is determined for N-ary einsum.

The traced API resolves this enum into a shape-independent plan specification and stores that specification in the einsum extension payload. Concrete traced inputs can resolve a ContractionTree while the op is built; symbolic traced inputs carry the plan specification until the extension runtime sees concrete execution shapes.

Planner options and explicit paths are part of the extension payload identity. Two otherwise identical traced einsum ops with different optimizer options, explicit paths, or fixed plan identities are not treated as the same extension op, and their compile/runtime plan cache entries are kept separate.

§Examples

use tenferro_einsum::{EinsumOptimize, GraphCompilerEinsumExt};
use tenferro_runtime::{GraphCompiler, TracedTensor};

let lhs = TracedTensor::from_vec_col_major(vec![2, 3], vec![1.0_f64; 6]).unwrap();
let rhs = TracedTensor::from_vec_col_major(vec![3, 2], vec![1.0_f64; 6]).unwrap();

let mut compiler = GraphCompiler::new();
let out = compiler.einsum_with(
    &[&lhs, &rhs],
    "ij,jk->ik",
    EinsumOptimize::False,
)
.unwrap();

assert_eq!(out.try_concrete_shape(), Some(vec![2, 2]));

Variants§

§

Auto(ContractionOptimizerOptions)

Automatic optimization via omeco TreeSA.

§

False

No optimization: contract operands left-to-right.

§

Nested(NestedEinsum)

Parenthesized notation specifying contraction order.

§

Path(Vec<(usize, usize)>)

JAX-compatible position-based contraction path.

Each pair references positions in a shrinking operand list. After each contraction, the two operands are removed and the result is appended. Because this representation is independent of concrete dimension values, it can be used with symbolic traced inputs.

§

Tree(ContractionTree)

Pre-computed contraction tree.

A tree contains concrete shape-dependent planning results. It is accepted when shapes are concrete, then converted into fixed contraction pairs for the extension payload. A binary tree with the single pair (0, 1) or (1, 0) may bypass the extension path and lower directly to dot_general, including with symbolic traced inputs. Use EinsumOptimize::Path instead when building a symbolic traced graph for N-ary contraction.

Trait Implementations§

Source§

impl Debug for EinsumOptimize

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for EinsumOptimize

Source§

fn default() -> Self

Default: time-optimized automatic planning.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> ByRef<T> for T

§

fn by_ref(&self) -> &T

§

impl<T> DistributionExt for T
where T: ?Sized,

§

fn rand<T>(&self, rng: &mut (impl Rng + ?Sized)) -> T
where Self: Distribution<T>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<T, U> Imply<T> for U
where T: ?Sized, U: ?Sized,

§

impl<T> MaybeSend for T
where T: Send,

§

impl<T> MaybeSendSync for T
where T: Send + Sync,

§

impl<T> MaybeSync for T
where T: Sync,

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,