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_subscriptsParsed input subscripts (e.g., “ij,jk”).output_subscriptParsed output subscript (e.g., “ik”).operandsThe 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.