# Workplan The proposed work can be summarized in nine points: 1. scikit-image numerical kernels ported to Transonic with serious comparison between the existing Cython solutions and the different Transonic backends. These benchmarks should be reproducible on different platforms and the results will be made available on a website. We will propose to developers using other languages to submit their own implementations for comparison. 2. Find the correct Transonic abstractions to represent most concepts available in the accelerators (`cast`, `nogil`, PyCapsules/cfunc/scipy.LowLevelCallable, parallel instructions, user-defined low-level types, fused types/multiple signatures, fastmath). Design a good API for Transonic to express these concepts. 3. Improve Transonic backends, i.e. write better/faster Cython/Numba/Pythran code from Transonic code. Demonstrate that Transonic-Cython is as fast as Cython on most scikit-image numerical kernels. 4. Increase the robustness of Transonic. End-users should never be disturbed by Transonic. This implies refactoring Transonic code and improving dependencies used for code analyzes and transformations (Beniget and Gast). We will also increase testing and write a demo package using Transonic as scikit-image would use it (with good documentation for developers and for users). 5. Other Transonic improvements: - Making it easy to write a new backend to Transonic. Currently, it should already be possible to write a backend as a Transonic extension. We will improve the documentation on this feature and contact developers of other accelerators (for example Weld and Pyccel) to collaborate on their Transonic backend. We plan to propose an internship on this subject. - Find good solutions for how the Transonic backend in chosen by the user. - Transonic API to define alternative implementations of a function for different backends. 6. Pull-requests on scikit-image and skimage-experiments repositories to use the accelerators via Transonic. First, Cython to Transonic-Cython, then faster kernels (and/or cleaner code) with alternative backends (Pythran and Numba). 7. Improve the accelerators when needed. Fix bugs, performance issues and new features (better fused types in Cython, improve Cython's pure-Python mode, `dataclass` in Pythran, improvement of Numba performance on high-level code). 8. Improve the integration and feature coverage of the Pythran support in Cython. This has the potential to improve without modification already written Cython codes. More standard NumPy/SciPy code gets vectorised and accelerated. We should even be able to add support for vectorised binary operators on memory views. 9. Beside these enhancements, we will also dedicate time and energy for community engagement, documentation and maintenance. For example, Cython has more than 700 opened issues and 77 pull requests! Taking care of users and contributors is also an important task. The deeper improvements of the accelerators with be performed by core developers of these projects, namely Serge Guelton for Pythran, Stefan Behnel for Cython and Stanley Seibert and Valentin Haenel for Numba. Stefan will also solve Cython known issues that are blockers for Transonic-Cython (see <https://transonic.readthedocs.io/en/latest/backends/cython.html>). Serge will be implied in the tasks on Transonic/Gast/Beniget refactoring and Pythran/Cython integration. A full-time developer hired for the project will work with Pierre Augier (creator for Transonic) and in closed collaboration with the other members of the projects. Her/His tasks will be about (points 1 to 6 and 9): - scikit-image and Transonic, - the benchmarks and the associated website, - report issues and work on the simplest ones, - improve the documentation of the accelerators targetting the users. ## Dissemination of the results and communication Good communication, targeting both developers of libraries and simple users, is a key factor for the success of Transonic and of this project. We will therefore be very careful to spent time on the documentations of Transonic and of the accelerators, and more generally on communication through other channels: - Dedicated online chat service and social media, - Blog notes about the advancement of the project, - One article presenting Transonic and the Joint Python Accelerators project submitted to the Journal of Open Source Software, - Benchmark repository and website, - Presentations and tutorials in Python conferences (in particular the annual Scipy conference and Euroscipy). One goal of this project is to allow every simple user of Python to easily get very good performance. We will try to be as inclusive and accessible as possible in our communication. Finally, we plan to organize after the end of this one-year grant a workshop with tutorials and sprints. We will invite developers of libraries which could use the products that will be built during this project. Part of this workshop will be dedicated to work on the PyPy, HPy and EPython projects, which may become important for the future of efficient computing with Python. This event will be organized in Europe and may be coupled with EuroScipy or EuroPython.