Looking for OSX and Jupyter notebook experts for integrating a new renderer into Matplotlib
Some of you may already have heard about mplcairo (https://github.com/matplotlib/mplcairo), a new backend for Matplotlib I have been developing for the past two years. Briefly, it relies on the cairo library (https://www.cairographics.org/) to generate higher quality images than Matplotlib's current backends, both in raster format (for which Matplotlib currently uses Agg, a library that whose development has stalled) and in vector (PDF, PS, SVG) formats (for which Matplotlib currently uses hand-written backends). (A list of mplcairo's features and differences from Matplotlib's default backends is listed in its README, at https://github.com/matplotlib/mplcairo.)
Given mplcairo's features, there is interest in the Matplotlib core developer team to move it into Matplotlib itself, with the ultimate goal to (possibly) make it the default backend. Obviously, there are many steps before this can happen, but, in particular, there are two for which I am looking for help:
- Improve the macOS build: Currently, I provide wheels for Linux and Windows, but am unable to provide wheels for macOS. Briefly, this is because mplcairo depends on a C++17-compliant C++ standard library, which is not available on OSX<10.14. On Linux, this is handled by statically linking a recent enough libstdc++ into the wheel, but I have not been able to do so on maxOS (I do not work on that platform...). If anyone knows how to make this work on macOS, their help would be greatly appreciated.
- Improve integration with the Jupyter notebook: Currently, Jupyter notebook's Matplotlib integration hard-codes the renderer to use to Agg. At some point, I had tried to make the notebook use mplcairo instead by forcefully overwriting the contents of the Agg backend with the mplcairo backend (ugh), which worked for a while, but things have changed enough on the notebook side (I believe) that this is not working anymore. Probably a more correct solution would be to make the backend actually properly configurable on the notebook's side. Given that I personally hardly ever use the notebook as well, here again help from a notebook expert would be most welcome.
Matplotlib brownie points for any helping hands :-)