Releases: symbolica-dev/symbolica
Symbolica 2.0.0
Symbolica 2.0 has been released! 🎉
Symbolica 2.0 is a major update with a redesigned evaluator stack, richer
Python and Rust APIs, and broader support for special functions and notebook
display.
- Added many transcendental and special functions, including gamma, zeta,
polylogarithms, Bessel functions, Euler gamma, two-argument atan, and Laurent
series support around poles. - Reworked expression evaluation around a unified evaluator API, with builder
patterns in Rust, a simpler Python evaluator constructor, improved error
handling, and direct expression evaluation through a single constants map. - Added custom symbol evaluation and series hooks, including tagged external
functions, arbitrary-precision constants, C++ external function export, and
automatic dualization support. - Improved optimized numerical evaluation with SymJIT 2.18, JIT compilation
options, SIMD always enabled in the SymJIT backend, save/load support for JIT
evaluators, and faster batch JIT matrix evaluation. - Added rich output for notebooks: HTML, LaTeX, and formatted display for
expressions, series, polynomials, matrices, and graphs. - Added symbol import/export, ASCII export names, wrapped exported rationals,
and better function-map merging for exported or optimized evaluators. - Improved polynomial and rational-polynomial workflows with simpler
conversion APIs, coefficient-based collection, faster factoring/conversion,
and Hu-Monagan polynomial GCD enabled when expected to be faster. - Added a Rust prelude with common imports, plus method-style transcendental
functions through the newTranscendentalFunctionstrait.
Breaking/API changes:
- Removed deprecated methods and shortened Python custom symbol keywords:
custom_normalization,custom_print, andcustom_derivativeare now
normalization,print, andderivative. - Python
Expression.evaluate(constants, functions)and
evaluate_complex(...)were folded intoExpression.evaluate(constants). - Python optimized evaluator construction changed from
expr.evaluator(constants, functions, params, ...)to
expr.evaluator(params, functions=..., ...). - Rust evaluator construction now returns an
EvaluatorBuilder; JIT compilation
now takesJITCompilationSettings. - Print options changed:
square_brackets_for_functionwas removed in favor of
function_brackets, andcustom_print_modenow accepts structured data. Graph.generate(...)renamedexternal_nodestoexternal_edges.- Minimum Rust version is now 1.89.
Check the migration guide for more details.
Symbolica 1.5.1
Symbolica 1.5.1 has been released!
Notable fixes
- Proper handling of special cases for double-float arithmetic
- Fix normalization of addition of a number and a term
- Drastically improved parsing performance and factorization performance
- Support empty evaluator parameters in Python API
Symbolica 1.5.0
Symbolica 1.5.0 has been released!
Notable changes
- JIT compilation of evaluators using symjit by @Shahriar Iravanian
- A new evaluation pipeline that is much faster and uses less memory
- 2x faster arbitrary precision evaluation
- Recursive match and replace and deepest first replacement
- DoubleFloat arithmetic
- Horner form construction
Symbolica 1.4.0
Symbolica 1.4.0 has been released!
Notable changes
- Improved output featuring bracket colouring, division collection and multi-line formatting
- Much faster and more memory efficient optimized evaluator generation
- Fast arbitrary precision evaluation in Python API
- Typst output mode
- Toggle for partial pattern matching
- Symbol aliases
- Builtin
absandiffunctions
Symbolica 1.3.0
Symbolica 1.3.0 has been released!
Notable changes
- Overall performance improvement due to faster normalization of terms
- Performance improvements of pattern matching due to proofs of structural mismatches
- Experimental sparse matrix library (written by Gregor Kälin)
- Set parameters as real during evaluation, which allows for faster complex evaluators
- Set dual components of parameters to 0, which allows for faster compiled dual evaluation
- Add replace-once option
- Allow for more flexible input of numpy arrays for evaluators
** Upgrade notice **
- The ordering of terms in the output has changed and may be slightly harder to predict. Use
to_canonical_stringif you need predictable output.
Symbolica 1.2.0
Symbolica 1.2.0 has been released!
Notable changes
- Support setting namespaces per module in Python
Symbolica 1.1.0
Symbolica 1.1.0 has been released!
Notable changes
- Automatic differentation through duals for expression evaluation
- Attach custom data to symbols
- Improve linear system solving performance
- Joint symbol definition for symbols with interdependent normalization functions
Symbolica 1.0.0
Symbolica 1.0.0 has been released! 🎉 🎉
The first major version is out! Thank you to everyone who contributed to making this happen 🙏 All your feedback and contributions are greatly appreciated.
Notable changes
- Parts of Symbolica are open source. Check out numerica and graphica!
- Support functions in most places that used to accept symbols (collect in function, etc)
- Rework ring traits
Upgrade notice
- Some traits got renamed:
NumericalFloatLike -> FloatLike,RealNumberLike -> RealLike
Symbolica 0.20.0
Symbolica 0.20.0 has been released!
Notable changes
- Return underdetermined solutions for
linear_system_solve - Comprehensive parsing of Mathematica (
InputFormexcluding operators such as.and->, andFullForm), and improved Mathematica output generation - Tensor canonization now supports nesting in functions
- Floating point numbers are now supported as coefficients for (rational) polynomials
Upgrade notice
parse,parse_lit, andtry_parsenow take the optional default namespace as a named argument, e.g.parse!("x", default_namespace="test")
Symbolica 0.19.0
Symbolica 0.19.0 has been released!
Notable changes
- Branching is now supported for evaluators
- SIMD compiled code generation
- Custom tags for symbols
- New attributes: scalar, real, integer, positive
- Expressions can be tested for realness, integerness, etc
- Complex conjugation of whole expressions (including support for evaluation)
- Wildcards now filter based on their attributes
- Customizable logger
- Support for numpy arrays
- Half-edge notation for graph construction and progress callback
Upgrade notice
- Wildcards now filter based on their attributes (symmetric
f_will not match non-symmetric functions)
The Symbolica Python bindings on PyPi will release as soon as the community packages have been upgraded.