Skip to main content

parse_einsum_input

Function parse_einsum_input 

Source
pub fn parse_einsum_input(
    subscripts: &str,
    operands: &[TensorShapeType],
) -> Result<(String, String, Vec<TensorShapeType>), String>
Expand description

A reproduction of einsum’s parsing logic in Rust (originally from Python/Numpy).

§Arguments

  • subscripts - The einsum subscript string (e.g., “ij,jk->ik”).
  • shapes - Array shapes or tensors to contract.

§Returns

  • input_subscripts Parsed input subscripts (e.g., “ij,jk”).
  • output_subscript Parsed output subscript (e.g., “ik”).
  • operands The operands (shapes) to use in contraction.

§Examples

let a_shape = vec![4, 4];
let b_shape = vec![4, 4, 4];
let subscripts = "...a, ...a -> ...";
let (input_subscripts, output_subscript, operands) = parse_einsum_input(subscripts, &[a_shape, b_shape]).unwrap();
assert_eq!(input_subscripts, "da,cda");
assert_eq!(output_subscript, "cd");
assert_eq!(operands, vec![vec![4, 4], vec![4, 4, 4]]);

§Errors

  • Subscripts contain invalid ‘->’ patterns (larger than one ‘->’, or contains separated - or > characters).
  • Malformed ellipses (“…”).
  • Output characters are non-unique or missing from inputs.
  • Operand count doesn’t match subscript terms.