0.8.0
This new stable release introduces several important features.
First we now have an OpenMP compatible exact ot solver in ot.emd
. The OpenMP version is used when the parameter numThreads
is greater than one and can lead to nice speedups on multi-core machines.
Second we have introduced a backend mechanism that allows to use standard POT function seamlessly on Numpy, Pytorch and Jax arrays. Other backends are coming but right now POT can be used seamlessly for training neural networks in Pytorch. Notably we propose the first differentiable computation of the exact OT loss with ot.emd2
(can be differentiated w.r.t. both cost matrix and sample weights), but also for the classical Sinkhorn loss with ot.sinkhorn2
, the Wasserstein distance in 1D with ot.wasserstein_1d
, sliced Wasserstein with ot.sliced_wasserstein_distance
and Gromov-Wasserstein with ot.gromov_wasserstein2
. Examples of how this new feature can be used are now available in the documentation where the Pytorch backend is used to estimate a minimal Wasserstein estimator, a Generative Network (GAN), for a sliced Wasserstein gradient flow and optimizing the Gromov-Wassersein distance. Note that the Jax backend is still in early development and quite slow at the moment, we strongly recommend for Jax users to use the OTT toolbox when possible. As a result of this new feature, the old ot.gpu
submodule is now deprecated since GPU implementations can be done using GPU arrays on the torch backends.
Other novel features include implementation for Sampled Gromov Wasserstein and Pointwise Gromov Wasserstein, Sinkhorn in log space with method='sinkhorn_log'
, Projection Robust Wasserstein, and deviased Sinkorn barycenters.
This release will also simplify the installation process. We have now a pyproject.toml
that defines the build dependency and POT should now build even when cython is not installed yet. Also we now provide pe-compiled wheels for linux aarch64
that is used on Raspberry PI and android phones and for MacOS on ARM processors.
Finally POT was accepted for publication in the Journal of Machine Learning Research (JMLR) open source software track and we ask the POT users to cite this paper from now on. The documentation has been improved in particular by adding a "Why OT?" section to the quick start guide and several new examples illustrating the new features. The documentation now has two version : the stable version https://pythonot.github.io/ corresponding to the last release and the master version https://pythonot.github.io/master that corresponds to the current master branch on GitHub.
As usual, we want to thank all the POT contributors (now 37 people have contributed to the toolbox). But for this release we thank in particular Nathan Cassereau and Kamel Guerda from the AI support team at IDRIS for their support to the development of the
backend and OpenMP implementations.
New features
- OpenMP support for exact OT solvers (PR #260)
- Backend for running POT in numpy/torch + exact solver (PR #249)
- Backend implementation of most functions in
ot.bregman
(PR #280) - Backend implementation of most functions in
ot.optim
(PR #282) - Backend implementation of most functions in
ot.gromov
(PR #294, PR #302) - Test for arrays of different type and device (CPU/GPU) (PR #304, #303)
- Implementation of Sinkhorn in log space with
method='sinkhorn_log'
(PR #290) - Implementation of regularization path for L2 Unbalanced OT (PR #274)
- Implementation of Projection Robust Wasserstein (PR #267)
- Implementation of Debiased Sinkhorn Barycenters (PR #291)
- Implementation of Sampled Gromov Wasserstein and Pointwise Gromov Wasserstein
(PR #275) - Add
pyproject.toml
and build POT without installing cython first (PR #293) - Lazy implementation in log space for sinkhorn on samples (PR #259)
- Documentation cleanup (PR #298)
- Two up-to-date documentations for stable
release and for master branch. - Building wheels on ARM for Raspberry PI and smartphones (PR #238)
- Update build wheels to new version and new pythons (PR #236, #253)
- Implementation of sliced Wasserstein distance (Issue #202, PR #203)
- Add minimal build to CI and perform pep8 test separately (PR #210)
- Speedup of tests and return run time (PR #262)
- Add "Why OT" discussion to the documentation (PR #220)
- New introductory example to discrete OT in the documentation (PR #191)
- Add templates for Issues/PR on Github (PR#181)
Closed issues
- Debug Memory leak in GAN example (#254)
- DEbug GPU bug (Issue #284, #287, PR #288)
- set_gradients method for JAX backend (PR #278)
- Quicker GAN example for CircleCI build (PR #258)
- Better formatting in Readme (PR #234)
- Debug CI tests (PR #240, #241, #242)
- Bug in Partial OT solver dummy points (PR #215)
- Bug when Armijo linesearch (Issue #184, #198, #281, PR #189, #199, #286)
- Bug Barycenter Sinkhorn (Issue 134, PR #195)
- Infeasible solution in exact OT (Issues #126,#93, PR #217)
- Doc for SUpport Barycenters (Issue #200, PR #201)
- Fix labels transport in BaseTransport (Issue #207, PR #208)
- Bug in
emd_1d
, non respected bounds (Issue #169, PR #170) - Removed Python 2.7 support and update codecov file (PR #178)
- Add normalization for WDA and test it (PR #172, #296)
- Cleanup code for new version of
flake8
(PR #176) - Fixed requirements in
setup.py
(PR #174) - Removed specific MacOS flags (PR #175)