fredrikj.net / blog /
Palaiseau FLINT workshop report
February 20, 2025
The third entry in the current series of annual-ish FLINT development workshops took place January 27 - 31, 2025 at École polytechnique in Palaiseau outside Paris, France. Here is a quick recap of what we accomplished.
Contents
Participation
We had a similar tournout to the previous workshops, with 13 on-site participants and a few remote contributors. A few more people were signed up but unfortunately couldn't make it for various reasons. The funding situation was good due to support from both ANR NuSCAP and ERC 10000 DIGITS.
Theta functions
Jean continued his big rewrite of the code for general theta functions to improve performance and robustness and also simplify the code. The rewrite was finished a couple of weeks after the workshop and the resulting PR #2182 is currently awaiting final review (presumably by me, but anyone is welcome to look). Jean also gave a talk at the workshop, explaining the algorithm and presenting the new results.
ODEs and holonomic functions
Albin, Marc, Pascal, Ricardo and I discussed the API, scope and implementation aspects of a future FLINT module (or set of modules) for working with holonomic/D-finite functions (and more generally with ODEs). Marc presented a work-in-progress implementation (#2186) of summation of D-finite series. I wasn't able to spend as much time as I would have wanted myself on this topic at the workshop, but Marc made progress with his code anyhow; it should be interesting to see this develop more in the near future (hopefully) as this will be a very powerful addition to FLINT.
Generics
Ricardo, Lars and I got quite a bit of work done on generics, including:
- Optimizing matrix transposition and nullspace for gr_mat and adding missing functions or replacing existing functions in other matrix modules with wrappers around gr_mat (#2203, #2229, #2221). Likewise, porting polynomial composition and powering (#2190, #2222) to gr_poly and replacing this functionality in the finite field modules with wrappers.
- Adding support for generic objects in flint_printf #2226.
- Adding scalar addition and multiplication for gr_poly (#2191, #2194).
- Fixing bugs in gr_poly, mainly when dealing with nonintegral domains (#2206, #2223).
- Adding generic scalar matrix powers and matrix functions for gr_mat (#2189, #2198).
As a result, one can now for example compute (some branch of) $\sqrt{A}$ for $A \in \overline{\mathbb{Q}}^{n \times n}$:
>>> A = Mat(QQbar)([[1,2],[3,4]]) >>> A ** 2 [[7, 10], [15, 22]] >>> (A ** 2).sqrt() [[Root a = 1.56670 of 11*a^2-27, Root a = 1.74078 of 33*a^2-100], [Root a = 2.61116 of 11*a^2-75, Root a = 4.17786 of 11*a^2-192]] >>> _ ** 2 [[7, 10], [15, 22]]
Or why not $A^{\pi}$ for $A \in \mathbb{C}^{n \times n}$:>>> Mat(CC)([[1, -1], [1, 1]]) ** RR.pi() [[([-2.32073556181001 +/- 5.94e-15] + [+/- 4.77e-15]*I), ([-1.85449839019252 +/- 6.53e-15] + [+/- 5.20e-15]*I)], [([1.85449839019252 +/- 6.74e-15] + [+/- 5.31e-15]*I), ([-2.32073556181001 +/- 5.59e-15] + [+/- 4.81e-15]*I)]] >>> _ ** (1 / RR.pi()) [[([1.00000000000 +/- 6.60e-13] + [+/- 6.60e-13]*I), ([-1.0000000000 +/- 9.82e-13] + [+/- 9.80e-13]*I)], [([1.00000000000 +/- 6.61e-13] + [+/- 6.59e-13]*I), ([1.0000000000 +/- 9.81e-13] + [+/- 9.80e-13]*I)]]
I also did a presentation about how to use FLINT's generics.
Interfaces
As usual, a lot of time went into improving the FLINT interfaces in downstream projects:
- Pierre added an interface to SageMath for FLINT's functionality to compute zeros of the Riemann zeta function (sagemath #39391).
- Lars and Albin made a whole bunch of improvements, simplifications and compatibility fixes to Nemo (Nemo.jl #1966, #1997, #1999, #2004, #2005, #2006, #2007, #2008, #1875, #2010).
- Tom and Oscar got further work done on Python-Flint, including some preliminary generics interfaces (Python-Flint #255, #256). Marc and Oscar also discussed options for interoperability between Python-Flint and SageMath.
- Joel, contributing remotely, developed an interface for nfloat in Arblib.jl (#2184, Arblib.jl #202).
- Alexandre worked on the Algpath project and on the requisite Rust bindings for FLINT.
General maintenance
We (mainly Albin, Ricardo and I) did a bunch of general project maintenance: website maintenance (#2022, flintwebpage#12), creating an issue template (#2056), compiler stuff (#2127, #2205) trying out docstring macros (#2216), optimizing test code (#2195), optimizing parts of the library for code size (#2202), fixing memory leaks and UBs reported by the address sanitizer (#2213, #2220), re-enabling compiler warnings (#2230) and more.
Integer multiplication seminar
On Friday, we co-hosted the MAX seminar, with Albin presenting our recent paper on faster-than-GMP basecase integer and floating-point multiplication in FLINT.
Final comments
Apologies to anyone whose contribution during this wek was not mentioned in this summary (feel free to notify me if you think I should add something). As usual, the value of these workshops is not just the actual code being written (or removed!) during the week, but also the chance to meet socially and have all kinds of useful informal discussions, so thanks to everyone for showing up!
I want to give a special shoutout to Ricardo for helping track down some gnarly bugs in my code.
Thanks to Marc, Pierre and Ricardo for the local organization; my impression was that everything ran very smoothly.
Since this workshop was held just at the beginning of 2025, we could very well do another one this year. If you are interested in co-organizing and/or have some ideas or constraints for the time and location of the next workshop, don't hesitate to get in touch. Our Zulip chat is a good place to talk.
fredrikj.net |
Blog index |
RSS feed |
Follow me on Mastodon |
Become a sponsor