Symbolica 0.12 has been released! 🎉

238 points revelation60

Symbolica 0.12 has been released! 🎉Symbolica is a symbolic-numeric computational framework for Rust and Python (fully written in Rust). It's been a while since the last post about Symbolica, and a lot has changes since then.

License change

Symbolica is free to use for hobbyists and newly, free for pre-revenue startups and one core and instance per device is free for non-commercial use. This means that most academics will be able to use Symbolica without their institutions having a license.

I've made a short selection of the biggest new features that got added over the past two months.

Notable changes

  • Optimized nested expression evaluation with C++ and ASM output modes
  • Arbitrary depth hyper-dual numbers for automatic differentiation
  • Native graph canonization, with support for directed edges and vertex and edge colours using McKay's algorithm
  • Arbitrary precision floats with proper accounting for precision
  • Precision tracking floating point numbers
  • Non-linear system solving using Newton's method
  • Factorization of polynomials over Galois fields and algebraic numbers
  • Improved Rust ergonomics

The expression optimizer is probably the biggest feature, giving 1000x improvement as can be read in this blog post (and it generates better assembly for complex multiplication than g++!). Next is hyper-dual numbers with arbitrary depth. The duals are generated with a macro so that its multiplication table can be precomputed at compile time. I will probably write a blog post about this soon. For now, here is a description of its use.

Next up,is graph canonization and isomorphism checks for arbitrary graphs, with any vertex or edge coloring and direction you like, using a custom implementation of McKay's algorithm. You can also generate graphs given vertex rules (this is useful to generate Feynman diagrams for example).

Then we have arbitrary precision floats (a wrapper around the rug crate) that properly accounts for changes in precision, for example when adding a rational to it or when taking a square root (this grows the precision by one binary digit!). In similar spirit, there is the error propagating float that can track how much precision you have left after doing a computation.

Video resources

Hopefully my 50min RustFest 2024 talk will be uploaded soon!

I hope you enjoy this new release! If there are any features you would like to use, you can join the development Zulip.