POT


NamePOT JSON
Version 0.9.5 PyPI version JSON
download
home_pagehttps://github.com/PythonOT/POT
SummaryPython Optimal Transport Library
upload_time2024-11-07 10:05:05
maintainerNone
docs_urlNone
authorRemi Flamary, Nicolas Courty, Cédric Vincent-Cuaz, POT Contributors
requires_python>=3.7
licenseMIT
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # POT: Python Optimal Transport

[![PyPI version](https://badge.fury.io/py/POT.svg)](https://badge.fury.io/py/POT)
[![Anaconda Cloud](https://anaconda.org/conda-forge/pot/badges/version.svg)](https://anaconda.org/conda-forge/pot)
[![Build Status](https://github.com/PythonOT/POT/actions/workflows/build_tests.yml/badge.svg)](https://github.com/PythonOT/POT/actions)
[![Codecov Status](https://codecov.io/gh/PythonOT/POT/branch/master/graph/badge.svg)](https://codecov.io/gh/PythonOT/POT)
[![Downloads](https://static.pepy.tech/badge/pot)](https://pepy.tech/project/pot)
[![Anaconda downloads](https://anaconda.org/conda-forge/pot/badges/downloads.svg)](https://anaconda.org/conda-forge/pot)
[![License](https://anaconda.org/conda-forge/pot/badges/license.svg)](https://github.com/PythonOT/POT/blob/master/LICENSE)

This open source Python library provides several solvers for optimization
problems related to Optimal Transport for signal, image processing and machine
learning.

Website and documentation: [https://PythonOT.github.io/](https://PythonOT.github.io/)

Source Code (MIT): [https://github.com/PythonOT/POT](https://github.com/PythonOT/POT)

POT provides the following generic OT solvers (links to examples):

* [OT Network Simplex solver](https://pythonot.github.io/auto_examples/plot_OT_1D.html) for the linear program/ Earth Movers Distance [1] .
* [Conditional gradient](https://pythonot.github.io/auto_examples/plot_optim_OTreg.html) [6] and [Generalized conditional gradient](https://pythonot.github.io/auto_examples/plot_optim_OTreg.html) for regularized OT [7].
* Entropic regularization OT solver with [Sinkhorn Knopp
  Algorithm](https://pythonot.github.io/auto_examples/plot_OT_1D.html) [2] ,
  stabilized version [9] [10] [34], lazy CPU/GPU solver from geomloss [60] [61], greedy Sinkhorn [22] and [Screening
  Sinkhorn [26]
  ](https://pythonot.github.io/auto_examples/plot_screenkhorn_1D.html).
* Bregman projections for [Wasserstein barycenter](https://pythonot.github.io/auto_examples/barycenters/plot_barycenter_lp_vs_entropic.html) [3], [convolutional barycenter](https://pythonot.github.io/auto_examples/barycenters/plot_convolutional_barycenter.html) [21]  and unmixing [4].
* Sinkhorn divergence [23] and entropic regularization OT from empirical data.
* Debiased Sinkhorn barycenters [Sinkhorn divergence barycenter](https://pythonot.github.io/auto_examples/barycenters/plot_debiased_barycenter.html) [37]
* [Smooth optimal transport solvers](https://pythonot.github.io/auto_examples/plot_OT_1D_smooth.html) (dual and semi-dual) for KL and squared L2 regularizations [17].
* Weak OT solver between empirical distributions [39]
* Non regularized [Wasserstein barycenters [16] ](https://pythonot.github.io/auto_examples/barycenters/plot_barycenter_lp_vs_entropic.html) with LP solver (only small scale).
* [Gromov-Wasserstein distances](https://pythonot.github.io/auto_examples/gromov/plot_gromov.html) and [GW barycenters](https://pythonot.github.io/auto_examples/gromov/plot_gromov_barycenter.html)  (exact [13] and regularized [12,51]), differentiable using gradients from Graph Dictionary Learning [38]
 * [Fused-Gromov-Wasserstein distances solver](https://pythonot.github.io/auto_examples/gromov/plot_fgw.html#sphx-glr-auto-examples-plot-fgw-py) and [FGW barycenters](https://pythonot.github.io/auto_examples/gromov/plot_barycenter_fgw.html) (exact [24] and regularized [12,51]).
* [Stochastic
  solver](https://pythonot.github.io/auto_examples/others/plot_stochastic.html) and
  [differentiable losses](https://pythonot.github.io/auto_examples/backends/plot_stoch_continuous_ot_pytorch.html) for
  Large-scale Optimal Transport (semi-dual problem [18] and dual problem [19])
* [Sampled solver of Gromov Wasserstein](https://pythonot.github.io/auto_examples/gromov/plot_gromov.html) for large-scale problem with any loss functions [33]
* Non regularized [free support Wasserstein barycenters](https://pythonot.github.io/auto_examples/barycenters/plot_free_support_barycenter.html) [20].
* [One dimensional Unbalanced OT](https://pythonot.github.io/auto_examples/unbalanced-partial/plot_UOT_1D.html) with KL relaxation and [barycenter](https://pythonot.github.io/auto_examples/unbalanced-partial/plot_UOT_barycenter_1D.html) [10, 25]. Also [exact unbalanced OT](https://pythonot.github.io/auto_examples/unbalanced-partial/plot_unbalanced_ot.html) with KL and quadratic regularization and the [regularization path of UOT](https://pythonot.github.io/auto_examples/unbalanced-partial/plot_regpath.html) [41]
* [Partial Wasserstein and Gromov-Wasserstein](https://pythonot.github.io/auto_examples/unbalanced-partial/plot_partial_wass_and_gromov.html) (exact [29] and entropic [3]
  formulations).
* [Sliced Wasserstein](https://pythonot.github.io/auto_examples/sliced-wasserstein/plot_variance.html) [31, 32] and Max-sliced Wasserstein [35] that can be used for gradient flows [36].
* [Wasserstein distance on the circle](https://pythonot.github.io/auto_examples/plot_compute_wasserstein_circle.html) [44, 45]
* [Spherical Sliced Wasserstein](https://pythonot.github.io/auto_examples/sliced-wasserstein/plot_variance_ssw.html) [46]
* [Graph Dictionary Learning solvers](https://pythonot.github.io/auto_examples/gromov/plot_gromov_wasserstein_dictionary_learning.html) [38].
* [Semi-relaxed (Fused) Gromov-Wasserstein divergences](https://pythonot.github.io/auto_examples/gromov/plot_semirelaxed_fgw.html) with corresponding [barycenter solvers](https://pythonot.github.io/auto_examples/gromov/plot_semirelaxed_gromov_wasserstein_barycenter.hmtl) (exact and regularized [48]).
* [Quantized (Fused) Gromov-Wasserstein distances](https://pythonot.github.io/auto_examples/gromov/plot_quantized_gromov_wasserstein.html) [68].
* [Efficient Discrete Multi Marginal Optimal Transport Regularization](https://pythonot.github.io/auto_examples/others/plot_demd_gradient_minimize.html) [50].
* [Several backends](https://pythonot.github.io/quickstart.html#solving-ot-with-multiple-backends) for easy use of POT with  [Pytorch](https://pytorch.org/)/[jax](https://github.com/google/jax)/[Numpy](https://numpy.org/)/[Cupy](https://cupy.dev/)/[Tensorflow](https://www.tensorflow.org/) arrays.
* [Smooth Strongly Convex Nearest Brenier Potentials](https://pythonot.github.io/auto_examples/others/plot_SSNB.html#sphx-glr-auto-examples-others-plot-ssnb-py) [58], with an extension to bounding potentials using [59].
* Gaussian Mixture Model OT [69]
* [Co-Optimal Transport](https://pythonot.github.io/auto_examples/others/plot_COOT.html) [49] and
[unbalanced Co-Optimal Transport](https://pythonot.github.io/auto_examples/others/plot_learning_weights_with_COOT.html) [71].
* Fused unbalanced Gromov-Wasserstein [70].

POT provides the following Machine Learning related solvers:

* [Optimal transport for domain
  adaptation](https://pythonot.github.io/auto_examples/domain-adaptation/plot_otda_classes.html)
  with [group lasso regularization](https://pythonot.github.io/auto_examples/domain-adaptation/plot_otda_classes.html),   [Laplacian regularization](https://pythonot.github.io/auto_examples/domain-adaptation/plot_otda_laplacian.html) [5] [30] and [semi
  supervised setting](https://pythonot.github.io/auto_examples/domain-adaptation/plot_otda_semi_supervised.html).
* [Linear OT mapping](https://pythonot.github.io/auto_examples/domain-adaptation/plot_otda_linear_mapping.html) [14] and [Joint OT mapping estimation](https://pythonot.github.io/auto_examples/domain-adaptation/plot_otda_mapping.html) [8].
* [Wasserstein Discriminant Analysis](https://pythonot.github.io/auto_examples/others/plot_WDA.html) [11] (requires autograd + pymanopt).
* [JCPOT algorithm for multi-source domain adaptation with target shift](https://pythonot.github.io/auto_examples/domain-adaptation/plot_otda_jcpot.html) [27].
* [Graph Neural Network OT layers TFGW](https://pythonot.github.io/auto_examples/gromov/plot_gnn_TFGW.html) [52] and TW (OT-GNN) [53]

Some other examples are available in the  [documentation](https://pythonot.github.io/auto_examples/index.html).

#### Using and citing the toolbox

If you use this toolbox in your research and find it useful, please cite POT
using the following reference from our [JMLR paper](https://jmlr.org/papers/v22/20-451.html):

    Rémi Flamary, Nicolas Courty, Alexandre Gramfort, Mokhtar Z. Alaya, Aurélie Boisbunon, Stanislas Chambon, Laetitia Chapel, Adrien Corenflos, Kilian Fatras, Nemo Fournier, Léo Gautheron, Nathalie T.H. Gayraud, Hicham Janati, Alain Rakotomamonjy, Ievgen Redko, Antoine Rolet, Antony Schutz, Vivien Seguy, Danica J. Sutherland, Romain Tavenard, Alexander Tong, Titouan Vayer,
    POT Python Optimal Transport library,
    Journal of Machine Learning Research, 22(78):1−8, 2021.
    Website: https://pythonot.github.io/

In Bibtex format:

```bibtex
@article{flamary2021pot,
  author  = {R{\'e}mi Flamary and Nicolas Courty and Alexandre Gramfort and Mokhtar Z. Alaya and Aur{\'e}lie Boisbunon and Stanislas Chambon and Laetitia Chapel and Adrien Corenflos and Kilian Fatras and Nemo Fournier and L{\'e}o Gautheron and Nathalie T.H. Gayraud and Hicham Janati and Alain Rakotomamonjy and Ievgen Redko and Antoine Rolet and Antony Schutz and Vivien Seguy and Danica J. Sutherland and Romain Tavenard and Alexander Tong and Titouan Vayer},
  title   = {POT: Python Optimal Transport},
  journal = {Journal of Machine Learning Research},
  year    = {2021},
  volume  = {22},
  number  = {78},
  pages   = {1-8},
  url     = {http://jmlr.org/papers/v22/20-451.html}
}
```

## Installation

The library has been tested on Linux, MacOSX and Windows. It requires a C++ compiler for building/installing the EMD solver and relies on the following Python modules:

- Numpy (>=1.16)
- Scipy (>=1.0)
- Cython (>=0.23) (build only, not necessary when installing from pip or conda)

#### Pip installation


You can install the toolbox through PyPI with:

```console
pip install POT
```

or get the very latest version by running:

```console
pip install -U https://github.com/PythonOT/POT/archive/master.zip # with --user for user install (no root)
```

Optional dependencies may be installed with
```console
pip install POT[all]
```
Note that this installs `cvxopt`, which is licensed under GPL 3.0. Alternatively, if you cannot use GPL-licensed software, the specific optional dependencies may be installed individually, or per-submodule. The available optional installations are `backend-jax, backend-tf, backend-torch, cvxopt, dr, gnn, all`.

#### Anaconda installation with conda-forge

If you use the Anaconda python distribution, POT is available in [conda-forge](https://conda-forge.org). To install it and the required dependencies:

```console
conda install -c conda-forge pot
```

#### Post installation check
After a correct installation, you should be able to import the module without errors:

```python
import ot
```

Note that for easier access the module is named `ot` instead of `pot`.


### Dependencies

Some sub-modules require additional dependencies which are discussed below

* **ot.dr** (Wasserstein dimensionality reduction) depends on autograd and pymanopt that can be installed with:

```shell
pip install pymanopt autograd
```


## Examples

### Short examples

* Import the toolbox

```python
import ot
```

* Compute Wasserstein distances

```python
# a,b are 1D histograms (sum to 1 and positive)
# M is the ground cost matrix
Wd = ot.emd2(a, b, M) # exact linear program
Wd_reg = ot.sinkhorn2(a, b, M, reg) # entropic regularized OT
# if b is a matrix compute all distances to a and return a vector
```

* Compute OT matrix

```python
# a,b are 1D histograms (sum to 1 and positive)
# M is the ground cost matrix
T = ot.emd(a, b, M) # exact linear program
T_reg = ot.sinkhorn(a, b, M, reg) # entropic regularized OT
```

* Compute Wasserstein barycenter

```python
# A is a n*d matrix containing d  1D histograms
# M is the ground cost matrix
ba = ot.barycenter(A, M, reg) # reg is regularization parameter
```

### Examples and Notebooks

The examples folder contain several examples and use case for the library. The full documentation with examples and output is available on [https://PythonOT.github.io/](https://PythonOT.github.io/).


## Acknowledgements

This toolbox has been created by

* [Rémi Flamary](https://remi.flamary.com/)
* [Nicolas Courty](http://people.irisa.fr/Nicolas.Courty/)

It is currently maintained by

* [Rémi Flamary](https://remi.flamary.com/)
* [Cédric Vincent-Cuaz](https://cedricvincentcuaz.github.io/)

The numerous contributors to this library are listed [here](CONTRIBUTORS.md).

POT has benefited from the financing or manpower from the following partners:

<img src="https://pythonot.github.io/master/_static/images/logo_anr.jpg" alt="ANR" style="height:60px;"/><img src="https://pythonot.github.io/master/_static/images/logo_cnrs.jpg" alt="CNRS" style="height:60px;"/><img src="https://pythonot.github.io/master/_static/images/logo_3ia.jpg" alt="3IA" style="height:60px;"/><img src="https://pythonot.github.io/master/_static/images/logo_hiparis.png" alt="Hi!PARIS" style="height:60px;"/>



## Contributions and code of conduct

Every contribution is welcome and should respect the [contribution guidelines](https://pythonot.github.io/master/contributing.html). Each member of the project is expected to follow the [code of conduct](https://pythonot.github.io/master/code_of_conduct.html).

## Support

You can ask questions and join the development discussion:

* On the POT [slack channel](https://pot-toolbox.slack.com)
* On the POT [gitter channel](https://gitter.im/PythonOT/community)
* On the POT [mailing list](https://mail.python.org/mm3/mailman3/lists/pot.python.org/)

You can also post bug reports and feature requests in Github issues. Make sure to read our [guidelines](.github/CONTRIBUTING.md) first.

## References

[1] Bonneel, N., Van De Panne, M., Paris, S., & Heidrich, W. (2011, December). [Displacement interpolation using Lagrangian mass transport](https://people.csail.mit.edu/sparis/publi/2011/sigasia/Bonneel_11_Displacement_Interpolation.pdf). In ACM Transactions on Graphics (TOG) (Vol. 30, No. 6, p. 158). ACM.

[2] Cuturi, M. (2013). [Sinkhorn distances: Lightspeed computation of optimal transport](https://arxiv.org/pdf/1306.0895.pdf). In Advances in Neural Information Processing Systems (pp. 2292-2300).

[3] Benamou, J. D., Carlier, G., Cuturi, M., Nenna, L., & Peyré, G. (2015). [Iterative Bregman projections for regularized transportation problems](https://arxiv.org/pdf/1412.5154.pdf). SIAM Journal on Scientific Computing, 37(2), A1111-A1138.

[4] S. Nakhostin, N. Courty, R. Flamary, D. Tuia, T. Corpetti, [Supervised planetary unmixing with optimal transport](https://hal.archives-ouvertes.fr/hal-01377236/document), Workshop on Hyperspectral Image and Signal Processing : Evolution in Remote Sensing (WHISPERS), 2016.

[5] N. Courty; R. Flamary; D. Tuia; A. Rakotomamonjy, [Optimal Transport for Domain Adaptation](https://arxiv.org/pdf/1507.00504.pdf), in IEEE Transactions on Pattern Analysis and Machine Intelligence , vol.PP, no.99, pp.1-1

[6] Ferradans, S., Papadakis, N., Peyré, G., & Aujol, J. F. (2014). [Regularized discrete optimal transport](https://arxiv.org/pdf/1307.5551.pdf). SIAM Journal on Imaging Sciences, 7(3), 1853-1882.

[7] Rakotomamonjy, A., Flamary, R., & Courty, N. (2015). [Generalized conditional gradient: analysis of convergence and applications](https://arxiv.org/pdf/1510.06567.pdf). arXiv preprint arXiv:1510.06567.

[8] M. Perrot, N. Courty, R. Flamary, A. Habrard (2016), [Mapping estimation for discrete optimal transport](http://remi.flamary.com/biblio/perrot2016mapping.pdf), Neural Information Processing Systems (NIPS).

[9] Schmitzer, B. (2016). [Stabilized Sparse Scaling Algorithms for Entropy Regularized Transport Problems](https://arxiv.org/pdf/1610.06519.pdf). arXiv preprint arXiv:1610.06519.

[10] Chizat, L., Peyré, G., Schmitzer, B., & Vialard, F. X. (2016). [Scaling algorithms for unbalanced transport problems](https://arxiv.org/pdf/1607.05816.pdf). arXiv preprint arXiv:1607.05816.

[11] Flamary, R., Cuturi, M., Courty, N., & Rakotomamonjy, A. (2016). [Wasserstein Discriminant Analysis](https://arxiv.org/pdf/1608.08063.pdf). arXiv preprint arXiv:1608.08063.

[12] Gabriel Peyré, Marco Cuturi, and Justin Solomon (2016), [Gromov-Wasserstein averaging of kernel and distance matrices](http://proceedings.mlr.press/v48/peyre16.html)  International Conference on Machine Learning (ICML).

[13] Mémoli, Facundo (2011). [Gromov–Wasserstein distances and the metric approach to object matching](https://media.adelaide.edu.au/acvt/Publications/2011/2011-Gromov%E2%80%93Wasserstein%20Distances%20and%20the%20Metric%20Approach%20to%20Object%20Matching.pdf). Foundations of computational mathematics 11.4 : 417-487.

[14] Knott, M. and Smith, C. S. (1984).[On the optimal mapping of distributions](https://link.springer.com/article/10.1007/BF00934745), Journal of Optimization Theory and Applications Vol 43.

[15] Peyré, G., & Cuturi, M. (2018). [Computational Optimal Transport](https://arxiv.org/pdf/1803.00567.pdf) .

[16] Agueh, M., & Carlier, G. (2011). [Barycenters in the Wasserstein space](https://hal.archives-ouvertes.fr/hal-00637399/document). SIAM Journal on Mathematical Analysis, 43(2), 904-924.

[17] Blondel, M., Seguy, V., & Rolet, A. (2018). [Smooth and Sparse Optimal Transport](https://arxiv.org/abs/1710.06276). Proceedings of the Twenty-First International Conference on Artificial Intelligence and Statistics (AISTATS).

[18] Genevay, A., Cuturi, M., Peyré, G. & Bach, F. (2016) [Stochastic Optimization for Large-scale Optimal Transport](https://arxiv.org/abs/1605.08527). Advances in Neural Information Processing Systems (2016).

[19] Seguy, V., Bhushan Damodaran, B., Flamary, R., Courty, N., Rolet, A.& Blondel, M. [Large-scale Optimal Transport and Mapping Estimation](https://arxiv.org/pdf/1711.02283.pdf). International Conference on Learning Representation (2018)

[20] Cuturi, M. and Doucet, A. (2014) [Fast Computation of Wasserstein Barycenters](http://proceedings.mlr.press/v32/cuturi14.html). International Conference in Machine Learning

[21] Solomon, J., De Goes, F., Peyré, G., Cuturi, M., Butscher, A., Nguyen, A. & Guibas, L. (2015). [Convolutional wasserstein distances: Efficient optimal transportation on geometric domains](https://dl.acm.org/citation.cfm?id=2766963). ACM Transactions on Graphics (TOG), 34(4), 66.

[22] J. Altschuler, J.Weed, P. Rigollet, (2017) [Near-linear time approximation algorithms for optimal transport via Sinkhorn iteration](https://papers.nips.cc/paper/6792-near-linear-time-approximation-algorithms-for-optimal-transport-via-sinkhorn-iteration.pdf), Advances in Neural Information Processing Systems (NIPS) 31

[23] Aude, G., Peyré, G., Cuturi, M., [Learning Generative Models with Sinkhorn Divergences](https://arxiv.org/abs/1706.00292), Proceedings of the Twenty-First International Conference on Artificial Intelligence and Statistics, (AISTATS) 21, 2018

[24] Vayer, T., Chapel, L., Flamary, R., Tavenard, R. and Courty, N. (2019). [Optimal Transport for structured data with application on graphs](http://proceedings.mlr.press/v97/titouan19a.html) Proceedings of the 36th International Conference on Machine Learning (ICML).

[25] Frogner C., Zhang C., Mobahi H., Araya-Polo M., Poggio T. (2015). [Learning with a Wasserstein Loss](http://cbcl.mit.edu/wasserstein/)  Advances in Neural Information Processing Systems (NIPS).

[26] Alaya M. Z., Bérar M., Gasso G., Rakotomamonjy A. (2019). [Screening Sinkhorn Algorithm for Regularized Optimal Transport](https://papers.nips.cc/paper/9386-screening-sinkhorn-algorithm-for-regularized-optimal-transport), Advances in Neural Information Processing Systems 33 (NeurIPS).

[27] Redko I., Courty N., Flamary R., Tuia D. (2019). [Optimal Transport for Multi-source Domain Adaptation under Target Shift](http://proceedings.mlr.press/v89/redko19a.html), Proceedings of the Twenty-Second International Conference on Artificial Intelligence and Statistics (AISTATS) 22, 2019.

[28] Caffarelli, L. A., McCann, R. J. (2010). [Free boundaries in optimal transport and Monge-Ampere obstacle problems](http://www.math.toronto.edu/~mccann/papers/annals2010.pdf), Annals of mathematics, 673-730.

[29] Chapel, L., Alaya, M., Gasso, G. (2020). [Partial Optimal Transport with Applications on Positive-Unlabeled Learning](https://arxiv.org/abs/2002.08276), Advances in Neural Information Processing Systems (NeurIPS), 2020.

[30] Flamary R., Courty N., Tuia D., Rakotomamonjy A. (2014). [Optimal transport with Laplacian regularization: Applications to domain adaptation and shape matching](https://remi.flamary.com/biblio/flamary2014optlaplace.pdf), NIPS Workshop on Optimal Transport and Machine Learning OTML, 2014.

[31] Bonneel, Nicolas, et al. [Sliced and radon wasserstein barycenters of measures](https://perso.liris.cnrs.fr/nicolas.bonneel/WassersteinSliced-JMIV.pdf), Journal of Mathematical Imaging and Vision 51.1 (2015): 22-45

[32] Huang, M., Ma S., Lai, L. (2021). [A Riemannian Block Coordinate Descent Method for Computing the Projection Robust Wasserstein Distance](http://proceedings.mlr.press/v139/huang21e.html), Proceedings of the 38th International Conference on Machine Learning (ICML).

[33] Kerdoncuff T., Emonet R., Marc S. [Sampled Gromov Wasserstein](https://hal.archives-ouvertes.fr/hal-03232509/document), Machine Learning Journal (MJL), 2021

[34] Feydy, J., Séjourné, T., Vialard, F. X., Amari, S. I., Trouvé, A., & Peyré, G. (2019, April). [Interpolating between optimal transport and MMD using Sinkhorn divergences](http://proceedings.mlr.press/v89/feydy19a/feydy19a.pdf). In The 22nd International Conference on Artificial Intelligence and Statistics (pp. 2681-2690). PMLR.

[35] Deshpande, I., Hu, Y. T., Sun, R., Pyrros, A., Siddiqui, N., Koyejo, S., ... & Schwing, A. G. (2019). [Max-sliced wasserstein distance and its use for gans](https://openaccess.thecvf.com/content_CVPR_2019/papers/Deshpande_Max-Sliced_Wasserstein_Distance_and_Its_Use_for_GANs_CVPR_2019_paper.pdf). In Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (pp. 10648-10656).

[36] Liutkus, A., Simsekli, U., Majewski, S., Durmus, A., & Stöter, F. R.
(2019, May). [Sliced-Wasserstein flows: Nonparametric generative modeling
via optimal transport and diffusions](http://proceedings.mlr.press/v97/liutkus19a/liutkus19a.pdf). In International Conference on
Machine Learning (pp. 4104-4113). PMLR.

[37] Janati, H., Cuturi, M., Gramfort, A. [Debiased sinkhorn barycenters](http://proceedings.mlr.press/v119/janati20a/janati20a.pdf) Proceedings of the 37th International
Conference on Machine Learning, PMLR 119:4692-4701, 2020

[38] C. Vincent-Cuaz, T. Vayer, R. Flamary, M. Corneli, N. Courty, [Online Graph
Dictionary Learning](https://arxiv.org/pdf/2102.06555.pdf), International Conference on Machine Learning (ICML), 2021.

[39] Gozlan, N., Roberto, C., Samson, P. M., & Tetali, P. (2017). [Kantorovich duality for general transport costs and applications](https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.712.1825&rep=rep1&type=pdf). Journal of Functional Analysis, 273(11), 3327-3405.

[40] Forrow, A., Hütter, J. C., Nitzan, M., Rigollet, P., Schiebinger, G., & Weed, J. (2019, April). [Statistical optimal transport via factored couplings](http://proceedings.mlr.press/v89/forrow19a/forrow19a.pdf). In The 22nd International Conference on Artificial Intelligence and Statistics (pp. 2454-2465). PMLR.

[41] Chapel*, L., Flamary*, R., Wu, H., Févotte, C., Gasso, G. (2021). [Unbalanced Optimal Transport through Non-negative Penalized Linear Regression](https://proceedings.neurips.cc/paper/2021/file/c3c617a9b80b3ae1ebd868b0017cc349-Paper.pdf) Advances in Neural Information Processing Systems (NeurIPS), 2020. (Two first co-authors)

[42] Delon, J., Gozlan, N., and Saint-Dizier, A. [Generalized Wasserstein barycenters between probability measures living on different subspaces](https://arxiv.org/pdf/2105.09755). arXiv preprint arXiv:2105.09755, 2021.

[43]  Álvarez-Esteban, Pedro C., et al. [A fixed-point approach to barycenters in Wasserstein space.](https://arxiv.org/pdf/1511.05355.pdf) Journal of Mathematical Analysis and Applications 441.2 (2016): 744-762.

[44] Delon, Julie, Julien Salomon, and Andrei Sobolevski. [Fast transport optimization for Monge costs on the circle.](https://arxiv.org/abs/0902.3527) SIAM Journal on Applied Mathematics 70.7 (2010): 2239-2258.

[45] Hundrieser, Shayan, Marcel Klatt, and Axel Munk. [The statistics of circular optimal transport.](https://arxiv.org/abs/2103.15426) Directional Statistics for Innovative Applications: A Bicentennial Tribute to Florence Nightingale. Singapore: Springer Nature Singapore, 2022. 57-82.

[46] Bonet, C., Berg, P., Courty, N., Septier, F., Drumetz, L., & Pham, M. T. (2023). [Spherical Sliced-Wasserstein](https://openreview.net/forum?id=jXQ0ipgMdU). International Conference on Learning Representations.

[47] Chowdhury, S., & Mémoli, F. (2019). [The gromov–wasserstein distance between networks and stable network invariants](https://academic.oup.com/imaiai/article/8/4/757/5627736). Information and Inference: A Journal of the IMA, 8(4), 757-787.

[48] Cédric Vincent-Cuaz, Rémi Flamary, Marco Corneli, Titouan Vayer, Nicolas Courty (2022). [Semi-relaxed Gromov-Wasserstein divergence and applications on graphs](https://openreview.net/pdf?id=RShaMexjc-x). International Conference on Learning Representations (ICLR), 2022.

[49] Redko, I., Vayer, T., Flamary, R., and Courty, N. (2020). [CO-Optimal Transport](https://proceedings.neurips.cc/paper/2020/file/cc384c68ad503482fb24e6d1e3b512ae-Paper.pdf). Advances in Neural Information Processing Systems, 33.

[50] Liu, T., Puigcerver, J., & Blondel, M. (2023). [Sparsity-constrained optimal transport](https://openreview.net/forum?id=yHY9NbQJ5BP). Proceedings of the Eleventh International Conference on Learning Representations (ICLR).

[51] Xu, H., Luo, D., Zha, H., & Duke, L. C. (2019). [Gromov-wasserstein learning for graph matching and node embedding](http://proceedings.mlr.press/v97/xu19b.html). In International Conference on Machine Learning (ICML), 2019.

[52] Collas, A., Vayer, T., Flamary, F., & Breloy, A. (2023). [Entropic Wasserstein Component Analysis](https://arxiv.org/abs/2303.05119). ArXiv.

[53] C. Vincent-Cuaz, R. Flamary, M. Corneli, T. Vayer, N. Courty (2022). [Template based graph neural network with optimal transport distances](https://papers.nips.cc/paper_files/paper/2022/file/4d3525bc60ba1adc72336c0392d3d902-Paper-Conference.pdf). Advances in Neural Information Processing Systems, 35.

[54] Bécigneul, G., Ganea, O. E., Chen, B., Barzilay, R., & Jaakkola, T. S. (2020). [Optimal transport graph neural networks](https://arxiv.org/pdf/2006.04804).

[55] Ronak Mehta, Jeffery Kline, Vishnu Suresh Lokhande, Glenn Fung, & Vikas Singh (2023). [Efficient Discrete Multi Marginal Optimal Transport Regularization](https://openreview.net/forum?id=R98ZfMt-jE). In The Eleventh International Conference on Learning Representations (ICLR).

[56] Jeffery Kline. [Properties of the d-dimensional earth mover’s problem](https://www.sciencedirect.com/science/article/pii/S0166218X19301441). Discrete Applied Mathematics, 265: 128–141, 2019.

[57] Delon, J., Desolneux, A., & Salmona, A. (2022). [Gromov–Wasserstein
distances between Gaussian distributions](https://hal.science/hal-03197398v2/file/main.pdf). Journal of Applied Probability, 59(4),
1178-1198.

[58] Paty F-P., d’Aspremont 1., & Cuturi M. (2020). [Regularity as regularization:Smooth and strongly convex brenier potentials in optimal transport.](http://proceedings.mlr.press/v108/paty20a/paty20a.pdf) In International Conference on Artificial Intelligence and Statistics, pages 1222–1232. PMLR, 2020.

[59] Taylor A. B. (2017). [Convex interpolation and performance estimation of first-order methods for convex optimization.](https://dial.uclouvain.be/pr/boreal/object/boreal%3A182881/datastream/PDF_01/view) PhD thesis, Catholic University of Louvain, Louvain-la-Neuve, Belgium, 2017.

[60] Feydy, J., Roussillon, P., Trouvé, A., & Gori, P. (2019). [Fast and scalable optimal transport for brain tractograms](https://arxiv.org/pdf/2107.02010.pdf). In Medical Image Computing and Computer Assisted Intervention–MICCAI 2019: 22nd International Conference, Shenzhen, China, October 13–17, 2019, Proceedings, Part III 22 (pp. 636-644). Springer International Publishing.

[61] Charlier, B., Feydy, J., Glaunes, J. A., Collin, F. D., & Durif, G. (2021). [Kernel operations on the gpu, with autodiff, without memory overflows](https://www.jmlr.org/papers/volume22/20-275/20-275.pdf). The Journal of Machine Learning Research, 22(1), 3457-3462.

[62] H. Van Assel, C. Vincent-Cuaz, T. Vayer, R. Flamary, N. Courty (2023). [Interpolating between Clustering and Dimensionality Reduction with Gromov-Wasserstein](https://arxiv.org/pdf/2310.03398.pdf). NeurIPS 2023 Workshop Optimal Transport and Machine Learning.

[63] Li, J., Tang, J., Kong, L., Liu, H., Li, J., So, A. M. C., & Blanchet, J. (2022). [A Convergent Single-Loop Algorithm for Relaxation of Gromov-Wasserstein in Graph Data](https://openreview.net/pdf?id=0jxPyVWmiiF). In The Eleventh International Conference on Learning Representations.

[64] Ma, X., Chu, X., Wang, Y., Lin, Y., Zhao, J., Ma, L., & Zhu, W. (2023). [Fused Gromov-Wasserstein Graph Mixup for Graph-level Classifications](https://openreview.net/pdf?id=uqkUguNu40). In Thirty-seventh Conference on Neural Information Processing Systems.

[65] Scetbon, M., Cuturi, M., & Peyré, G. (2021). [Low-Rank Sinkhorn Factorization](https://arxiv.org/pdf/2103.04737.pdf).

[66] Pooladian, Aram-Alexandre, and Jonathan Niles-Weed. [Entropic estimation of optimal transport maps](https://arxiv.org/pdf/2109.12004.pdf). arXiv preprint arXiv:2109.12004 (2021).

[67] Scetbon, M., Peyré, G. & Cuturi, M. (2022). [Linear-Time Gromov-Wasserstein Distances using Low Rank Couplings and Costs](https://proceedings.mlr.press/v162/scetbon22b/scetbon22b.pdf). In International Conference on Machine Learning (ICML), 2022.

[68] Chowdhury, S., Miller, D., & Needham, T. (2021). [Quantized gromov-wasserstein](https://link.springer.com/chapter/10.1007/978-3-030-86523-8_49). ECML PKDD 2021. Springer International Publishing.

[69] Delon, J., & Desolneux, A. (2020). [A Wasserstein-type distance in the space of Gaussian mixture models](https://epubs.siam.org/doi/abs/10.1137/19M1301047). SIAM Journal on Imaging Sciences, 13(2), 936-970.

[70] A. Thual, H. Tran, T. Zemskova, N. Courty, R. Flamary, S. Dehaene
& B. Thirion (2022). [Aligning individual brains with Fused Unbalanced Gromov-Wasserstein.](https://proceedings.neurips.cc/paper_files/paper/2022/file/8906cac4ca58dcaf17e97a0486ad57ca-Paper-Conference.pdf). Neural Information Processing Systems (NeurIPS).

[71] H. Tran, H. Janati, N. Courty, R. Flamary, I. Redko, P. Demetci & R. Singh (2023). [Unbalanced Co-Optimal Transport](https://dl.acm.org/doi/10.1609/aaai.v37i8.26193). AAAI Conference on
Artificial Intelligence.

[72] Thibault Séjourné, François-Xavier Vialard, and Gabriel Peyré (2021). [The Unbalanced Gromov Wasserstein Distance: Conic Formulation and Relaxation](https://proceedings.neurips.cc/paper/2021/file/4990974d150d0de5e6e15a1454fe6b0f-Paper.pdf). Neural Information Processing Systems (NeurIPS).

[73] Séjourné, T., Vialard, F. X., & Peyré, G. (2022). [Faster Unbalanced Optimal Transport: Translation Invariant Sinkhorn and 1-D Frank-Wolfe](https://proceedings.mlr.press/v151/sejourne22a.html). In International Conference on Artificial Intelligence and Statistics (pp. 4995-5021). PMLR.

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/PythonOT/POT",
    "name": "POT",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": null,
    "keywords": null,
    "author": "Remi Flamary, Nicolas Courty, C\u00e9dric Vincent-Cuaz, POT Contributors",
    "author_email": "remi.flamary@gmail.com, ncourty@gmail.com, cedvincentcuaz@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/c1/40/3e0c8dd88328d944f9d82b30cafd2a1c911bddff0b8bccc8dc9dd5e45b7c/pot-0.9.5.tar.gz",
    "platform": "linux",
    "description": "# POT: Python Optimal Transport\n\n[![PyPI version](https://badge.fury.io/py/POT.svg)](https://badge.fury.io/py/POT)\n[![Anaconda Cloud](https://anaconda.org/conda-forge/pot/badges/version.svg)](https://anaconda.org/conda-forge/pot)\n[![Build Status](https://github.com/PythonOT/POT/actions/workflows/build_tests.yml/badge.svg)](https://github.com/PythonOT/POT/actions)\n[![Codecov Status](https://codecov.io/gh/PythonOT/POT/branch/master/graph/badge.svg)](https://codecov.io/gh/PythonOT/POT)\n[![Downloads](https://static.pepy.tech/badge/pot)](https://pepy.tech/project/pot)\n[![Anaconda downloads](https://anaconda.org/conda-forge/pot/badges/downloads.svg)](https://anaconda.org/conda-forge/pot)\n[![License](https://anaconda.org/conda-forge/pot/badges/license.svg)](https://github.com/PythonOT/POT/blob/master/LICENSE)\n\nThis open source Python library provides several solvers for optimization\nproblems related to Optimal Transport for signal, image processing and machine\nlearning.\n\nWebsite and documentation: [https://PythonOT.github.io/](https://PythonOT.github.io/)\n\nSource Code (MIT): [https://github.com/PythonOT/POT](https://github.com/PythonOT/POT)\n\nPOT provides the following generic OT solvers (links to examples):\n\n* [OT Network Simplex solver](https://pythonot.github.io/auto_examples/plot_OT_1D.html) for the linear program/ Earth Movers Distance [1] .\n* [Conditional gradient](https://pythonot.github.io/auto_examples/plot_optim_OTreg.html) [6] and [Generalized conditional gradient](https://pythonot.github.io/auto_examples/plot_optim_OTreg.html) for regularized OT [7].\n* Entropic regularization OT solver with [Sinkhorn Knopp\n  Algorithm](https://pythonot.github.io/auto_examples/plot_OT_1D.html) [2] ,\n  stabilized version [9] [10] [34], lazy CPU/GPU solver from geomloss [60] [61], greedy Sinkhorn [22] and [Screening\n  Sinkhorn [26]\n  ](https://pythonot.github.io/auto_examples/plot_screenkhorn_1D.html).\n* Bregman projections for [Wasserstein barycenter](https://pythonot.github.io/auto_examples/barycenters/plot_barycenter_lp_vs_entropic.html) [3], [convolutional barycenter](https://pythonot.github.io/auto_examples/barycenters/plot_convolutional_barycenter.html) [21]  and unmixing [4].\n* Sinkhorn divergence [23] and entropic regularization OT from empirical data.\n* Debiased Sinkhorn barycenters [Sinkhorn divergence barycenter](https://pythonot.github.io/auto_examples/barycenters/plot_debiased_barycenter.html) [37]\n* [Smooth optimal transport solvers](https://pythonot.github.io/auto_examples/plot_OT_1D_smooth.html) (dual and semi-dual) for KL and squared L2 regularizations [17].\n* Weak OT solver between empirical distributions [39]\n* Non regularized [Wasserstein barycenters [16] ](https://pythonot.github.io/auto_examples/barycenters/plot_barycenter_lp_vs_entropic.html) with LP solver (only small scale).\n* [Gromov-Wasserstein distances](https://pythonot.github.io/auto_examples/gromov/plot_gromov.html) and [GW barycenters](https://pythonot.github.io/auto_examples/gromov/plot_gromov_barycenter.html)  (exact [13] and regularized [12,51]), differentiable using gradients from Graph Dictionary Learning [38]\n * [Fused-Gromov-Wasserstein distances solver](https://pythonot.github.io/auto_examples/gromov/plot_fgw.html#sphx-glr-auto-examples-plot-fgw-py) and [FGW barycenters](https://pythonot.github.io/auto_examples/gromov/plot_barycenter_fgw.html) (exact [24] and regularized [12,51]).\n* [Stochastic\n  solver](https://pythonot.github.io/auto_examples/others/plot_stochastic.html) and\n  [differentiable losses](https://pythonot.github.io/auto_examples/backends/plot_stoch_continuous_ot_pytorch.html) for\n  Large-scale Optimal Transport (semi-dual problem [18] and dual problem [19])\n* [Sampled solver of Gromov Wasserstein](https://pythonot.github.io/auto_examples/gromov/plot_gromov.html) for large-scale problem with any loss functions [33]\n* Non regularized [free support Wasserstein barycenters](https://pythonot.github.io/auto_examples/barycenters/plot_free_support_barycenter.html) [20].\n* [One dimensional Unbalanced OT](https://pythonot.github.io/auto_examples/unbalanced-partial/plot_UOT_1D.html) with KL relaxation and [barycenter](https://pythonot.github.io/auto_examples/unbalanced-partial/plot_UOT_barycenter_1D.html) [10, 25]. Also [exact unbalanced OT](https://pythonot.github.io/auto_examples/unbalanced-partial/plot_unbalanced_ot.html) with KL and quadratic regularization and the [regularization path of UOT](https://pythonot.github.io/auto_examples/unbalanced-partial/plot_regpath.html) [41]\n* [Partial Wasserstein and Gromov-Wasserstein](https://pythonot.github.io/auto_examples/unbalanced-partial/plot_partial_wass_and_gromov.html) (exact [29] and entropic [3]\n  formulations).\n* [Sliced Wasserstein](https://pythonot.github.io/auto_examples/sliced-wasserstein/plot_variance.html) [31, 32] and Max-sliced Wasserstein [35] that can be used for gradient flows [36].\n* [Wasserstein distance on the circle](https://pythonot.github.io/auto_examples/plot_compute_wasserstein_circle.html) [44, 45]\n* [Spherical Sliced Wasserstein](https://pythonot.github.io/auto_examples/sliced-wasserstein/plot_variance_ssw.html) [46]\n* [Graph Dictionary Learning solvers](https://pythonot.github.io/auto_examples/gromov/plot_gromov_wasserstein_dictionary_learning.html) [38].\n* [Semi-relaxed (Fused) Gromov-Wasserstein divergences](https://pythonot.github.io/auto_examples/gromov/plot_semirelaxed_fgw.html) with corresponding [barycenter solvers](https://pythonot.github.io/auto_examples/gromov/plot_semirelaxed_gromov_wasserstein_barycenter.hmtl) (exact and regularized [48]).\n* [Quantized (Fused) Gromov-Wasserstein distances](https://pythonot.github.io/auto_examples/gromov/plot_quantized_gromov_wasserstein.html) [68].\n* [Efficient Discrete Multi Marginal Optimal Transport Regularization](https://pythonot.github.io/auto_examples/others/plot_demd_gradient_minimize.html) [50].\n* [Several backends](https://pythonot.github.io/quickstart.html#solving-ot-with-multiple-backends) for easy use of POT with  [Pytorch](https://pytorch.org/)/[jax](https://github.com/google/jax)/[Numpy](https://numpy.org/)/[Cupy](https://cupy.dev/)/[Tensorflow](https://www.tensorflow.org/) arrays.\n* [Smooth Strongly Convex Nearest Brenier Potentials](https://pythonot.github.io/auto_examples/others/plot_SSNB.html#sphx-glr-auto-examples-others-plot-ssnb-py) [58], with an extension to bounding potentials using [59].\n* Gaussian Mixture Model OT [69]\n* [Co-Optimal Transport](https://pythonot.github.io/auto_examples/others/plot_COOT.html) [49] and\n[unbalanced Co-Optimal Transport](https://pythonot.github.io/auto_examples/others/plot_learning_weights_with_COOT.html) [71].\n* Fused unbalanced Gromov-Wasserstein [70].\n\nPOT provides the following Machine Learning related solvers:\n\n* [Optimal transport for domain\n  adaptation](https://pythonot.github.io/auto_examples/domain-adaptation/plot_otda_classes.html)\n  with [group lasso regularization](https://pythonot.github.io/auto_examples/domain-adaptation/plot_otda_classes.html),   [Laplacian regularization](https://pythonot.github.io/auto_examples/domain-adaptation/plot_otda_laplacian.html) [5] [30] and [semi\n  supervised setting](https://pythonot.github.io/auto_examples/domain-adaptation/plot_otda_semi_supervised.html).\n* [Linear OT mapping](https://pythonot.github.io/auto_examples/domain-adaptation/plot_otda_linear_mapping.html) [14] and [Joint OT mapping estimation](https://pythonot.github.io/auto_examples/domain-adaptation/plot_otda_mapping.html) [8].\n* [Wasserstein Discriminant Analysis](https://pythonot.github.io/auto_examples/others/plot_WDA.html) [11] (requires autograd + pymanopt).\n* [JCPOT algorithm for multi-source domain adaptation with target shift](https://pythonot.github.io/auto_examples/domain-adaptation/plot_otda_jcpot.html) [27].\n* [Graph Neural Network OT layers TFGW](https://pythonot.github.io/auto_examples/gromov/plot_gnn_TFGW.html) [52] and TW (OT-GNN) [53]\n\nSome other examples are available in the  [documentation](https://pythonot.github.io/auto_examples/index.html).\n\n#### Using and citing the toolbox\n\nIf you use this toolbox in your research and find it useful, please cite POT\nusing the following reference from our [JMLR paper](https://jmlr.org/papers/v22/20-451.html):\n\n    R\u00e9mi Flamary, Nicolas Courty, Alexandre Gramfort, Mokhtar Z. Alaya, Aur\u00e9lie Boisbunon, Stanislas Chambon, Laetitia Chapel, Adrien Corenflos, Kilian Fatras, Nemo Fournier, L\u00e9o Gautheron, Nathalie T.H. Gayraud, Hicham Janati, Alain Rakotomamonjy, Ievgen Redko, Antoine Rolet, Antony Schutz, Vivien Seguy, Danica J. Sutherland, Romain Tavenard, Alexander Tong, Titouan Vayer,\n    POT Python Optimal Transport library,\n    Journal of Machine Learning Research, 22(78):1\u22128, 2021.\n    Website: https://pythonot.github.io/\n\nIn Bibtex format:\n\n```bibtex\n@article{flamary2021pot,\n  author  = {R{\\'e}mi Flamary and Nicolas Courty and Alexandre Gramfort and Mokhtar Z. Alaya and Aur{\\'e}lie Boisbunon and Stanislas Chambon and Laetitia Chapel and Adrien Corenflos and Kilian Fatras and Nemo Fournier and L{\\'e}o Gautheron and Nathalie T.H. Gayraud and Hicham Janati and Alain Rakotomamonjy and Ievgen Redko and Antoine Rolet and Antony Schutz and Vivien Seguy and Danica J. Sutherland and Romain Tavenard and Alexander Tong and Titouan Vayer},\n  title   = {POT: Python Optimal Transport},\n  journal = {Journal of Machine Learning Research},\n  year    = {2021},\n  volume  = {22},\n  number  = {78},\n  pages   = {1-8},\n  url     = {http://jmlr.org/papers/v22/20-451.html}\n}\n```\n\n## Installation\n\nThe library has been tested on Linux, MacOSX and Windows. It requires a C++ compiler for building/installing the EMD solver and relies on the following Python modules:\n\n- Numpy (>=1.16)\n- Scipy (>=1.0)\n- Cython (>=0.23) (build only, not necessary when installing from pip or conda)\n\n#### Pip installation\n\n\nYou can install the toolbox through PyPI with:\n\n```console\npip install POT\n```\n\nor get the very latest version by running:\n\n```console\npip install -U https://github.com/PythonOT/POT/archive/master.zip # with --user for user install (no root)\n```\n\nOptional dependencies may be installed with\n```console\npip install POT[all]\n```\nNote that this installs `cvxopt`, which is licensed under GPL 3.0. Alternatively, if you cannot use GPL-licensed software, the specific optional dependencies may be installed individually, or per-submodule. The available optional installations are `backend-jax, backend-tf, backend-torch, cvxopt, dr, gnn, all`.\n\n#### Anaconda installation with conda-forge\n\nIf you use the Anaconda python distribution, POT is available in [conda-forge](https://conda-forge.org). To install it and the required dependencies:\n\n```console\nconda install -c conda-forge pot\n```\n\n#### Post installation check\nAfter a correct installation, you should be able to import the module without errors:\n\n```python\nimport ot\n```\n\nNote that for easier access the module is named `ot` instead of `pot`.\n\n\n### Dependencies\n\nSome sub-modules require additional dependencies which are discussed below\n\n* **ot.dr** (Wasserstein dimensionality reduction) depends on autograd and pymanopt that can be installed with:\n\n```shell\npip install pymanopt autograd\n```\n\n\n## Examples\n\n### Short examples\n\n* Import the toolbox\n\n```python\nimport ot\n```\n\n* Compute Wasserstein distances\n\n```python\n# a,b are 1D histograms (sum to 1 and positive)\n# M is the ground cost matrix\nWd = ot.emd2(a, b, M) # exact linear program\nWd_reg = ot.sinkhorn2(a, b, M, reg) # entropic regularized OT\n# if b is a matrix compute all distances to a and return a vector\n```\n\n* Compute OT matrix\n\n```python\n# a,b are 1D histograms (sum to 1 and positive)\n# M is the ground cost matrix\nT = ot.emd(a, b, M) # exact linear program\nT_reg = ot.sinkhorn(a, b, M, reg) # entropic regularized OT\n```\n\n* Compute Wasserstein barycenter\n\n```python\n# A is a n*d matrix containing d  1D histograms\n# M is the ground cost matrix\nba = ot.barycenter(A, M, reg) # reg is regularization parameter\n```\n\n### Examples and Notebooks\n\nThe examples folder contain several examples and use case for the library. The full documentation with examples and output is available on [https://PythonOT.github.io/](https://PythonOT.github.io/).\n\n\n## Acknowledgements\n\nThis toolbox has been created by\n\n* [R\u00e9mi Flamary](https://remi.flamary.com/)\n* [Nicolas Courty](http://people.irisa.fr/Nicolas.Courty/)\n\nIt is currently maintained by\n\n* [R\u00e9mi Flamary](https://remi.flamary.com/)\n* [C\u00e9dric Vincent-Cuaz](https://cedricvincentcuaz.github.io/)\n\nThe numerous contributors to this library are listed [here](CONTRIBUTORS.md).\n\nPOT has benefited from the financing or manpower from the following partners:\n\n<img src=\"https://pythonot.github.io/master/_static/images/logo_anr.jpg\" alt=\"ANR\" style=\"height:60px;\"/><img src=\"https://pythonot.github.io/master/_static/images/logo_cnrs.jpg\" alt=\"CNRS\" style=\"height:60px;\"/><img src=\"https://pythonot.github.io/master/_static/images/logo_3ia.jpg\" alt=\"3IA\" style=\"height:60px;\"/><img src=\"https://pythonot.github.io/master/_static/images/logo_hiparis.png\" alt=\"Hi!PARIS\" style=\"height:60px;\"/>\n\n\n\n## Contributions and code of conduct\n\nEvery contribution is welcome and should respect the [contribution guidelines](https://pythonot.github.io/master/contributing.html). Each member of the project is expected to follow the [code of conduct](https://pythonot.github.io/master/code_of_conduct.html).\n\n## Support\n\nYou can ask questions and join the development discussion:\n\n* On the POT [slack channel](https://pot-toolbox.slack.com)\n* On the POT [gitter channel](https://gitter.im/PythonOT/community)\n* On the POT [mailing list](https://mail.python.org/mm3/mailman3/lists/pot.python.org/)\n\nYou can also post bug reports and feature requests in Github issues. Make sure to read our [guidelines](.github/CONTRIBUTING.md) first.\n\n## References\n\n[1] Bonneel, N., Van De Panne, M., Paris, S., & Heidrich, W. (2011, December). [Displacement interpolation using Lagrangian mass transport](https://people.csail.mit.edu/sparis/publi/2011/sigasia/Bonneel_11_Displacement_Interpolation.pdf). In ACM Transactions on Graphics (TOG) (Vol. 30, No. 6, p. 158). ACM.\n\n[2] Cuturi, M. (2013). [Sinkhorn distances: Lightspeed computation of optimal transport](https://arxiv.org/pdf/1306.0895.pdf). In Advances in Neural Information Processing Systems (pp. 2292-2300).\n\n[3] Benamou, J. D., Carlier, G., Cuturi, M., Nenna, L., & Peyr\u00e9, G. (2015). [Iterative Bregman projections for regularized transportation problems](https://arxiv.org/pdf/1412.5154.pdf). SIAM Journal on Scientific Computing, 37(2), A1111-A1138.\n\n[4] S. Nakhostin, N. Courty, R. Flamary, D. Tuia, T. Corpetti, [Supervised planetary unmixing with optimal transport](https://hal.archives-ouvertes.fr/hal-01377236/document), Workshop on Hyperspectral Image and Signal Processing : Evolution in Remote Sensing (WHISPERS), 2016.\n\n[5] N. Courty; R. Flamary; D. Tuia; A. Rakotomamonjy, [Optimal Transport for Domain Adaptation](https://arxiv.org/pdf/1507.00504.pdf), in IEEE Transactions on Pattern Analysis and Machine Intelligence , vol.PP, no.99, pp.1-1\n\n[6] Ferradans, S., Papadakis, N., Peyr\u00e9, G., & Aujol, J. F. (2014). [Regularized discrete optimal transport](https://arxiv.org/pdf/1307.5551.pdf). SIAM Journal on Imaging Sciences, 7(3), 1853-1882.\n\n[7] Rakotomamonjy, A., Flamary, R., & Courty, N. (2015). [Generalized conditional gradient: analysis of convergence and applications](https://arxiv.org/pdf/1510.06567.pdf). arXiv preprint arXiv:1510.06567.\n\n[8] M. Perrot, N. Courty, R. Flamary, A. Habrard (2016), [Mapping estimation for discrete optimal transport](http://remi.flamary.com/biblio/perrot2016mapping.pdf), Neural Information Processing Systems (NIPS).\n\n[9] Schmitzer, B. (2016). [Stabilized Sparse Scaling Algorithms for Entropy Regularized Transport Problems](https://arxiv.org/pdf/1610.06519.pdf). arXiv preprint arXiv:1610.06519.\n\n[10] Chizat, L., Peyr\u00e9, G., Schmitzer, B., & Vialard, F. X. (2016). [Scaling algorithms for unbalanced transport problems](https://arxiv.org/pdf/1607.05816.pdf). arXiv preprint arXiv:1607.05816.\n\n[11] Flamary, R., Cuturi, M., Courty, N., & Rakotomamonjy, A. (2016). [Wasserstein Discriminant Analysis](https://arxiv.org/pdf/1608.08063.pdf). arXiv preprint arXiv:1608.08063.\n\n[12] Gabriel Peyr\u00e9, Marco Cuturi, and Justin Solomon (2016), [Gromov-Wasserstein averaging of kernel and distance matrices](http://proceedings.mlr.press/v48/peyre16.html)  International Conference on Machine Learning (ICML).\n\n[13] M\u00e9moli, Facundo (2011). [Gromov\u2013Wasserstein distances and the metric approach to object matching](https://media.adelaide.edu.au/acvt/Publications/2011/2011-Gromov%E2%80%93Wasserstein%20Distances%20and%20the%20Metric%20Approach%20to%20Object%20Matching.pdf). Foundations of computational mathematics 11.4 : 417-487.\n\n[14] Knott, M. and Smith, C. S. (1984).[On the optimal mapping of distributions](https://link.springer.com/article/10.1007/BF00934745), Journal of Optimization Theory and Applications Vol 43.\n\n[15] Peyr\u00e9, G., & Cuturi, M. (2018). [Computational Optimal Transport](https://arxiv.org/pdf/1803.00567.pdf) .\n\n[16] Agueh, M., & Carlier, G. (2011). [Barycenters in the Wasserstein space](https://hal.archives-ouvertes.fr/hal-00637399/document). SIAM Journal on Mathematical Analysis, 43(2), 904-924.\n\n[17] Blondel, M., Seguy, V., & Rolet, A. (2018). [Smooth and Sparse Optimal Transport](https://arxiv.org/abs/1710.06276). Proceedings of the Twenty-First International Conference on Artificial Intelligence and Statistics (AISTATS).\n\n[18] Genevay, A., Cuturi, M., Peyr\u00e9, G. & Bach, F. (2016) [Stochastic Optimization for Large-scale Optimal Transport](https://arxiv.org/abs/1605.08527). Advances in Neural Information Processing Systems (2016).\n\n[19] Seguy, V., Bhushan Damodaran, B., Flamary, R., Courty, N., Rolet, A.& Blondel, M. [Large-scale Optimal Transport and Mapping Estimation](https://arxiv.org/pdf/1711.02283.pdf). International Conference on Learning Representation (2018)\n\n[20] Cuturi, M. and Doucet, A. (2014) [Fast Computation of Wasserstein Barycenters](http://proceedings.mlr.press/v32/cuturi14.html). International Conference in Machine Learning\n\n[21] Solomon, J., De Goes, F., Peyr\u00e9, G., Cuturi, M., Butscher, A., Nguyen, A. & Guibas, L. (2015). [Convolutional wasserstein distances: Efficient optimal transportation on geometric domains](https://dl.acm.org/citation.cfm?id=2766963). ACM Transactions on Graphics (TOG), 34(4), 66.\n\n[22] J. Altschuler, J.Weed, P. Rigollet, (2017) [Near-linear time approximation algorithms for optimal transport via Sinkhorn iteration](https://papers.nips.cc/paper/6792-near-linear-time-approximation-algorithms-for-optimal-transport-via-sinkhorn-iteration.pdf), Advances in Neural Information Processing Systems (NIPS) 31\n\n[23] Aude, G., Peyr\u00e9, G., Cuturi, M., [Learning Generative Models with Sinkhorn Divergences](https://arxiv.org/abs/1706.00292), Proceedings of the Twenty-First International Conference on Artificial Intelligence and Statistics, (AISTATS) 21, 2018\n\n[24] Vayer, T., Chapel, L., Flamary, R., Tavenard, R. and Courty, N. (2019). [Optimal Transport for structured data with application on graphs](http://proceedings.mlr.press/v97/titouan19a.html) Proceedings of the 36th International Conference on Machine Learning (ICML).\n\n[25] Frogner C., Zhang C., Mobahi H., Araya-Polo M., Poggio T. (2015). [Learning with a Wasserstein Loss](http://cbcl.mit.edu/wasserstein/)  Advances in Neural Information Processing Systems (NIPS).\n\n[26] Alaya M. Z., B\u00e9rar M., Gasso G., Rakotomamonjy A. (2019). [Screening Sinkhorn Algorithm for Regularized Optimal Transport](https://papers.nips.cc/paper/9386-screening-sinkhorn-algorithm-for-regularized-optimal-transport), Advances in Neural Information Processing Systems 33 (NeurIPS).\n\n[27] Redko I., Courty N., Flamary R., Tuia D. (2019). [Optimal Transport for Multi-source Domain Adaptation under Target Shift](http://proceedings.mlr.press/v89/redko19a.html), Proceedings of the Twenty-Second International Conference on Artificial Intelligence and Statistics (AISTATS) 22, 2019.\n\n[28] Caffarelli, L. A., McCann, R. J. (2010). [Free boundaries in optimal transport and Monge-Ampere obstacle problems](http://www.math.toronto.edu/~mccann/papers/annals2010.pdf), Annals of mathematics, 673-730.\n\n[29] Chapel, L., Alaya, M., Gasso, G. (2020). [Partial Optimal Transport with Applications on Positive-Unlabeled Learning](https://arxiv.org/abs/2002.08276), Advances in Neural Information Processing Systems (NeurIPS), 2020.\n\n[30] Flamary R., Courty N., Tuia D., Rakotomamonjy A. (2014). [Optimal transport with Laplacian regularization: Applications to domain adaptation and shape matching](https://remi.flamary.com/biblio/flamary2014optlaplace.pdf), NIPS Workshop on Optimal Transport and Machine Learning OTML, 2014.\n\n[31] Bonneel, Nicolas, et al. [Sliced and radon wasserstein barycenters of measures](https://perso.liris.cnrs.fr/nicolas.bonneel/WassersteinSliced-JMIV.pdf), Journal of Mathematical Imaging and Vision 51.1 (2015): 22-45\n\n[32] Huang, M., Ma S., Lai, L. (2021). [A Riemannian Block Coordinate Descent Method for Computing the Projection Robust Wasserstein Distance](http://proceedings.mlr.press/v139/huang21e.html), Proceedings of the 38th International Conference on Machine Learning (ICML).\n\n[33] Kerdoncuff T., Emonet R., Marc S. [Sampled Gromov Wasserstein](https://hal.archives-ouvertes.fr/hal-03232509/document), Machine Learning Journal (MJL), 2021\n\n[34] Feydy, J., S\u00e9journ\u00e9, T., Vialard, F. X., Amari, S. I., Trouv\u00e9, A., & Peyr\u00e9, G. (2019, April). [Interpolating between optimal transport and MMD using Sinkhorn divergences](http://proceedings.mlr.press/v89/feydy19a/feydy19a.pdf). In The 22nd International Conference on Artificial Intelligence and Statistics (pp. 2681-2690). PMLR.\n\n[35] Deshpande, I., Hu, Y. T., Sun, R., Pyrros, A., Siddiqui, N., Koyejo, S., ... & Schwing, A. G. (2019). [Max-sliced wasserstein distance and its use for gans](https://openaccess.thecvf.com/content_CVPR_2019/papers/Deshpande_Max-Sliced_Wasserstein_Distance_and_Its_Use_for_GANs_CVPR_2019_paper.pdf). In Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (pp. 10648-10656).\n\n[36] Liutkus, A., Simsekli, U., Majewski, S., Durmus, A., & St\u00f6ter, F. R.\n(2019, May). [Sliced-Wasserstein flows: Nonparametric generative modeling\nvia optimal transport and diffusions](http://proceedings.mlr.press/v97/liutkus19a/liutkus19a.pdf). In International Conference on\nMachine Learning (pp. 4104-4113). PMLR.\n\n[37] Janati, H., Cuturi, M., Gramfort, A. [Debiased sinkhorn barycenters](http://proceedings.mlr.press/v119/janati20a/janati20a.pdf) Proceedings of the 37th International\nConference on Machine Learning, PMLR 119:4692-4701, 2020\n\n[38] C. Vincent-Cuaz, T. Vayer, R. Flamary, M. Corneli, N. Courty, [Online Graph\nDictionary Learning](https://arxiv.org/pdf/2102.06555.pdf), International Conference on Machine Learning (ICML), 2021.\n\n[39] Gozlan, N., Roberto, C., Samson, P. M., & Tetali, P. (2017). [Kantorovich duality for general transport costs and applications](https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.712.1825&rep=rep1&type=pdf). Journal of Functional Analysis, 273(11), 3327-3405.\n\n[40] Forrow, A., H\u00fctter, J. C., Nitzan, M., Rigollet, P., Schiebinger, G., & Weed, J. (2019, April). [Statistical optimal transport via factored couplings](http://proceedings.mlr.press/v89/forrow19a/forrow19a.pdf). In The 22nd International Conference on Artificial Intelligence and Statistics (pp. 2454-2465). PMLR.\n\n[41] Chapel*, L., Flamary*, R., Wu, H., F\u00e9votte, C., Gasso, G. (2021). [Unbalanced Optimal Transport through Non-negative Penalized Linear Regression](https://proceedings.neurips.cc/paper/2021/file/c3c617a9b80b3ae1ebd868b0017cc349-Paper.pdf) Advances in Neural Information Processing Systems (NeurIPS), 2020. (Two first co-authors)\n\n[42] Delon, J., Gozlan, N., and Saint-Dizier, A. [Generalized Wasserstein barycenters between probability measures living on different subspaces](https://arxiv.org/pdf/2105.09755). arXiv preprint arXiv:2105.09755, 2021.\n\n[43]  \u00c1lvarez-Esteban, Pedro C., et al. [A fixed-point approach to barycenters in Wasserstein space.](https://arxiv.org/pdf/1511.05355.pdf) Journal of Mathematical Analysis and Applications 441.2 (2016): 744-762.\n\n[44] Delon, Julie, Julien Salomon, and Andrei Sobolevski. [Fast transport optimization for Monge costs on the circle.](https://arxiv.org/abs/0902.3527) SIAM Journal on Applied Mathematics 70.7 (2010): 2239-2258.\n\n[45] Hundrieser, Shayan, Marcel Klatt, and Axel Munk. [The statistics of circular optimal transport.](https://arxiv.org/abs/2103.15426) Directional Statistics for Innovative Applications: A Bicentennial Tribute to Florence Nightingale. Singapore: Springer Nature Singapore, 2022. 57-82.\n\n[46] Bonet, C., Berg, P., Courty, N., Septier, F., Drumetz, L., & Pham, M. T. (2023). [Spherical Sliced-Wasserstein](https://openreview.net/forum?id=jXQ0ipgMdU). International Conference on Learning Representations.\n\n[47] Chowdhury, S., & M\u00e9moli, F. (2019). [The gromov\u2013wasserstein distance between networks and stable network invariants](https://academic.oup.com/imaiai/article/8/4/757/5627736). Information and Inference: A Journal of the IMA, 8(4), 757-787.\n\n[48] C\u00e9dric Vincent-Cuaz, R\u00e9mi Flamary, Marco Corneli, Titouan Vayer, Nicolas Courty (2022). [Semi-relaxed Gromov-Wasserstein divergence and applications on graphs](https://openreview.net/pdf?id=RShaMexjc-x). International Conference on Learning Representations (ICLR), 2022.\n\n[49] Redko, I., Vayer, T., Flamary, R., and Courty, N. (2020). [CO-Optimal Transport](https://proceedings.neurips.cc/paper/2020/file/cc384c68ad503482fb24e6d1e3b512ae-Paper.pdf). Advances in Neural Information Processing Systems, 33.\n\n[50] Liu, T., Puigcerver, J., & Blondel, M. (2023). [Sparsity-constrained optimal transport](https://openreview.net/forum?id=yHY9NbQJ5BP). Proceedings of the Eleventh International Conference on Learning Representations (ICLR).\n\n[51] Xu, H., Luo, D., Zha, H., & Duke, L. C. (2019). [Gromov-wasserstein learning for graph matching and node embedding](http://proceedings.mlr.press/v97/xu19b.html). In International Conference on Machine Learning (ICML), 2019.\n\n[52] Collas, A., Vayer, T., Flamary, F., & Breloy, A. (2023). [Entropic Wasserstein Component Analysis](https://arxiv.org/abs/2303.05119). ArXiv.\n\n[53] C. Vincent-Cuaz, R. Flamary, M. Corneli, T. Vayer, N. Courty (2022). [Template based graph neural network with optimal transport distances](https://papers.nips.cc/paper_files/paper/2022/file/4d3525bc60ba1adc72336c0392d3d902-Paper-Conference.pdf). Advances in Neural Information Processing Systems, 35.\n\n[54] B\u00e9cigneul, G., Ganea, O. E., Chen, B., Barzilay, R., & Jaakkola, T. S. (2020). [Optimal transport graph neural networks](https://arxiv.org/pdf/2006.04804).\n\n[55] Ronak Mehta, Jeffery Kline, Vishnu Suresh Lokhande, Glenn Fung, & Vikas Singh (2023). [Efficient Discrete Multi Marginal Optimal Transport Regularization](https://openreview.net/forum?id=R98ZfMt-jE). In The Eleventh International Conference on Learning Representations (ICLR).\n\n[56] Jeffery Kline. [Properties of the d-dimensional earth mover\u2019s problem](https://www.sciencedirect.com/science/article/pii/S0166218X19301441). Discrete Applied Mathematics, 265: 128\u2013141, 2019.\n\n[57] Delon, J., Desolneux, A., & Salmona, A. (2022). [Gromov\u2013Wasserstein\ndistances between Gaussian distributions](https://hal.science/hal-03197398v2/file/main.pdf). Journal of Applied Probability, 59(4),\n1178-1198.\n\n[58] Paty F-P., d\u2019Aspremont 1., & Cuturi M. (2020). [Regularity as regularization:Smooth and strongly convex brenier potentials in optimal transport.](http://proceedings.mlr.press/v108/paty20a/paty20a.pdf) In International Conference on Artificial Intelligence and Statistics, pages 1222\u20131232. PMLR, 2020.\n\n[59] Taylor A. B. (2017). [Convex interpolation and performance estimation of first-order methods for convex optimization.](https://dial.uclouvain.be/pr/boreal/object/boreal%3A182881/datastream/PDF_01/view) PhD thesis, Catholic University of Louvain, Louvain-la-Neuve, Belgium, 2017.\n\n[60] Feydy, J., Roussillon, P., Trouv\u00e9, A., & Gori, P. (2019). [Fast and scalable optimal transport for brain tractograms](https://arxiv.org/pdf/2107.02010.pdf). In Medical Image Computing and Computer Assisted Intervention\u2013MICCAI 2019: 22nd International Conference, Shenzhen, China, October 13\u201317, 2019, Proceedings, Part III 22 (pp. 636-644). Springer International Publishing.\n\n[61] Charlier, B., Feydy, J., Glaunes, J. A., Collin, F. D., & Durif, G. (2021). [Kernel operations on the gpu, with autodiff, without memory overflows](https://www.jmlr.org/papers/volume22/20-275/20-275.pdf). The Journal of Machine Learning Research, 22(1), 3457-3462.\n\n[62] H. Van Assel, C. Vincent-Cuaz, T. Vayer, R. Flamary, N. Courty (2023). [Interpolating between Clustering and Dimensionality Reduction with Gromov-Wasserstein](https://arxiv.org/pdf/2310.03398.pdf). NeurIPS 2023 Workshop Optimal Transport and Machine Learning.\n\n[63] Li, J., Tang, J., Kong, L., Liu, H., Li, J., So, A. M. C., & Blanchet, J. (2022). [A Convergent Single-Loop Algorithm for Relaxation of Gromov-Wasserstein in Graph Data](https://openreview.net/pdf?id=0jxPyVWmiiF). In The Eleventh International Conference on Learning Representations.\n\n[64] Ma, X., Chu, X., Wang, Y., Lin, Y., Zhao, J., Ma, L., & Zhu, W. (2023). [Fused Gromov-Wasserstein Graph Mixup for Graph-level Classifications](https://openreview.net/pdf?id=uqkUguNu40). In Thirty-seventh Conference on Neural Information Processing Systems.\n\n[65] Scetbon, M., Cuturi, M., & Peyr\u00e9, G. (2021). [Low-Rank Sinkhorn Factorization](https://arxiv.org/pdf/2103.04737.pdf).\n\n[66] Pooladian, Aram-Alexandre, and Jonathan Niles-Weed. [Entropic estimation of optimal transport maps](https://arxiv.org/pdf/2109.12004.pdf). arXiv preprint arXiv:2109.12004 (2021).\n\n[67] Scetbon, M., Peyr\u00e9, G. & Cuturi, M. (2022). [Linear-Time Gromov-Wasserstein Distances using Low Rank Couplings and Costs](https://proceedings.mlr.press/v162/scetbon22b/scetbon22b.pdf). In International Conference on Machine Learning (ICML), 2022.\n\n[68] Chowdhury, S., Miller, D., & Needham, T. (2021). [Quantized gromov-wasserstein](https://link.springer.com/chapter/10.1007/978-3-030-86523-8_49). ECML PKDD 2021. Springer International Publishing.\n\n[69] Delon, J., & Desolneux, A. (2020). [A Wasserstein-type distance in the space of Gaussian mixture models](https://epubs.siam.org/doi/abs/10.1137/19M1301047). SIAM Journal on Imaging Sciences, 13(2), 936-970.\n\n[70] A. Thual, H. Tran, T. Zemskova, N. Courty, R. Flamary, S. Dehaene\n& B. Thirion (2022). [Aligning individual brains with Fused Unbalanced Gromov-Wasserstein.](https://proceedings.neurips.cc/paper_files/paper/2022/file/8906cac4ca58dcaf17e97a0486ad57ca-Paper-Conference.pdf). Neural Information Processing Systems (NeurIPS).\n\n[71] H. Tran, H. Janati, N. Courty, R. Flamary, I. Redko, P. Demetci & R. Singh (2023). [Unbalanced Co-Optimal Transport](https://dl.acm.org/doi/10.1609/aaai.v37i8.26193). AAAI Conference on\nArtificial Intelligence.\n\n[72] Thibault S\u00e9journ\u00e9, Fran\u00e7ois-Xavier Vialard, and Gabriel Peyr\u00e9 (2021). [The Unbalanced Gromov Wasserstein Distance: Conic Formulation and Relaxation](https://proceedings.neurips.cc/paper/2021/file/4990974d150d0de5e6e15a1454fe6b0f-Paper.pdf). Neural Information Processing Systems (NeurIPS).\n\n[73] S\u00e9journ\u00e9, T., Vialard, F. X., & Peyr\u00e9, G. (2022). [Faster Unbalanced Optimal Transport: Translation Invariant Sinkhorn and 1-D Frank-Wolfe](https://proceedings.mlr.press/v151/sejourne22a.html). In International Conference on Artificial Intelligence and Statistics (pp. 4995-5021). PMLR.\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Python Optimal Transport Library",
    "version": "0.9.5",
    "project_urls": {
        "Download": "https://github.com/PythonOT/POT/archive/0.9.5.tar.gz",
        "Homepage": "https://github.com/PythonOT/POT"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8753acd66a8e50f992e6ca578181009e81d367ad738d0ac135f63d0de3ca92cd",
                "md5": "1fcd63934b71b00b1ba937601db24b82",
                "sha256": "34d766c38e65a69c087b01a854fe89fbd152c3e8af93da2227b6c40aed6d37b9"
            },
            "downloads": -1,
            "filename": "POT-0.9.5-cp310-cp310-macosx_10_9_universal2.whl",
            "has_sig": false,
            "md5_digest": "1fcd63934b71b00b1ba937601db24b82",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.7",
            "size": 410989,
            "upload_time": "2024-11-07T10:04:04",
            "upload_time_iso_8601": "2024-11-07T10:04:04.166932Z",
            "url": "https://files.pythonhosted.org/packages/87/53/acd66a8e50f992e6ca578181009e81d367ad738d0ac135f63d0de3ca92cd/POT-0.9.5-cp310-cp310-macosx_10_9_universal2.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "245143c68e7cb1dc7c40286d9e19f6cb599108cd01c2b32307296eba9cb01a05",
                "md5": "8c1163016bdc77d5bb3b284c1931589e",
                "sha256": "b5407377256de11b6fdc94bbba9b50ea5a2301570905fc9014541cc8473806d9"
            },
            "downloads": -1,
            "filename": "POT-0.9.5-cp310-cp310-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "8c1163016bdc77d5bb3b284c1931589e",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.7",
            "size": 351111,
            "upload_time": "2024-11-07T10:04:06",
            "upload_time_iso_8601": "2024-11-07T10:04:06.604214Z",
            "url": "https://files.pythonhosted.org/packages/24/51/43c68e7cb1dc7c40286d9e19f6cb599108cd01c2b32307296eba9cb01a05/POT-0.9.5-cp310-cp310-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "3f8717069069948e40fa0e41366e6412322c7849d4b2a0ddae0428d10b571604",
                "md5": "65f47222e679ca38874e5bcc247ef6a0",
                "sha256": "2f37039cd356198c1fb994e7d935b9bf75d44f2a40319d298bf8cc149eb360d5"
            },
            "downloads": -1,
            "filename": "POT-0.9.5-cp310-cp310-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "65f47222e679ca38874e5bcc247ef6a0",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.7",
            "size": 344289,
            "upload_time": "2024-11-07T10:04:08",
            "upload_time_iso_8601": "2024-11-07T10:04:08.151577Z",
            "url": "https://files.pythonhosted.org/packages/3f/87/17069069948e40fa0e41366e6412322c7849d4b2a0ddae0428d10b571604/POT-0.9.5-cp310-cp310-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "21497bbb5ac2989abd775ae200cdbcf1a2e023cf07e8d1d6afc7d673d4e380d3",
                "md5": "8ffcad71c6e40d8316f2b86992f110f4",
                "sha256": "00a18427c9abdd107a2285ea0a814c6b22e95a1af8f88a37c56f23cd216f7a6b"
            },
            "downloads": -1,
            "filename": "POT-0.9.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "8ffcad71c6e40d8316f2b86992f110f4",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.7",
            "size": 858699,
            "upload_time": "2024-11-07T10:04:10",
            "upload_time_iso_8601": "2024-11-07T10:04:10.231738Z",
            "url": "https://files.pythonhosted.org/packages/21/49/7bbb5ac2989abd775ae200cdbcf1a2e023cf07e8d1d6afc7d673d4e380d3/POT-0.9.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "97ad1724a238cef180c04a3d63e8702cbe91f0abe946eb7a55c3857cd0ac1d9b",
                "md5": "256fc06a7d9fc6300f0072b45e2dd758",
                "sha256": "f0dc608cea1107289a58dec33cddc1b0a3fea77ff36d66e2c8ac7aeea543969a"
            },
            "downloads": -1,
            "filename": "POT-0.9.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "256fc06a7d9fc6300f0072b45e2dd758",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.7",
            "size": 865565,
            "upload_time": "2024-11-07T10:04:12",
            "upload_time_iso_8601": "2024-11-07T10:04:12.421239Z",
            "url": "https://files.pythonhosted.org/packages/97/ad/1724a238cef180c04a3d63e8702cbe91f0abe946eb7a55c3857cd0ac1d9b/POT-0.9.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "1ce9a1901cbbf765b765ab4adace1711adc3eef01db526dc898e31fbdca653a5",
                "md5": "ca79bcdfbf825b2095e8a57336fa88a0",
                "sha256": "8312bee055389db47adab063749c8d77b5981534177ca6cd9b91e4fb68f69d00"
            },
            "downloads": -1,
            "filename": "POT-0.9.5-cp310-cp310-win32.whl",
            "has_sig": false,
            "md5_digest": "ca79bcdfbf825b2095e8a57336fa88a0",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.7",
            "size": 344137,
            "upload_time": "2024-11-07T10:04:14",
            "upload_time_iso_8601": "2024-11-07T10:04:14.693372Z",
            "url": "https://files.pythonhosted.org/packages/1c/e9/a1901cbbf765b765ab4adace1711adc3eef01db526dc898e31fbdca653a5/POT-0.9.5-cp310-cp310-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "95002ef88c57c0ee5ff55a95bcb3ff62d904039bb460809d7577ec314b5e7186",
                "md5": "6521378c6c6d322440998841bf50733f",
                "sha256": "043706d69202ac87e140121ba32ed1b038f2b3fc4a5549586187239a583cd50d"
            },
            "downloads": -1,
            "filename": "POT-0.9.5-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "6521378c6c6d322440998841bf50733f",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.7",
            "size": 348385,
            "upload_time": "2024-11-07T10:04:15",
            "upload_time_iso_8601": "2024-11-07T10:04:15.851518Z",
            "url": "https://files.pythonhosted.org/packages/95/00/2ef88c57c0ee5ff55a95bcb3ff62d904039bb460809d7577ec314b5e7186/POT-0.9.5-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0881c9eaa405d40567452d102385a2077b4d34f7961dd7ea3354b7749efd4ea7",
                "md5": "4e4540d3007148280c21ae1a9a4c578f",
                "sha256": "b5f000da00e408ff781672a4895bfa8daacec055bd534c9e66ead479f3c6d83c"
            },
            "downloads": -1,
            "filename": "POT-0.9.5-cp311-cp311-macosx_10_9_universal2.whl",
            "has_sig": false,
            "md5_digest": "4e4540d3007148280c21ae1a9a4c578f",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.7",
            "size": 410977,
            "upload_time": "2024-11-07T10:04:17",
            "upload_time_iso_8601": "2024-11-07T10:04:17.396694Z",
            "url": "https://files.pythonhosted.org/packages/08/81/c9eaa405d40567452d102385a2077b4d34f7961dd7ea3354b7749efd4ea7/POT-0.9.5-cp311-cp311-macosx_10_9_universal2.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "43328d319ab8eee96397569115aac644b19136170966667c59b026c277e1b026",
                "md5": "b93df904c42cc95b2aa670df72a4af83",
                "sha256": "9eddd9ff29bdb17d4db8ba00ba18d42656c694a128591502bf59afc1369e1bb3"
            },
            "downloads": -1,
            "filename": "POT-0.9.5-cp311-cp311-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "b93df904c42cc95b2aa670df72a4af83",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.7",
            "size": 351059,
            "upload_time": "2024-11-07T10:04:18",
            "upload_time_iso_8601": "2024-11-07T10:04:18.821609Z",
            "url": "https://files.pythonhosted.org/packages/43/32/8d319ab8eee96397569115aac644b19136170966667c59b026c277e1b026/POT-0.9.5-cp311-cp311-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "237ced772734847ada457af0fdb9dd7073bd3823915721bf64147a1434da5a0c",
                "md5": "69355a33b47865e7c8c4f180cd522b46",
                "sha256": "7eb9b88c73387a9966775a6f6d077d9d071814783701d2656dc05b5032a9662d"
            },
            "downloads": -1,
            "filename": "POT-0.9.5-cp311-cp311-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "69355a33b47865e7c8c4f180cd522b46",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.7",
            "size": 344293,
            "upload_time": "2024-11-07T10:04:20",
            "upload_time_iso_8601": "2024-11-07T10:04:20.193969Z",
            "url": "https://files.pythonhosted.org/packages/23/7c/ed772734847ada457af0fdb9dd7073bd3823915721bf64147a1434da5a0c/POT-0.9.5-cp311-cp311-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8dafa99bc77cf4f79ec04b23d415da005e83aa2a2b91d4216045c87f46d3109f",
                "md5": "bfe4e282d344785c46ae4c1599f58f96",
                "sha256": "c9f44446056f5fc9d132ed8e431732c33cbe754fb1e6d73636f1b6ae811be7df"
            },
            "downloads": -1,
            "filename": "POT-0.9.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "bfe4e282d344785c46ae4c1599f58f96",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.7",
            "size": 891139,
            "upload_time": "2024-11-07T10:04:22",
            "upload_time_iso_8601": "2024-11-07T10:04:22.344040Z",
            "url": "https://files.pythonhosted.org/packages/8d/af/a99bc77cf4f79ec04b23d415da005e83aa2a2b91d4216045c87f46d3109f/POT-0.9.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "68e8efc53871cc5b086565702e123d62b37aa40320023b46b30923bb9055b287",
                "md5": "4c95248cc811d8696488ff7a79a86022",
                "sha256": "d7f5d27bc9063e01b03d906bb77e7b3428065fdd72ed64233b249584ead2e2bf"
            },
            "downloads": -1,
            "filename": "POT-0.9.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "4c95248cc811d8696488ff7a79a86022",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.7",
            "size": 897470,
            "upload_time": "2024-11-07T10:04:23",
            "upload_time_iso_8601": "2024-11-07T10:04:23.686786Z",
            "url": "https://files.pythonhosted.org/packages/68/e8/efc53871cc5b086565702e123d62b37aa40320023b46b30923bb9055b287/POT-0.9.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a1ddaab8edf448d68fa6be6454887667e04a7bf2b2a5929f2ec35c49f83ef286",
                "md5": "079642ace1e200686fb232098dc9fa83",
                "sha256": "cd79a8b4d35b706f2124f73ebff3bb1ce3450e01cc8f610eda3b6ce13616b829"
            },
            "downloads": -1,
            "filename": "POT-0.9.5-cp311-cp311-win32.whl",
            "has_sig": false,
            "md5_digest": "079642ace1e200686fb232098dc9fa83",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.7",
            "size": 343915,
            "upload_time": "2024-11-07T10:04:24",
            "upload_time_iso_8601": "2024-11-07T10:04:24.980076Z",
            "url": "https://files.pythonhosted.org/packages/a1/dd/aab8edf448d68fa6be6454887667e04a7bf2b2a5929f2ec35c49f83ef286/POT-0.9.5-cp311-cp311-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "feee9cd8b16e4e8e7254951b83fc6f871763e7e1315078b17b7008662833ed63",
                "md5": "01e2bb7d3a108caebd1683be9384cf6b",
                "sha256": "6680aadb69df2f75a413fe9c58bd1c5cb744d017a7c8ba8841654fd0dc75433b"
            },
            "downloads": -1,
            "filename": "POT-0.9.5-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "01e2bb7d3a108caebd1683be9384cf6b",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.7",
            "size": 348566,
            "upload_time": "2024-11-07T10:04:26",
            "upload_time_iso_8601": "2024-11-07T10:04:26.557304Z",
            "url": "https://files.pythonhosted.org/packages/fe/ee/9cd8b16e4e8e7254951b83fc6f871763e7e1315078b17b7008662833ed63/POT-0.9.5-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "cb95deecc996c5e147159f37191b90a6cf4ee2494e40badc79bed743bfb6478b",
                "md5": "c0387ea80e7e953ef0516abbfa6deb0c",
                "sha256": "7d57f96b333c9816a2af7817753108739b38155e52648c5967681dbd89d92ed2"
            },
            "downloads": -1,
            "filename": "POT-0.9.5-cp312-cp312-macosx_10_9_universal2.whl",
            "has_sig": false,
            "md5_digest": "c0387ea80e7e953ef0516abbfa6deb0c",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.7",
            "size": 410824,
            "upload_time": "2024-11-07T10:04:28",
            "upload_time_iso_8601": "2024-11-07T10:04:28.313054Z",
            "url": "https://files.pythonhosted.org/packages/cb/95/deecc996c5e147159f37191b90a6cf4ee2494e40badc79bed743bfb6478b/POT-0.9.5-cp312-cp312-macosx_10_9_universal2.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d3d3d9ae1ae96ad461a900b4ffb38f0a830201d4c43135e1a3be48a82e77303e",
                "md5": "446f96fc814e3311e01224a2c7426b13",
                "sha256": "afad647c78f999439f8c5cbcf74b03c5c0afefb08727cd7d68994130fabfc761"
            },
            "downloads": -1,
            "filename": "POT-0.9.5-cp312-cp312-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "446f96fc814e3311e01224a2c7426b13",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.7",
            "size": 351023,
            "upload_time": "2024-11-07T10:04:29",
            "upload_time_iso_8601": "2024-11-07T10:04:29.851574Z",
            "url": "https://files.pythonhosted.org/packages/d3/d3/d9ae1ae96ad461a900b4ffb38f0a830201d4c43135e1a3be48a82e77303e/POT-0.9.5-cp312-cp312-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7d97ca785fc539388696838f34ab6bde8ee8ad625999221e3746c8d410f8c20f",
                "md5": "df2700edd980d2f7afe692c0906bfcd8",
                "sha256": "bca891c28592d6e0e8f04b35989de7005f0fb9b3923f00537f1b269c5084aa7b"
            },
            "downloads": -1,
            "filename": "POT-0.9.5-cp312-cp312-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "df2700edd980d2f7afe692c0906bfcd8",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.7",
            "size": 344150,
            "upload_time": "2024-11-07T10:04:30",
            "upload_time_iso_8601": "2024-11-07T10:04:30.974948Z",
            "url": "https://files.pythonhosted.org/packages/7d/97/ca785fc539388696838f34ab6bde8ee8ad625999221e3746c8d410f8c20f/POT-0.9.5-cp312-cp312-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "bcbdfd000d9217a6cb47f25414d1bfce885fcb28fc23876266422a3a2d8fab31",
                "md5": "f5c18dfc5090705e3ce2b3a4e76e869d",
                "sha256": "088c930a5fcd1e8e36fb6af710df47ce6e9331b6b5a28eb09c673df4186dcb10"
            },
            "downloads": -1,
            "filename": "POT-0.9.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "f5c18dfc5090705e3ce2b3a4e76e869d",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.7",
            "size": 894749,
            "upload_time": "2024-11-07T10:04:32",
            "upload_time_iso_8601": "2024-11-07T10:04:32.163239Z",
            "url": "https://files.pythonhosted.org/packages/bc/bd/fd000d9217a6cb47f25414d1bfce885fcb28fc23876266422a3a2d8fab31/POT-0.9.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5b399c3eed29e954ddbac3ebe68123213826c8995e8acf8b54aa79d1956fda6a",
                "md5": "4261bb0c77eb04daedf454d635cb0c9f",
                "sha256": "dfb18268fac1e982e21821a03f802802a0d579c4690988b764115dd886dc38f5"
            },
            "downloads": -1,
            "filename": "POT-0.9.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "4261bb0c77eb04daedf454d635cb0c9f",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.7",
            "size": 901694,
            "upload_time": "2024-11-07T10:04:33",
            "upload_time_iso_8601": "2024-11-07T10:04:33.919982Z",
            "url": "https://files.pythonhosted.org/packages/5b/39/9c3eed29e954ddbac3ebe68123213826c8995e8acf8b54aa79d1956fda6a/POT-0.9.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "838dbf8af71e2f36da7598da946a81fbaebb362abaebf6eeba81ebc8efbc860a",
                "md5": "1e5057c67c1b754d562b8c79bda7ef9b",
                "sha256": "931fa46ff8e01d47309207243988c783a2d8364452bc080b130c5d319349ad3f"
            },
            "downloads": -1,
            "filename": "POT-0.9.5-cp312-cp312-win32.whl",
            "has_sig": false,
            "md5_digest": "1e5057c67c1b754d562b8c79bda7ef9b",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.7",
            "size": 343682,
            "upload_time": "2024-11-07T10:04:35",
            "upload_time_iso_8601": "2024-11-07T10:04:35.190078Z",
            "url": "https://files.pythonhosted.org/packages/83/8d/bf8af71e2f36da7598da946a81fbaebb362abaebf6eeba81ebc8efbc860a/POT-0.9.5-cp312-cp312-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "6e9514902c778117ad9ac7af62dd1d951942440c57df991d7f937f416ee6320f",
                "md5": "316f2e1f0908085c29a68c1edfadac01",
                "sha256": "be786612b391c2e4d3b5db4e7d51cdb2360284e3a6949990051c2eb102f60d3c"
            },
            "downloads": -1,
            "filename": "POT-0.9.5-cp312-cp312-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "316f2e1f0908085c29a68c1edfadac01",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.7",
            "size": 347949,
            "upload_time": "2024-11-07T10:04:36",
            "upload_time_iso_8601": "2024-11-07T10:04:36.497049Z",
            "url": "https://files.pythonhosted.org/packages/6e/95/14902c778117ad9ac7af62dd1d951942440c57df991d7f937f416ee6320f/POT-0.9.5-cp312-cp312-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "6de1814d1550dc059b7f4e6543158020ad4bf79811e05964b948af09a9713e7c",
                "md5": "1e30a7b4fa45fa51fb0412689e7ca088",
                "sha256": "844820020240bad66ca07255289df9ed1e46c5f71ba2401852833c0dd114c660"
            },
            "downloads": -1,
            "filename": "POT-0.9.5-cp37-cp37m-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "1e30a7b4fa45fa51fb0412689e7ca088",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.7",
            "size": 351567,
            "upload_time": "2024-11-07T10:04:37",
            "upload_time_iso_8601": "2024-11-07T10:04:37.644953Z",
            "url": "https://files.pythonhosted.org/packages/6d/e1/814d1550dc059b7f4e6543158020ad4bf79811e05964b948af09a9713e7c/POT-0.9.5-cp37-cp37m-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ac1b2e21aaba340c5a8ff3bef71971b0680c254c7bf2baaa75d239e4e681b96c",
                "md5": "8eeacb26d3ac98cd6da15d277e1f8b7b",
                "sha256": "a76a5bed3af51db1a10c59ba376f500a743f8e20c2a6d4851c4535dbbed17714"
            },
            "downloads": -1,
            "filename": "POT-0.9.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "8eeacb26d3ac98cd6da15d277e1f8b7b",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.7",
            "size": 845099,
            "upload_time": "2024-11-07T10:04:38",
            "upload_time_iso_8601": "2024-11-07T10:04:38.764133Z",
            "url": "https://files.pythonhosted.org/packages/ac/1b/2e21aaba340c5a8ff3bef71971b0680c254c7bf2baaa75d239e4e681b96c/POT-0.9.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7f013b042c9f609d6091ce1e094cba68c8922804a0c9899be8a14466314eb652",
                "md5": "f137dd985f150ce1b5643adfc95e4536",
                "sha256": "8a03da3283cb04a1fa3258f0096ad9cfa3311192d5a6bee3a2ca0e15304f8652"
            },
            "downloads": -1,
            "filename": "POT-0.9.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "f137dd985f150ce1b5643adfc95e4536",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.7",
            "size": 854569,
            "upload_time": "2024-11-07T10:04:40",
            "upload_time_iso_8601": "2024-11-07T10:04:40.319442Z",
            "url": "https://files.pythonhosted.org/packages/7f/01/3b042c9f609d6091ce1e094cba68c8922804a0c9899be8a14466314eb652/POT-0.9.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d1f2cc003f6d9e1d81eeecd784d79a539c79d5a810aba8811d565dedecfca735",
                "md5": "bb56e0ff5f3de719df172913a7b26a67",
                "sha256": "dc50b8005b4dfa3478f0bf841c22d8b3500a8a04e5673da146d71f7039607e3a"
            },
            "downloads": -1,
            "filename": "POT-0.9.5-cp37-cp37m-win32.whl",
            "has_sig": false,
            "md5_digest": "bb56e0ff5f3de719df172913a7b26a67",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.7",
            "size": 344435,
            "upload_time": "2024-11-07T10:04:41",
            "upload_time_iso_8601": "2024-11-07T10:04:41.531946Z",
            "url": "https://files.pythonhosted.org/packages/d1/f2/cc003f6d9e1d81eeecd784d79a539c79d5a810aba8811d565dedecfca735/POT-0.9.5-cp37-cp37m-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "3e7bf8d80744f6b3c7e649a53e26599fad6a277e3cef5e6530213b3aa3c772ed",
                "md5": "b7d21e023113faa36e6285f66b3f6565",
                "sha256": "a9cab787bcb3ce6d23ef297c115baad34ed578a98b4a02afba8cb4e30e39d171"
            },
            "downloads": -1,
            "filename": "POT-0.9.5-cp37-cp37m-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "b7d21e023113faa36e6285f66b3f6565",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.7",
            "size": 348849,
            "upload_time": "2024-11-07T10:04:43",
            "upload_time_iso_8601": "2024-11-07T10:04:43.325214Z",
            "url": "https://files.pythonhosted.org/packages/3e/7b/f8d80744f6b3c7e649a53e26599fad6a277e3cef5e6530213b3aa3c772ed/POT-0.9.5-cp37-cp37m-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "cd65b9d892dbe79343714f570489ac1a73c7b1e11416adbb275d9c1dd64bf8b5",
                "md5": "d305faadde4f3b030aea87f3472d0b61",
                "sha256": "926ba491b5b1f43fb0f3bc6e9d92b6cc634c12e2fa778eba88d9350e82fc2c88"
            },
            "downloads": -1,
            "filename": "POT-0.9.5-cp38-cp38-macosx_10_9_universal2.whl",
            "has_sig": false,
            "md5_digest": "d305faadde4f3b030aea87f3472d0b61",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 411351,
            "upload_time": "2024-11-07T10:04:44",
            "upload_time_iso_8601": "2024-11-07T10:04:44.550035Z",
            "url": "https://files.pythonhosted.org/packages/cd/65/b9d892dbe79343714f570489ac1a73c7b1e11416adbb275d9c1dd64bf8b5/POT-0.9.5-cp38-cp38-macosx_10_9_universal2.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5394f66f3975437f575555e9a5db80190e6390bce5e30b3a7cff364528a71ef2",
                "md5": "a6d420a16b7566109504ee57c84741ba",
                "sha256": "1b77b630a303868ee14015a4306d7e852b174d4a734815c67e27cd45fd59cc07"
            },
            "downloads": -1,
            "filename": "POT-0.9.5-cp38-cp38-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a6d420a16b7566109504ee57c84741ba",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 351255,
            "upload_time": "2024-11-07T10:04:47",
            "upload_time_iso_8601": "2024-11-07T10:04:47.398545Z",
            "url": "https://files.pythonhosted.org/packages/53/94/f66f3975437f575555e9a5db80190e6390bce5e30b3a7cff364528a71ef2/POT-0.9.5-cp38-cp38-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "21f678d0531e1d1aa1dd1763840484c236284188413517a83f06f620a934089c",
                "md5": "cf13a0827b321465a61d49dcfd42d93f",
                "sha256": "db0dd974328cbdd7b20477fb5757326dda22d77cb639f4759296fcd206db380f"
            },
            "downloads": -1,
            "filename": "POT-0.9.5-cp38-cp38-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "cf13a0827b321465a61d49dcfd42d93f",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 344483,
            "upload_time": "2024-11-07T10:04:48",
            "upload_time_iso_8601": "2024-11-07T10:04:48.706137Z",
            "url": "https://files.pythonhosted.org/packages/21/f6/78d0531e1d1aa1dd1763840484c236284188413517a83f06f620a934089c/POT-0.9.5-cp38-cp38-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ff89d94f21561b93dc84e510f98c921f1e1d4150e1e108af397c12c00244237c",
                "md5": "ae2c4fd7112bcbdcc6fa8f042f7b203f",
                "sha256": "eb29c375d02bb5aadad527133e9c20dd73930d8e2294434dc5306fb740a49d9e"
            },
            "downloads": -1,
            "filename": "POT-0.9.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "ae2c4fd7112bcbdcc6fa8f042f7b203f",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 859084,
            "upload_time": "2024-11-07T10:04:50",
            "upload_time_iso_8601": "2024-11-07T10:04:50.199780Z",
            "url": "https://files.pythonhosted.org/packages/ff/89/d94f21561b93dc84e510f98c921f1e1d4150e1e108af397c12c00244237c/POT-0.9.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "2969a17df27a49a465f57cecc70d4f9bc3b93f7b4979fab0d629b53992685086",
                "md5": "7ae031041a13be70cc464e4018ff9f08",
                "sha256": "293e0993d66b09db69c2282edbf859e1de57a3f15b99bd909609ce120380b398"
            },
            "downloads": -1,
            "filename": "POT-0.9.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "7ae031041a13be70cc464e4018ff9f08",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 867342,
            "upload_time": "2024-11-07T10:04:51",
            "upload_time_iso_8601": "2024-11-07T10:04:51.685509Z",
            "url": "https://files.pythonhosted.org/packages/29/69/a17df27a49a465f57cecc70d4f9bc3b93f7b4979fab0d629b53992685086/POT-0.9.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "065fb87cf39faeba506c9bfa7991f6479ab034682680441e694f4bd841efde7d",
                "md5": "87e7efd1382b213f92fe192b8d05a3cd",
                "sha256": "5996d538885b834e36a3838bc73adeb747bd54ab0a2b3178addbb35b3edafa45"
            },
            "downloads": -1,
            "filename": "POT-0.9.5-cp38-cp38-win32.whl",
            "has_sig": false,
            "md5_digest": "87e7efd1382b213f92fe192b8d05a3cd",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 344241,
            "upload_time": "2024-11-07T10:04:53",
            "upload_time_iso_8601": "2024-11-07T10:04:53.270004Z",
            "url": "https://files.pythonhosted.org/packages/06/5f/b87cf39faeba506c9bfa7991f6479ab034682680441e694f4bd841efde7d/POT-0.9.5-cp38-cp38-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8869629a7a27120ce62c9726dc8f08e86f7ed82a5e7690c8bf946da4299a0777",
                "md5": "f4fb773d43b5dfb4773de40f6d7470fb",
                "sha256": "0131aab58d57bf5876d826461d0968d1a655b611cc8c0297c38ab8a235e0d627"
            },
            "downloads": -1,
            "filename": "POT-0.9.5-cp38-cp38-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "f4fb773d43b5dfb4773de40f6d7470fb",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 348698,
            "upload_time": "2024-11-07T10:04:54",
            "upload_time_iso_8601": "2024-11-07T10:04:54.879562Z",
            "url": "https://files.pythonhosted.org/packages/88/69/629a7a27120ce62c9726dc8f08e86f7ed82a5e7690c8bf946da4299a0777/POT-0.9.5-cp38-cp38-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "426413f31b3cff34d06eaaceb382d936d745be8d5886fb153f8908e61e18c5fd",
                "md5": "0ebeeb7bb24b515d144ebaa4aa47ebe6",
                "sha256": "95c29ee3e647b272bfcb35c3c4cb7409326a0a6d3bf3ed8460495e9ac3f3a76d"
            },
            "downloads": -1,
            "filename": "POT-0.9.5-cp39-cp39-macosx_10_9_universal2.whl",
            "has_sig": false,
            "md5_digest": "0ebeeb7bb24b515d144ebaa4aa47ebe6",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.7",
            "size": 410997,
            "upload_time": "2024-11-07T10:04:56",
            "upload_time_iso_8601": "2024-11-07T10:04:56.069160Z",
            "url": "https://files.pythonhosted.org/packages/42/64/13f31b3cff34d06eaaceb382d936d745be8d5886fb153f8908e61e18c5fd/POT-0.9.5-cp39-cp39-macosx_10_9_universal2.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "1b3a639f0c90a3c16926134856a4430af0f931e3a0761758720b92a344185a14",
                "md5": "fcfdfd756a9dd16cb5346e6368a1a8c3",
                "sha256": "b1bca1b3465eadab9d5e1c075122963da3e921102555d1c6b7ff3c1f437d3e18"
            },
            "downloads": -1,
            "filename": "POT-0.9.5-cp39-cp39-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "fcfdfd756a9dd16cb5346e6368a1a8c3",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.7",
            "size": 351108,
            "upload_time": "2024-11-07T10:04:57",
            "upload_time_iso_8601": "2024-11-07T10:04:57.224304Z",
            "url": "https://files.pythonhosted.org/packages/1b/3a/639f0c90a3c16926134856a4430af0f931e3a0761758720b92a344185a14/POT-0.9.5-cp39-cp39-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e129ba56fd2baa24c88157bdb2249ce14789b9a9dab300115990cea73a06938d",
                "md5": "6a541a11166b2c5e44ea6cc2176f47ad",
                "sha256": "e64f5d8890e21eb1e7decac694c34820496238e7d9c95309411e58cb0b04d384"
            },
            "downloads": -1,
            "filename": "POT-0.9.5-cp39-cp39-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "6a541a11166b2c5e44ea6cc2176f47ad",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.7",
            "size": 344291,
            "upload_time": "2024-11-07T10:04:58",
            "upload_time_iso_8601": "2024-11-07T10:04:58.539338Z",
            "url": "https://files.pythonhosted.org/packages/e1/29/ba56fd2baa24c88157bdb2249ce14789b9a9dab300115990cea73a06938d/POT-0.9.5-cp39-cp39-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "280e6648c4580fb915ae325e37dbffb4aaacf44524bb604f84da8d38a7db75f1",
                "md5": "28e994731b17d36a8813701f59f74bb6",
                "sha256": "4fa190662670868126a2372499aec513bd4ac50b4565fe2014525c7cef11e2bf"
            },
            "downloads": -1,
            "filename": "POT-0.9.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "28e994731b17d36a8813701f59f74bb6",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.7",
            "size": 858471,
            "upload_time": "2024-11-07T10:04:59",
            "upload_time_iso_8601": "2024-11-07T10:04:59.837280Z",
            "url": "https://files.pythonhosted.org/packages/28/0e/6648c4580fb915ae325e37dbffb4aaacf44524bb604f84da8d38a7db75f1/POT-0.9.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "650d8f2f4f347cc9de119329a7f606c09d6cd2023aca98376d723c5dc1192a50",
                "md5": "a7fddbe226dc3a6e1ab5f63dc72eb1de",
                "sha256": "f9b775daf69cb4043897050961f9b654c30261543e531d53248a99e5599db0c8"
            },
            "downloads": -1,
            "filename": "POT-0.9.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a7fddbe226dc3a6e1ab5f63dc72eb1de",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.7",
            "size": 865304,
            "upload_time": "2024-11-07T10:05:01",
            "upload_time_iso_8601": "2024-11-07T10:05:01.152252Z",
            "url": "https://files.pythonhosted.org/packages/65/0d/8f2f4f347cc9de119329a7f606c09d6cd2023aca98376d723c5dc1192a50/POT-0.9.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "34c79153c948aac9c466c1538f19363de20cac120c3c5fe8043de03ddb4169ba",
                "md5": "a2061b1928e47785286d7e8676ec828c",
                "sha256": "ceea4cffebce88211cd63bfddc878e2f29a6b6347125cbac40fa214308315878"
            },
            "downloads": -1,
            "filename": "POT-0.9.5-cp39-cp39-win32.whl",
            "has_sig": false,
            "md5_digest": "a2061b1928e47785286d7e8676ec828c",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.7",
            "size": 344132,
            "upload_time": "2024-11-07T10:05:02",
            "upload_time_iso_8601": "2024-11-07T10:05:02.480584Z",
            "url": "https://files.pythonhosted.org/packages/34/c7/9153c948aac9c466c1538f19363de20cac120c3c5fe8043de03ddb4169ba/POT-0.9.5-cp39-cp39-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "290a3822a5035ac5dce79526113c2c7fa305ffedb8729a53586ef35ad488618d",
                "md5": "6db896b607208079d06e7c16da1ff205",
                "sha256": "2f6af660505772833d4ccc189d9de264b429d9ec8e0cb564f33d2181e6f1bbce"
            },
            "downloads": -1,
            "filename": "POT-0.9.5-cp39-cp39-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "6db896b607208079d06e7c16da1ff205",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.7",
            "size": 348386,
            "upload_time": "2024-11-07T10:05:03",
            "upload_time_iso_8601": "2024-11-07T10:05:03.666474Z",
            "url": "https://files.pythonhosted.org/packages/29/0a/3822a5035ac5dce79526113c2c7fa305ffedb8729a53586ef35ad488618d/POT-0.9.5-cp39-cp39-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c1403e0c8dd88328d944f9d82b30cafd2a1c911bddff0b8bccc8dc9dd5e45b7c",
                "md5": "e0949b7c2fa05b25346cf599dc528f24",
                "sha256": "9644ee7ff51c3cffa3c2632b9dd9dff4f3520266f9fb771450935ffb646d6042"
            },
            "downloads": -1,
            "filename": "pot-0.9.5.tar.gz",
            "has_sig": false,
            "md5_digest": "e0949b7c2fa05b25346cf599dc528f24",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 440808,
            "upload_time": "2024-11-07T10:05:05",
            "upload_time_iso_8601": "2024-11-07T10:05:05.567988Z",
            "url": "https://files.pythonhosted.org/packages/c1/40/3e0c8dd88328d944f9d82b30cafd2a1c911bddff0b8bccc8dc9dd5e45b7c/pot-0.9.5.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-11-07 10:05:05",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "PythonOT",
    "github_project": "POT",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "circle": true,
    "lcname": "pot"
}
        
Elapsed time: 1.45191s