Gajit: Symbolic Optimisation and JIT Compilation of Geometric Algebra in Python with GAALOP and Numba

Modern Geometric Algebra software systems tend to fall into one of two categories, either fast, difficult to use, statically typed, and syntactically different from the mathematics or slow, easy to use, dynamically typed and syntactically close to the mathematical conventions. Gajit is a system that aims to get the best of both worlds. It allows us to prototype and debug algorithms with the Python library clifford [1] which is designed to be easy to read and write and then to optimise our code both symbolically with GAALOP [2] and via the LLVM pipeline with Numba [3] resulting in highly performant code for very little additional effort.

[1]  Dietmar Hildenbrand,et al.  Gaalop 2.0 - A Geometric Algebra Algorithm Compiler , 2010 .

[2]  Dietmar Hildenbrand Geometric computing in computer graphics and robotics using conformal geometric algebra , 2006 .

[3]  Christian Perwass,et al.  Geometric Algebra with Applications in Engineering , 2008, Geometry and Computing.

[4]  Eric Jones,et al.  SciPy: Open Source Scientific Tools for Python , 2001 .

[5]  Marc Alexa,et al.  Competitive Runtime Performance for Inverse Kinematics Algorithms using Conformal Geometric Algebra , 2006, Eurographics.

[6]  Vincent Nozick,et al.  Garamon: A Geometric Algebra Library Generator , 2019, Advances in Applied Clifford Algebras.

[7]  Eduardo Bayro-Corrochano,et al.  Optimizations and Performance of a Robotics Grasping Algorithm Described in Geometric Algebra , 2009, CIARP.

[8]  Christian Steinmetz,et al.  Geometric Algebra Computing for Heterogeneous Systems , 2016, Advances in Applied Clifford Algebras.

[9]  Vikram S. Adve,et al.  LLVM: a compilation framework for lifelong program analysis & transformation , 2004, International Symposium on Code Generation and Optimization, 2004. CGO 2004..

[10]  Daniel Fontijne,et al.  Gaigen 2:: a geometric algebra implementation generator , 2006, GPCE '06.

[11]  Siu Kwan Lam,et al.  Numba: a LLVM-based Python JIT compiler , 2015, LLVM '15.

[12]  Dietmar Hildenbrand,et al.  Foundations of Geometric Algebra Computing , 2012, Geometry and Computing.

[13]  Ken Kennedy,et al.  Optimizing Compilers for Modern Architectures: A Dependence-based Approach , 2001 .