Skip to content
silviana amethyst edited this page Aug 20, 2024 · 20 revisions

Introduction

Bertini is software for numerical algebraic geometry, i.e., software for computing and using numerical approximations of solutions of polynomial systems. Bertini 2 is the redevelopment of classic Bertini (1).

Purpose for redevelopment

Bertini developed started around 2002, with the initial beta release in 2006. As with virtually all code, Bertini outgrew its original scope and development plan. Maintenance and extension have become increasingly difficult.

The NSF has kindly chosen to support this redevelopment through awards to University of Notre Dame and Colorado State University. Any opinions, findings, and conclusions or recommendations expressed in this material are those of the authors and do not necessarily reflect the views of the National Science Foundation.

Get involved

A few central developers are currently working on core development, along with code reviewers and testers. If you are interested in contributing to this project, please contact a member of the core development team - see the page of contributors.

Status

Summer 2024

A new build system is implemented, using cmake. Huzzah. Thanks to Jack Hagen (UWEC) for this work with me during academic year 2023-24. This should let me eliminate the autotools system, and I'll remove the unmaintained unity build as well. The point of this was ultimately to latch into the Conda package manager, which we tried in Fall 2023 but found too difficult using the autotools build system. Hopefully now we can make Conda happen.

Summer 2023

I was able to get pretty much all of the unit tests to pass!!! For the first time since 2017! I did a bunch of work while I was in Eindhoven for AG23. There is still one failing unit test caused by a bug in Boost 1.82 (I believe fixed in 1.83).

I switched from minieigen to eigenpy for the Python bindings interfacing to Eigen. I was able to get it all compiling, and I love the interoperability with numpy. But, I'm getting memory layout crashes when passing a numpy array into functions provided by pybertini. So there's something wrong with my alignment stuff.

I also succeeded in exposing the basic 0-dimensional solve to Python. That was huge.

Also, I enabled the use of straight-line-programs for polynomial system evaluation. But, bertini2 is still much slower than Bertini 1. I need to do some performance analysis to find and eliminate the bottle necks.

The program still lacks a bunch of functionality, but it's much closer than it was before.

May 2021

After major life changes, development on b2 has developed. Boost.Multiprecision broke many things around version 1.68-1.71, and made the core run incorrectly. See issue 207 and issue 308.

Recent work has made the core run more or less correctly again. However, the Python bindings remain broken until mixed-type precision problems are corrected. I'm waiting on pull 318.

In the meantime, this summer we're working on implementing Straight-Line Programs to improve the speed of polynomial system evaluation.

January 2018

M-hom start system is incorporated -- thanks Jeb! Major improvement to documentation over winter holiday 2017-2018. Sphinx docset for PyBertini is available at doc.bertini2.org/pybertini. Doxygen C++ core docset is available at doc.bertini2.org/core.

September 2017

M-hom start system is incoming. Performance is ... not so great. Primary focus is improving performance.

June 2016

Working Python bindings for fixed, multiple, and adaptive endgames and trackers, for arbitrary systems, have been implemented. Documentation is actively being improved, as is performance. We need help testing the code!

Next steps are to provide an executable with the library when compiling. To this end, our team will write a config parser, set of output generators (I think this will be fun! Spirit.Karma will be the generator library), and the main algorithms for Numerical Algebraic geometry. The algorithms include a basic zero-dim solver, slicing and regeneration for the irreducible decomposition methods, and a user-specified homotopy.

January 2016

An adaptive multiple precision tracker has been implemented. We can now track near singularities, and precision will adjust automatically. A pull request has been issued to make this official code. Furthermore, we have preliminary Python bindings, and the Power Series Endgame implemented. Pull requests for these will follow shortly.

September 2015

A significant portion of the computational core has been implemented. We can represent arbitrary polynomial, analytic, and non-analytic functions and systems in memory, and differentiate them. We can also construct the TotalDegree start system for any polynomial system which has a single affine or homogeneous variable group.

We are close to resolving a large pull request which will bring this code into the base, and another large request will follow, bringing tracking basics such as the Euler ODE predictor, Newton's method, and basic stepping and tracking routines. Full-blown path tracking is not very far away. Once we get these basic routines well tested, we will add other ODE predictors, endgame methods, and post-processing features.

Longer term, we need to implement multi-homogeneous start systems, regeneration, and the Numerical Irreducible Decomposition. The project is coming along nicely, and we are proud of the software as it stands today, and even happier about the future of Numerical Algebraic Geometry.

November 2014

We are currently working on laying down infrastructure for b2 development: development of resources (developer guidelines, choice of tools, etc.), high-level planning (via plantUML, etc.), and extreme low-level planning (representation of numbers, representation of polynomials, vector & matrix classes etc.). The plan is to build the most central classes and create a large skeleton, then invite developers to add flesh.