We warmly welcome contributions on our GitHub repository.

Depending on your skills and interests, you may help us to develop KeOps as follows:

  1. Write a bug report. If you encounter a compilation issue, notice a typo on this website or need help to accelerate your program with KeOps, please let us know on our issue tracker.

  2. Request a new feature. KeOps was first motivated by applications to shape analysis - but has now found a much wider audience. If your work could benefit from an extension of the current KeOps engine, please let us know about it on GitHub. All suggestions are welcome!

  3. Let us know about your work. We are always happy to learn about new use cases for KeOps. If you are using this library in your work or simply believe that it could be helpful, feel free to contact us on GitHub.

  4. Write a new tutorial. As detailed in our introduction, KeOps can be used in a wide range of settings… and we’d love this documentation to better reflect its flexibility. In order to add a new example or tutorial to this website, you should simply write a new Python file in the pykeops/tutorials or pykeops/examples folders with detailed comments and submit your pull request. From imaging sciences to computational physics, all contributions all welcome!

  5. Write a new maths operation. As detailed in the guided tour of our C++ engine, KeOps is fairly easy to extend with custom operations and reductions. The pull requests that provided support for the arc-cosine and arc-sine functions should be good starting points: if you find them unclear, please let us know. Note that this type of development will become significantly easier with the release of the Pythonic compilation engine that we are scheduling for the summer of 2021. You may prefer to wait until then to start dealing with KeOps++!

  6. Write a KeOps interface for a new language or framework. KeOps is mostly written in C++ and thus relatively easy to interface with all modern languages. We currently support PyTorch and NumPy while providing partial binders for Matlab. The RKeOps package is developed by Ghislain Durif and we warmly welcome external contributions for e.g. Julia or TensorFlow bindings: if you’d like to interface KeOps with your favorite library, feel free to contact us on GitHub.

  7. Contribute to the core KeOps engine. Finally, you may contribute directly with a major “original” feature, such as the on-GPU conjugate gradient solvers that were implemented by Tanguy Lefort. A few suggestions are detailed on our GitHub projects page: if you are interested in such a project, please let us know. We’ll be happy to help you to choose an appropriate topic and discuss possible collaborations.

As detailed in our road map, helping new developers to contribute to KeOps is one of our main targets for 2021. With a simpler compilation engine and C++ code structure, KeOps should become much easier to extend and maintain in the long run.