pub struct Subscripts {
pub inputs: Vec<Vec<u32>>,
pub output: Vec<u32>,
}Expand description
Einsum subscripts using integer labels (omeinsum-rs compatible).
Each dimension is represented by a u32 label. Labels shared across
multiple input tensors are contracted (summed over). Labels present
only in the output are free indices.
§Examples
use tenferro_einsum::Subscripts;
// Matrix multiplication: C_{ik} = Σ_j A_{ij} * B_{jk}
let subs = Subscripts::new(&[&[0, 1], &[1, 2]], &[0, 2]);
assert_eq!(subs.inputs.len(), 2);
assert_eq!(subs.output, vec![0, 2]);use tenferro_einsum::Subscripts;
// Parse from string notation
let subs = Subscripts::parse("ij,jk->ik").unwrap();
assert_eq!(subs.inputs.len(), 2);Fields§
§inputs: Vec<Vec<u32>>Index labels for each input tensor.
output: Vec<u32>Index labels for the output tensor.
Implementations§
Source§impl Subscripts
impl Subscripts
Sourcepub fn new(inputs: &[&[u32]], output: &[u32]) -> Self
pub fn new(inputs: &[&[u32]], output: &[u32]) -> Self
Create subscripts from integer label arrays.
§Arguments
inputs— Index labels for each input tensoroutput— Index labels for the output tensor
Sourcepub fn parse(notation: &str) -> Result<Self>
pub fn parse(notation: &str) -> Result<Self>
Parse subscripts from NumPy/PyTorch-style string notation.
Each character (a–z, A–Z) represents a dimension label.
Input tensors are separated by commas, and -> separates inputs
from the output.
Parentheses can be used to specify contraction order explicitly.
Grouped operands are contracted first, enabling manual control
over the pairwise contraction sequence without using
ContractionTree::from_pairs.
§Examples
"ij,jk->ik"— matrix multiplication"ii->i"— diagonal extraction"ijk->"— full contraction (scalar result)"ij,(jk,kl)->il"— contract B and C first, then with A
§Errors
Returns an error if the notation is malformed.
Trait Implementations§
Source§impl Clone for Subscripts
impl Clone for Subscripts
Source§fn clone(&self) -> Subscripts
fn clone(&self) -> Subscripts
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more