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
impl Debug for EinsumOptimize
Auto Trait Implementations§
impl Freeze for EinsumOptimize
impl RefUnwindSafe for EinsumOptimize
impl Send for EinsumOptimize
impl Sync for EinsumOptimize
impl Unpin for EinsumOptimize
impl UnsafeUnpin for EinsumOptimize
impl UnwindSafe for EinsumOptimize
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
fn rand<T>(&self, rng: &mut (impl Rng + ?Sized)) -> Twhere
Self: Distribution<T>,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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