Skip to content

Commit 89f1613

Browse files
authored
[MRG] Release 0.9.0 (#452)
* relkase text * correct typos
1 parent 0d3e00d commit 89f1613

File tree

2 files changed

+76
-2
lines changed

2 files changed

+76
-2
lines changed

RELEASES.md

+75-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,80 @@
11
# Releases
22

3-
## 0.8.3dev
3+
## 0.9.0
4+
5+
This new release contains so many new features and bug fixes since 0.8.2 that we
6+
decided to make it a new minor release at 0.9.0.
7+
8+
The release contains many new features. First we did a major
9+
update of all Gromov-Wasserstein solvers that brings up to 30% gain in
10+
computation time (see PR #431) and allows the GW solvers to work on non symmetric
11+
matrices. It also brings novel solvers for the very
12+
efficient [semi-relaxed GW problem
13+
](https://pythonot.github.io/master/auto_examples/gromov/plot_semirelaxed_fgw.html#sphx-glr-auto-examples-gromov-plot-semirelaxed-fgw-py)
14+
that can be used to find the best re-weighting for one of the distributions. We
15+
also now have fast and differentiable solvers for [Wasserstein on the circle](https://pythonot.github.io/master/auto_examples/plot_compute_wasserstein_circle.html#sphx-glr-auto-examples-plot-compute-wasserstein-circle-py) and
16+
[sliced Wasserstein on the
17+
sphere](https://pythonot.github.io/master/auto_examples/backends/plot_ssw_unif_torch.html#sphx-glr-auto-examples-backends-plot-ssw-unif-torch-py).
18+
We are also very happy to provide new OT barycenter solvers such as the [Free
19+
support Sinkhorn
20+
barycenter](https://pythonot.github.io/master/auto_examples/barycenters/plot_free_support_sinkhorn_barycenter.html#sphx-glr-auto-examples-barycenters-plot-free-support-sinkhorn-barycenter-py)
21+
and the [Generalized Wasserstein
22+
barycenter](https://pythonot.github.io/master/auto_examples/barycenters/plot_generalized_free_support_barycenter.html#sphx-glr-auto-examples-barycenters-plot-generalized-free-support-barycenter-py).
23+
A new differentiable solver for OT across spaces that provides OT plans
24+
between samples and features simultaneously and
25+
called [Co-Optimal
26+
Transport](https://pythonot.github.io/master/auto_examples/others/plot_COOT.html)
27+
has also been implemented. Finally we began working on OT between Gaussian distributions and
28+
now provide differentiable estimation for the Bures-Wasserstein [divergence](https://pythonot.github.io/master/gen_modules/ot.gaussian.html#ot.gaussian.bures_wasserstein_distance) and
29+
[mappings](https://pythonot.github.io/master/auto_examples/domain-adaptation/plot_otda_linear_mapping.html#sphx-glr-auto-examples-domain-adaptation-plot-otda-linear-mapping-py).
30+
31+
Another important first step toward POT 1.0 is the
32+
implementation of a unified API for OT solvers with introduction of [`ot.solve`](https://pythonot.github.io/master/all.html#ot.solve)
33+
function that can solve (depending on parameters) exact, regularized and
34+
unbalanced OT and return a new
35+
[`OTResult`](https://pythonot.github.io/master/gen_modules/ot.utils.html#ot.utils.OTResult)
36+
object. The idea behind this new API is to facilitate exploring different solvers
37+
with just a change of parameter and get a more unified API for them. We will keep
38+
the old solvers API for power users but it will be the preferred way to solve
39+
problems starting from release 1.0.0.
40+
We provide below some examples of use for the new function and how to
41+
recover different aspects of the solution (OT plan, full loss, linear part of the
42+
loss, dual variables) :
43+
```python
44+
#Solve exact ot
45+
sol = ot.solve(M)
46+
47+
# get the results
48+
G = sol.plan # OT plan
49+
ot_loss = sol.value # OT value (full loss for regularized and unbalanced)
50+
ot_loss_linear = sol.value_linear # OT value for linear term np.sum(sol.plan*M)
51+
alpha, beta = sol.potentials # dual potentials
52+
53+
# direct plan and loss computation
54+
G = ot.solve(M).plan
55+
ot_loss = ot.solve(M).value
56+
57+
# OT exact with marginals a/b
58+
sol2 = ot.solve(M, a, b)
59+
60+
# regularized and unbalanced OT
61+
sol_rkl = ot.solve(M, a, b, reg=1) # KL regularization
62+
sol_rl2 = ot.solve(M, a, b, reg=1, reg_type='L2')
63+
sol_ul2 = ot.solve(M, a, b, unbalanced=10, unbalanced_type='L2')
64+
sol_rkl_ukl = ot.solve(M, a, b, reg=10, unbalanced=10) # KL + KL
65+
66+
```
67+
The function is fully compatible with backends and will be implemented for
68+
different types of distribution support (empirical distributions, grids) and OT
69+
problems (Gromov-Wasserstein) in the new releases. This new API is not yet
70+
presented in the kickstart part of the documentation as there is a small change
71+
that it might change
72+
when implementing new solvers but we encourage users to play with it.
73+
74+
Finally, in addition to those many new this release fixes 20 issues (some long
75+
standing) and we want to thank all the contributors who made this release so
76+
big. More details below.
77+
478

579
#### New features
680
- Added feature to (Fused) Gromov-Wasserstein solvers herited from `ot.optim` to support relative and absolute loss variations as stopping criterions (PR #431)

ot/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555
# utils functions
5656
from .utils import dist, unif, tic, toc, toq
5757

58-
__version__ = "0.8.3dev"
58+
__version__ = "0.9.0"
5959

6060
__all__ = ['emd', 'emd2', 'emd_1d', 'sinkhorn', 'sinkhorn2', 'utils',
6161
'datasets', 'bregman', 'lp', 'tic', 'toc', 'toq', 'gromov',

0 commit comments

Comments
 (0)