pub trait TraceContextEinsumExt {
// Required methods
fn einsum(
&mut self,
inputs: &[TraceValue],
subscripts: &str,
) -> Result<TraceValue>;
fn einsum_notation(
&mut self,
inputs: &[TraceValue],
notation: &EinsumNotation,
) -> Result<TraceValue>;
fn einsum_subscripts(
&mut self,
inputs: &[TraceValue],
subscripts: &EinsumSubscripts,
) -> Result<TraceValue>;
fn einsum_with(
&mut self,
inputs: &[TraceValue],
subscripts: &str,
optimize: EinsumOptimize,
) -> Result<TraceValue>;
fn einsum_notation_with(
&mut self,
inputs: &[TraceValue],
notation: &EinsumNotation,
optimize: EinsumOptimize,
) -> Result<TraceValue>;
fn einsum_subscripts_with(
&mut self,
inputs: &[TraceValue],
subscripts: &EinsumSubscripts,
optimize: EinsumOptimize,
) -> Result<TraceValue>;
}Expand description
Backend-neutral einsum tracing methods for TraceContext.
Each method records one semantic einsum extension operation. Contraction path materialization and provider selection remain compiler/runtime work.
§Examples
use tenferro_einsum::TraceContextEinsumExt;
use tenferro_ops::dim_expr::DimExpr;
use tenferro_runtime::program::ProgramInputSpec;
use tenferro_runtime::TraceContext;
use tenferro_tensor::DType;
let matrix = || {
ProgramInputSpec::new(
DType::F64,
[DimExpr::Const(2), DimExpr::Const(2)],
)
};
let mut trace = TraceContext::new();
let lhs = trace.input(matrix()).unwrap();
let rhs = trace.input(matrix()).unwrap();
let output = trace.einsum(&[lhs, rhs], "ij,jk->ik").unwrap();
let graph = trace.finish(&[output]).unwrap();
assert_eq!(graph.program().operations().count(), 1);Required Methods§
Sourcefn einsum(
&mut self,
inputs: &[TraceValue],
subscripts: &str,
) -> Result<TraceValue>
fn einsum( &mut self, inputs: &[TraceValue], subscripts: &str, ) -> Result<TraceValue>
Trace textual einsum notation using the default optimizer policy.
§Errors
Returns Error::InvalidSubscripts for malformed notation,
Error::Validation for invalid input metadata, Error::Planning
for an invalid optimizer policy, or Error::Runtime when semantic
program construction fails.
Sourcefn einsum_notation(
&mut self,
inputs: &[TraceValue],
notation: &EinsumNotation,
) -> Result<TraceValue>
fn einsum_notation( &mut self, inputs: &[TraceValue], notation: &EinsumNotation, ) -> Result<TraceValue>
Trace rank-unresolved notation using the default optimizer policy.
§Examples
use tenferro_einsum::{EinsumAxis, EinsumNotation};
let notation = EinsumNotation::new(&[&[EinsumAxis::Ellipsis]], &[]);
assert_eq!(notation.input_count(), 1);§Errors
Returns Error::InvalidSubscripts for invalid axis tokens,
Error::Validation for invalid input metadata, Error::Planning
for symbolic ellipsis or an invalid optimizer policy, or Error::Runtime
for graph-build failures.
Sourcefn einsum_subscripts(
&mut self,
inputs: &[TraceValue],
subscripts: &EinsumSubscripts,
) -> Result<TraceValue>
fn einsum_subscripts( &mut self, inputs: &[TraceValue], subscripts: &EinsumSubscripts, ) -> Result<TraceValue>
Trace parsed einsum notation using the default optimizer policy.
§Errors
Returns Error::Validation for invalid input metadata,
Error::Planning for an invalid optimizer policy, or
Error::Runtime when semantic program construction fails.
Sourcefn einsum_with(
&mut self,
inputs: &[TraceValue],
subscripts: &str,
optimize: EinsumOptimize,
) -> Result<TraceValue>
fn einsum_with( &mut self, inputs: &[TraceValue], subscripts: &str, optimize: EinsumOptimize, ) -> Result<TraceValue>
Trace textual einsum notation with an explicit optimizer policy.
§Errors
Returns Error::InvalidSubscripts for malformed notation,
Error::Validation for invalid input metadata, Error::Planning
for an invalid optimizer policy, or Error::Runtime when semantic
program construction fails.
Sourcefn einsum_notation_with(
&mut self,
inputs: &[TraceValue],
notation: &EinsumNotation,
optimize: EinsumOptimize,
) -> Result<TraceValue>
fn einsum_notation_with( &mut self, inputs: &[TraceValue], notation: &EinsumNotation, optimize: EinsumOptimize, ) -> Result<TraceValue>
Trace rank-unresolved notation with an explicit optimizer policy.
§Examples
use tenferro_einsum::{EinsumAxis, EinsumNotation};
let notation = EinsumNotation::new(&[&[EinsumAxis::Ellipsis]], &[]);
assert_eq!(notation.input_count(), 1);§Errors
Returns Error::InvalidSubscripts for invalid axis tokens,
Error::Validation for invalid input metadata, Error::Planning
for symbolic ellipsis or an invalid optimizer policy, or Error::Runtime
for graph-build failures.
Sourcefn einsum_subscripts_with(
&mut self,
inputs: &[TraceValue],
subscripts: &EinsumSubscripts,
optimize: EinsumOptimize,
) -> Result<TraceValue>
fn einsum_subscripts_with( &mut self, inputs: &[TraceValue], subscripts: &EinsumSubscripts, optimize: EinsumOptimize, ) -> Result<TraceValue>
Trace parsed einsum notation with an explicit optimizer policy.
§Errors
Returns Error::Validation for invalid input metadata,
Error::Planning for an invalid optimizer policy, or
Error::Runtime when semantic program construction fails.
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".