quantique 0.1.0

Pragmatic geometric algebra core with runtime signatures.
Documentation
use quantique::ga::{blade::Blade, multivector::MV, ops::gp, signature_rt::Signature};

#[test]
fn e1e2_times_e2e3_euclidean() {
    // (e1 ∧ e2) * (e2 ∧ e3) = (e1 * e2) * (e2 * e3) = e1 * (e2*e2) * e3 = +1 * e1e3
    let sig = Signature::from_pqz(3, 0, 0);
    let e1e2 = {
        let e1 = MV::basis(Blade(1 << 0), 1.0);
        let e2 = MV::basis(Blade(1 << 1), 1.0);
        gp(&e1, &e2, &sig)
    };
    let e2e3 = {
        let e2 = MV::basis(Blade(1 << 1), 1.0);
        let e3 = MV::basis(Blade(1 << 2), 1.0);
        gp(&e2, &e3, &sig)
    };
    let r = gp(&e1e2, &e2e3, &sig);
    assert_eq!(r.terms.len(), 1);
    assert_eq!(
        r.terms
            .get(&Blade((1 << 0) ^ (1 << 2)))
            .copied()
            .unwrap_or(0.0),
        1.0
    );
}