tenferro-einsum 0.3.0

Subscripts, contraction planning, concrete/traced/eager einsum APIs, extension runtime, and AD rule for tenferro.
use super::*;

fn labels(s: &str) -> Vec<u32> {
    s.bytes().map(u32::from).collect()
}

#[test]
fn parse_group_preserves_intermediate_output_label_order() {
    let nested = NestedEinsum::parse("(ca,ab),cd->bd").unwrap();

    let NestedEinsum::Node {
        subscripts,
        children,
    } = nested
    else {
        panic!("expected root node");
    };

    assert_eq!(subscripts.inputs[0], labels("cb"));

    let NestedEinsum::Node {
        subscripts: inner_subscripts,
        ..
    } = &children[0]
    else {
        panic!("expected grouped child node");
    };

    assert_eq!(inner_subscripts.output, labels("cb"));
}