Kaiserslautern FLINT meeting report
October 16, 2023
We have just wrapped up the 2023 FLINT development workshop in Kaiserslautern. This was the third-ever official FLINT meeting and the first such event in a decade, following the 2011 Sage-FLINT days and 2013 FLINT developers meeting which both took place at the University of Warwick in the UK. Granted, FLINT has had some representation at various Sage Days and Oscar meetings since then, and the main developers have met up a few times, but it was long overdue to have a big workshop focused on FLINT.
12/16 participants posing for a photo.
We had 16 on-site participants, some of which I had not previously met in person. A handful of people who couldn't make it to Kaiserslautern were also involved remotely over Zulip, video and the issue tracker.
For some quantitive measure of productivity, we had merged 65 pull requests by Friday afternoon, comprising 266 commits with
314 files changed, 6169 insertions(+), 44445 deletions(-)(Yes! Net negative lines of code!)
Various discussions and coding projects launched during the workshop naturally couldn't be completed in five days' time but should lead to future results.
Pushing for 3.0
Walking from the hotel on Monday morning.
The most pressing goal was to clean up the codebase and finish any remaining issues blocking the final 3.0 release. Indeed, there is now a flint-3.0.0 release candidate! To this end, we checked off various maintenance tasks. For example:
- Max Horn improved the build system and implemented an easy-to-use facility for making releases through GitHub actions (much appreciated by the maintainer).
- Edgar Costa removed the poorly-supported C++ interface. It is now located in the standalone flintxx repository.
- Ricardo Buring fixed a long list of memory leaks and removed a bunch of obsolete functions.
- Marc Mezzarobba and Vincent Delecroix (participating remotely) fixed a few issues affecting SageMath.
- Several participants helped clean up the documentation. A special mention goes to Joel Dahne who, among other things, went through the trouble of transplanting the last remnants of the old .tex documentation.
- Albin Ahlbäck fixed an Arb multithreading issue and sorted out various other problems.
Wrapper and documentation business
Hartmut Monien made the first public release of his new Haskell interface to FLINT and gave a live demo of it.
An important point of discussion was the degree of overlap between the many wrappers for FLINT (Python-FLINT, Sage, Nemo, Arblib.jll, Haskell, etc.). Most of these projects generate parts of the bindings in a semi-automated fashion by scraping the FLINT documentation; we discussed the possibility to export an easily machine-readable API specification in some centralized and more robust way.
Related (but somewhat orthogonal) to this, Alex Best started an experiment to inline more of the documentation in the source code. This could help keep the API docs up to date and make FLINT's often dense code easier to understand by embracing a more literate style. We have still not decided whether to go in this direction with the documentation, but it looks promising.
Everyone looking busy.
Although much of the coding effort went into maintenance, we had time to implement a few minor new features. For example, Joel Dahne added an arb_minmax function, and Vincent Neiger added several useful nmod_vec and nmod_poly_mat helper functions. Several other more substantial feature projects were started:
- Vincent Neiger, Marc Mezzarobba, Pascal Molin, Andreas Enge and myself (and probably someone else I'm forgetting?) spent some time reviewing the multiple FFT implementations in FLINT and discussing ways to improve and use them. Pascal Molin started drafting a generic interface for working with transformed operands.
- Most of the participants participated in one discussion or another about the state of linear algebra in FLINT. One of the issues is performance: Vincent Neiger did very extensive profiling of matrix multiplication to identify weak spots, and I did some experiments regarding possible optimizations. Claus Fieker, Berenike Dieterle and Ricardo Buring have also started looking into choosing good benchmark matrices for higher-level functions.
- Everyone agrees that FLINT should have sparse linear algebra. Originally, the plan was to do a basic generics-based implementation during the workshop. Unfortunately, the main person involved, Kartik Venkatram, could not attend the workshop due to very unfortunate last-minute circumstances, and this project has been postponed. The discussions about this planned feature were nevertheless instructive.
- Andreas Enge, Edgar Costa and I began reviewing Jean Kieffer's state-of-the-art implementation of the Riemann theta function which is expected to be merged in FLINT 3.1.
- With Claus Fieker, Hartmut Monien and Håvard Damm-Johnsen, we discussed future improvements to FLINT's p-adics, including the possibility of adding ramified extensions, error propagation, and more features such as polynomial root-finding. Håvard began working on a generics wrapper for FLINT's p-adics.
- Ricardo Buring started working on a generic implementation of noncommutative polynomials.
- Hartmut Monien started working on some improvements to the permutations module.
- Andreas Enge, Edgar Costa and others looked at architecture-specific optimizations and the possibility of building fat binaries. (The conclusion: it's not trivial.)
- Albin Ahlbäck, who has done a ton of recent work to improve FLINT's build times, started some further refactorings to reduce header file bloat and unify test programs.
- David Berghaus started a generics-based implementation of the modular splitting algorithm for polynomial evaluation.
- We had multiple discussions about the goal and scope of FLINT's new generics system, and for FLINT as a whole.
- We discussed the possibility of having Google Summer of Code students next year, presumably under an existing organization like SageMath. I will not personally have time to mentor anyone, but if anyone else wishes to do so, by all means get in touch: there are lots of possible projects.
Beer, schnitzel and spätzle.
The workshop turned out to be very enjoyable. The weather was nice (perhaps alarmingly nice for October), the local arrangements worked well, and we had a nice relaxed atmosphere. There were some mixed opinions about putting up with German food (as one person put it, du sucre et du gras) for a whole week, but one can't have everything.
Thanks to all participants for making this happen! Apologies to anyone whose contribution was not listed explicitly in this summary report.
I will look into the possibility of following this up with a workshop in 2024.