The solution of arbitrary polynomial systems is an area of active research, and has many applications in math, science and engineering. This software, Bertini 2, is a complete re-implementation of Bertini 1 from C into C++/Python.
The theoretical basis for the solution of polynomials with Bertini is a theorem which bounds the number of solutions a system may have. It sits together with the numerical computational tool of "homotopy continuation". the act of "continuing" from one system into another through a "homotopy", as depicted in the below diagram:
Bertini 2 currently has implemented the foundations of Numerical Algebraic Geometry. Development is ongoing, and here's what we have so far:
- C++ functions and types, with Python bindings.
- Through Python, runtime scriptable construction of systems and interactivity with their zero-dimensional solutions.
- Construction of multivariate polynomial and non-polynomial systems.
- Evaluation of systems and their Jacobians in double and arbitrary multiple precision, using two different methods.
- Construction of the Total Degree and Multihomogeneous start systems.
- Construction of homotopies (they're just systems with path variables defined).
- Tracking of a start point x_0, corresponding to a particular time
$t_0 \in \mathbb{C}^n$ in a homotopy$H$ , from$t_0$ to$t_1$ . - Running of the Power Series and Cauchy endgames, in double, multiple, and adaptive precision.
Development is ongoing, and we want your help!
- Parallel solving
- Numerical irreducible decomposition
- Membership testing
- and other algorithms
Users wanting a more developed implementation are recommended to use Bertini 1 or homotopycontinuation.jl, or one of the other packages implementing the theory.
The Python package bertini2 provides pre-built wheels for Linux, macOS, and Windows.
pip install bertini2Once it's installed, you import bertini
- Linux: Python 3.9-3.14
- MacOS (Apple Silicon): Python 3.9-3.14
- MacOS (Intel): not supported
- Windows: Python 3.9-3.14
Please see the Wiki compiling section for instructions on compiling Bertini 2.
The official project repository is hosted on GitHub at github.com/bertiniteam/b2.
Please note that this is a long-term project, and is under active development. If you want to help, please see the wiki for contact information. We have opportinuties for all skill levels and interests.
Bertini 2 is Free and Open Source Software. Source is available under GPL Version 3, with additional terms as permitted under Section 7.
A huge thank you to:
- HongKee Moon, for his help in getting this package to be pip-installable with a comprehensive CI build system.
- Jack Hagen, for helping get away from the autotools and replacing CMake.
- Mike Mumm, for helping with straight-line-programs
- Jeb Collins, for writing much of the parser system, implementing the predictors, and so much more
- Tim Hodges, for contributing to the endgame implementations
- Alan Liddel, for tons of help with Python parts
- Dan Bates, Jon Hauenstein, for critical advise support, and guidance
- Andrew Sommese, Charles Wampler, Dan Bates, Jon Hauenstein, for writing Bertini 1
And to all the other people who have contributed to this package over the years.
