This crate is specifically designed for support of high-dimensional algebras of arbitrary signatures.
In order to define an algebra type, just use the declare_algebra!
macro and specify the signature, and optionally the generator names. For example:
declare_algebra!(PGA3, [+,+,+,0], ["x", "y", "z", "n"]);
type MV = Multivector<f64, PGA3>; // A multivector type
type SMV = SparseMultivector<f64, PGA3>; // A sparse multivector type
The biggest feature of this crate distinguishing it from other GA libraries is support for a variation of Fast Fourier Transform, making geometric multiplication of high-dimensional multivectors asymptotically faster.
Multiplication of dense multivectors in up to 20 dimensions can be handled in reasonable time thanks to it. In 6 dimensions and higher, just use:
//let c: MV = &a * &b; // SLOW
let c: MV = (a.fft() * b.fft()).ifft(); // FAST
All while being able to handle arbitrary (including degenerate) signatures.
Currently, the crate is in early stages of development, and so far I don’t guarantee any stable API beyond the basic arithmetic operations.
I am interested in any feedback on what to change about this API before stabilizing it.
Documentation can be generated via cargo doc
in the cloned repo.