Skip to main content

A Python wrapper for Ofir Pele and Michael Werman's implementation of the Earth Mover's Distance.

Project description

Build status badge Python versions badge

PyEMD: Fast EMD for Python

PyEMD is a Python wrapper for Ofir Pele and Michael Werman’s implementation of the Earth Mover’s Distance that allows it to be used with NumPy. If you use this code, please cite the papers listed at the end of this document.

Installation

pip install pyemd

Usage

>>> from pyemd import emd
>>> import numpy as np
>>> first_histogram = np.array([0.0, 1.0])
>>> second_histogram = np.array([5.0, 3.0])
>>> distance_matrix = np.array([[0.0, 0.5],
...                             [0.5, 0.0]])
>>> emd(first_histogram, second_histogram, distance_matrix)
3.5

You can also get the associated minimum-cost flow:

>>> from pyemd import emd_with_flow
>>> emd_with_flow(first_histogram, second_histogram, distance_matrix)
(3.5, [[0.0, 0.0], [0.0, 1.0]])

You can also calculate the EMD directly from two arrays of observations:

>>> from pyemd import emd_samples
>>> first_array = [1, 2, 3, 4]
>>> second_array = [2, 3, 4, 5]
>>> emd_samples(first_array, second_array, bins=2)
0.5

API Documentation

emd()

emd(first_histogram,
    second_histogram,
    distance_matrix,
    extra_mass_penalty=-1.0)

Arguments:

  • first_histogram (np.ndarray): A 1D array of type np.float64 of length N.

  • second_histogram (np.ndarray): A 1D array of np.float64 of length N.

  • distance_matrix (np.ndarray): A 2D array of np.float64, of size at least N × N. This defines the underlying metric, or ground distance, by giving the pairwise distances between the histogram bins. NOTE: It must represent a metric; there is no warning if it doesn’t.

Keyword Arguments:

  • extra_mass_penalty (float): The penalty for extra mass. If you want the resulting distance to be a metric, it should be at least half the diameter of the space (maximum possible distance between any two points). If you want partial matching you can set it to zero (but then the resulting distance is not guaranteed to be a metric). The default value is -1.0, which means the maximum value in the distance matrix is used.

Returns: (float) The EMD value.


emd_with_flow()

emd_with_flow(first_histogram,
              second_histogram,
              distance_matrix,
              extra_mass_penalty=-1.0)

Arguments are the same as for emd().

Returns: (tuple(float, list(list(float)))) The EMD value and the associated minimum-cost flow.


emd_samples()

emd_samples(first_array,
            second_array,
            extra_mass_penalty=-1.0,
            distance='euclidean',
            normalized=True,
            bins='auto',
            range=None)

Arguments:

  • first_array (Iterable): An array of samples used to generate a histogram.

  • second_array (Iterable): An array of samples used to generate a histogram.

Keyword Arguments:

  • extra_mass_penalty (float): Same as for emd().

  • distance (string or function): A string or function implementing a metric on a 1D np.ndarray. Defaults to the Euclidean distance. Currently limited to ‘euclidean’ or your own function, which must take a 1D array and return a square 2D array of pairwise distances.

  • normalized (boolean): If true (default), treat histograms as fractions of the dataset. If false, treat histograms as counts. In the latter case the EMD will vary greatly by array length.

  • bins (int or string): The number of bins to include in the generated histogram. If a string, must be one of the bin selection algorithms accepted by np.histogram(). Defaults to 'auto', which gives the maximum of the ‘sturges’ and ‘fd’ estimators.

  • range (tuple(int, int)): The lower and upper range of the bins, passed to numpy.histogram(). Defaults to the range of the union of first_array and second_array. Note: if the given range is not a superset of the default range, no warning will be given.

Returns: (float) The EMD value between the histograms of first_array and second_array.


Limitations and Caveats

  • emd() and emd_with_flow():

    • The distance_matrix is assumed to represent a metric; there is no check to ensure that this is true. See the documentation in pyemd/lib/emd_hat.hpp for more information.

    • The histograms and distance matrix must be numpy arrays of type np.float64. The original C++ template function can accept any numerical C++ type, but this wrapper only instantiates the template with double (Cython converts np.float64 to double). If there’s demand, I can add support for other types.

  • emd_with_flow():

    • The flow matrix does not contain the flows to/from the extra mass bin.

  • emd_samples():

    • With numpy < 1.15.0, using the default bins='auto' results in an extra call to np.histogram() to determine the bin lengths, since the NumPy bin-selectors are not exposed in the public API. For performance, you may want to set the bins yourself. If numpy >= 1.15 is available, np.histogram_bin_edges() is called instead, which is more efficient.

Credit

  • All credit for the actual algorithm and implementation goes to Ofir Pele and Michael Werman. See the relevant paper.

  • Thanks to the Cython developers for making this kind of wrapper relatively easy to write.

Please cite these papers if you use this code:

Ofir Pele and Michael Werman. Fast and robust earth mover’s distances. Proc. 2009 IEEE 12th Int. Conf. on Computer Vision, Kyoto, Japan, 2009, pp. 460-467.

@INPROCEEDINGS{pele2009,
  title={Fast and robust earth mover's distances},
  author={Pele, Ofir and Werman, Michael},
  booktitle={2009 IEEE 12th International Conference on Computer Vision},
  pages={460--467},
  year={2009},
  month={September},
  organization={IEEE}
}

Ofir Pele and Michael Werman. A linear time histogram metric for improved SIFT matching. Computer Vision - ECCV 2008, Marseille, France, 2008, pp. 495-508.

@INPROCEEDINGS{pele2008,
  title={A linear time histogram metric for improved sift matching},
  author={Pele, Ofir and Werman, Michael},
  booktitle={Computer Vision--ECCV 2008},
  pages={495--508},
  year={2008},
  month={October},
  publisher={Springer}
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyemd-1.0.0.tar.gz (87.2 kB view details)

Uploaded Source

Built Distributions

pyemd-1.0.0-cp311-cp311-win_amd64.whl (148.0 kB view details)

Uploaded CPython 3.11 Windows x86-64

pyemd-1.0.0-cp311-cp311-win32.whl (144.1 kB view details)

Uploaded CPython 3.11 Windows x86

pyemd-1.0.0-cp311-cp311-musllinux_1_1_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.11 musllinux: musl 1.1+ x86-64

pyemd-1.0.0-cp311-cp311-musllinux_1_1_i686.whl (1.2 MB view details)

Uploaded CPython 3.11 musllinux: musl 1.1+ i686

pyemd-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (666.6 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

pyemd-1.0.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (653.8 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ i686

pyemd-1.0.0-cp311-cp311-macosx_10_9_x86_64.whl (164.6 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

pyemd-1.0.0-cp310-cp310-win_amd64.whl (147.9 kB view details)

Uploaded CPython 3.10 Windows x86-64

pyemd-1.0.0-cp310-cp310-win32.whl (143.9 kB view details)

Uploaded CPython 3.10 Windows x86

pyemd-1.0.0-cp310-cp310-musllinux_1_1_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

pyemd-1.0.0-cp310-cp310-musllinux_1_1_i686.whl (1.2 MB view details)

Uploaded CPython 3.10 musllinux: musl 1.1+ i686

pyemd-1.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (662.6 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

pyemd-1.0.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (651.3 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686

pyemd-1.0.0-cp310-cp310-macosx_10_9_x86_64.whl (165.7 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

pyemd-1.0.0-cp39-cp39-win_amd64.whl (148.7 kB view details)

Uploaded CPython 3.9 Windows x86-64

pyemd-1.0.0-cp39-cp39-win32.whl (144.0 kB view details)

Uploaded CPython 3.9 Windows x86

pyemd-1.0.0-cp39-cp39-musllinux_1_1_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

pyemd-1.0.0-cp39-cp39-musllinux_1_1_i686.whl (1.2 MB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

pyemd-1.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (675.0 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

pyemd-1.0.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (663.0 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686

pyemd-1.0.0-cp39-cp39-macosx_10_9_x86_64.whl (165.0 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

pyemd-1.0.0-cp38-cp38-win_amd64.whl (158.5 kB view details)

Uploaded CPython 3.8 Windows x86-64

pyemd-1.0.0-cp38-cp38-win32.whl (154.0 kB view details)

Uploaded CPython 3.8 Windows x86

pyemd-1.0.0-cp38-cp38-musllinux_1_1_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ x86-64

pyemd-1.0.0-cp38-cp38-musllinux_1_1_i686.whl (1.3 MB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ i686

pyemd-1.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (690.8 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

pyemd-1.0.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl (679.0 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ i686

pyemd-1.0.0-cp38-cp38-macosx_10_9_x86_64.whl (174.2 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

pyemd-1.0.0-cp37-cp37m-win_amd64.whl (157.9 kB view details)

Uploaded CPython 3.7m Windows x86-64

pyemd-1.0.0-cp37-cp37m-win32.whl (153.3 kB view details)

Uploaded CPython 3.7m Windows x86

pyemd-1.0.0-cp37-cp37m-musllinux_1_1_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.7m musllinux: musl 1.1+ x86-64

pyemd-1.0.0-cp37-cp37m-musllinux_1_1_i686.whl (1.2 MB view details)

Uploaded CPython 3.7m musllinux: musl 1.1+ i686

pyemd-1.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (667.4 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

pyemd-1.0.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl (654.6 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ i686

pyemd-1.0.0-cp37-cp37m-macosx_10_9_x86_64.whl (175.2 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

File details

Details for the file pyemd-1.0.0.tar.gz.

File metadata

  • Download URL: pyemd-1.0.0.tar.gz
  • Upload date:
  • Size: 87.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.9

File hashes

Hashes for pyemd-1.0.0.tar.gz
Algorithm Hash digest
SHA256 b42b5ae7b2d15b1d4dee63810ea798a39217e8a76b7b49c0eb63a84e0fd900fe
MD5 f3ccd8871141430fe8e9225e8f801a52
BLAKE2b-256 1ad591492007e786a7fbcbba8423cd3637ea9311c4844aaf753d8e2ba086e48a

See more details on using hashes here.

File details

Details for the file pyemd-1.0.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: pyemd-1.0.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 148.0 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.9

File hashes

Hashes for pyemd-1.0.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 144b7b3510845e25b42c08057265121970f30aaa3cbbe5c3ed37ce2a8bb1732c
MD5 2e94630f7aff13e77a50de61ebddac06
BLAKE2b-256 81c0d567e25ecfd9aeb1e4cfb2971211f643ad3a5a35bd5c8284ef22021ee660

See more details on using hashes here.

File details

Details for the file pyemd-1.0.0-cp311-cp311-win32.whl.

File metadata

  • Download URL: pyemd-1.0.0-cp311-cp311-win32.whl
  • Upload date:
  • Size: 144.1 kB
  • Tags: CPython 3.11, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.9

File hashes

Hashes for pyemd-1.0.0-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 4a79fecf151c508405838bfa47c0f42f23e898be2c8455a36f9545335b233f6a
MD5 0e40445a757f172fcb3a74e60615eef0
BLAKE2b-256 202bec3ae2e2123927b5a1fd761ccb542006137f62b8ed1ffb448c139d2e31fe

See more details on using hashes here.

File details

Details for the file pyemd-1.0.0-cp311-cp311-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pyemd-1.0.0-cp311-cp311-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 12e973937aeefe09e0e9b8f3e9799e223207e7634d1e387d7266adadc062e590
MD5 3818e26732e87e2bce5cf458fdb9a9a1
BLAKE2b-256 86b7bf7875f3fb30ce9dc5119967a7cf3a1e233e4f2b99ebbbd758be479b325d

See more details on using hashes here.

File details

Details for the file pyemd-1.0.0-cp311-cp311-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for pyemd-1.0.0-cp311-cp311-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 6a4c7863f72d8d8174c642060af7623793140bf94ff0e6bf3d757383bf930ffb
MD5 45f0adfc107e167f7862154efb0e3e89
BLAKE2b-256 fd26e8ad349c8dad38d672c99ddbc047c536d264363c7bd289381496dc101da7

See more details on using hashes here.

File details

Details for the file pyemd-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyemd-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e6dc00bca8ce4e1d1b82a28b41cf3215dc4f35296dd5da4079ead586dd3f82c0
MD5 525cc2508347310bdb7369facf283923
BLAKE2b-256 fb8f31dea0b9a6825a3806f96ca179790613b6e13041310e3decb172af6a51ef

See more details on using hashes here.

File details

Details for the file pyemd-1.0.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pyemd-1.0.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 613805cbba59a739a282e85c2db873d7b0c5e85fd924c9c16777f8b04034bed1
MD5 b855265ac712778708adc2be5ae5f6a0
BLAKE2b-256 516b15ea48e73084a8aad8be1e32b759e528c0a4a2b34cf3c7bbf6b2b437bb46

See more details on using hashes here.

File details

Details for the file pyemd-1.0.0-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pyemd-1.0.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 24939dd2169323c2f11c221b6dfdef108cfd0db127f16f4e8f25532f0107a664
MD5 ad0daeae919ef0470f9b79431ea102ec
BLAKE2b-256 cd72971e23faf872d6e36d554f2a67c93142581d8bea4906ce658f84a76a03b9

See more details on using hashes here.

File details

Details for the file pyemd-1.0.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: pyemd-1.0.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 147.9 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.9

File hashes

Hashes for pyemd-1.0.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 04cc05a25128ac9b516c0251ef9b17d583bf6ec1787eaed6eac0b6716153b113
MD5 090dacd757ac26ad79e2288098907c89
BLAKE2b-256 77419c4665174c1c85af29e0a517df7ec1494b0988f971096867ecdb00270e44

See more details on using hashes here.

File details

Details for the file pyemd-1.0.0-cp310-cp310-win32.whl.

File metadata

  • Download URL: pyemd-1.0.0-cp310-cp310-win32.whl
  • Upload date:
  • Size: 143.9 kB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.9

File hashes

Hashes for pyemd-1.0.0-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 6d52b8e133666afc81e2084ebcb06fc52b12a622af2224ab901474725a1ce3e1
MD5 78a4dafc0313cdefdb069fc8065f09eb
BLAKE2b-256 b0136de651156fa4c4dde95733091eec915d20efb9f134a7367e4c62f5b59731

See more details on using hashes here.

File details

Details for the file pyemd-1.0.0-cp310-cp310-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pyemd-1.0.0-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 a7e4d6a841e91f5e4af1c2cca79a926da58b1f4544e3f24617863d494aed4874
MD5 c6eab52aa24ad0f026489c91f1eb9767
BLAKE2b-256 caa01f597a3e37fe5883fa3c5341395790dd72ed2d78dba47b3df4ef7004a312

See more details on using hashes here.

File details

Details for the file pyemd-1.0.0-cp310-cp310-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for pyemd-1.0.0-cp310-cp310-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 dee4e4da82b3e035d23d39e97b2b04d7f20200eaf355cd73d9ccee705638e74d
MD5 64075d7ce79e95f21a0c624cc5e50fe2
BLAKE2b-256 05e3fa28b2a3bcc9f6c749d503599544d9df34ce62b0078759220a84f8e3d7b7

See more details on using hashes here.

File details

Details for the file pyemd-1.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyemd-1.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8eb6fb4aba6a8cde4fe32ea29288e367b625685af82ef3a22200e04f7c267993
MD5 9810e46dfb576a076e36b6dc66184fde
BLAKE2b-256 e5f2fe8a2a9c3ca6accabb89332aa8e89b7e1b408482ae3ab6816aa7bd1f56b0

See more details on using hashes here.

File details

Details for the file pyemd-1.0.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pyemd-1.0.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 3d8d5ba47954a8c67dc22f0a7e129a7dc009a614e4e86d5e8938bfc4fdfa8800
MD5 53f5050a2b750d602d0d51e993adf691
BLAKE2b-256 b8223294b73e8c639e581b8b1c2eb5c2120c049212b5544e2d74bf20cfc2618e

See more details on using hashes here.

File details

Details for the file pyemd-1.0.0-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pyemd-1.0.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 5771bb80b11b8d59bcb3e09ed4aca0d3ee4c1dd23d5bce21360ad539c86fda01
MD5 b8264de41dacb497c2e0e8cce3957717
BLAKE2b-256 af30969c7f3a77a2a4f32654dd7516a7cb3702736208daef7597647ef7038ed3

See more details on using hashes here.

File details

Details for the file pyemd-1.0.0-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: pyemd-1.0.0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 148.7 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.9

File hashes

Hashes for pyemd-1.0.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 9cc04047c16a968e57f70621ceb2714d1045e9a1cdd229d257e5b615d4f41c4e
MD5 bdf30f9ae217b27119a56d00532c9c77
BLAKE2b-256 b76408855a64a1ecda3ec0f8cdbf8600203ffb0685ee819a71d2f2d422bfb821

See more details on using hashes here.

File details

Details for the file pyemd-1.0.0-cp39-cp39-win32.whl.

File metadata

  • Download URL: pyemd-1.0.0-cp39-cp39-win32.whl
  • Upload date:
  • Size: 144.0 kB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.9

File hashes

Hashes for pyemd-1.0.0-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 60345f2cae22f9e7ccef054dd7d9a1a18d74c97599176005846fc023805e6f56
MD5 adcdbb590ba1267dc941e234df5f78f3
BLAKE2b-256 2ef13de2e49065e7f5e76ac8f2bb809fbbea9a6adf49db2b422a3dd5624d89c5

See more details on using hashes here.

File details

Details for the file pyemd-1.0.0-cp39-cp39-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pyemd-1.0.0-cp39-cp39-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 fa9920311484255854ca41afbe3a87a812324948559644d5a3c9fea105b924c9
MD5 b97c8772bc87cce208a14e6b9641cc36
BLAKE2b-256 5594b0937bd72312d8d7fa73cfeb4668f113f076278946b7d264fe0ec22efeef

See more details on using hashes here.

File details

Details for the file pyemd-1.0.0-cp39-cp39-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for pyemd-1.0.0-cp39-cp39-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 dec3fa96409e543baf9405eb5e818aca6ce4687ff6838ef9e962a4d6cf0eadae
MD5 64189ef823e15aa6c355aabcf8708aa0
BLAKE2b-256 85ae2f177220b66859e9e5092d10e2c0e378b68503ff561fedfd464a9406efb0

See more details on using hashes here.

File details

Details for the file pyemd-1.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyemd-1.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8dc6b5cba569b5c33a58a793e1afad8b1eae58e1cd50cf5d83088aabeab23522
MD5 9ea7d22d697eb6bf7b141895d78f7f42
BLAKE2b-256 9561e3c324fbbfd835d4872405e4aac563205b607a1ede64b5b441446a33130a

See more details on using hashes here.

File details

Details for the file pyemd-1.0.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pyemd-1.0.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 62ede4bd9038cd4585748913cba51e5da87fc4c1c06f3c330a06e56570454830
MD5 f7613d18cbde76b438154f53498c7c72
BLAKE2b-256 2c2e6bfc51d062ca1dced0bb77e1f10f39f5be610140b5e5e4432ea897e77d8b

See more details on using hashes here.

File details

Details for the file pyemd-1.0.0-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pyemd-1.0.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 9ac47d3ca010e7f7ae8cff7a539af50de907c38f8674134a55bcb9fe17b2fa41
MD5 7e6482d9c71ce847d79ef3aac9436673
BLAKE2b-256 22a453245fe9d0247e4c0596ee6620c3d22b3576c5dd72da54adce2a51fa43a9

See more details on using hashes here.

File details

Details for the file pyemd-1.0.0-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: pyemd-1.0.0-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 158.5 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.9

File hashes

Hashes for pyemd-1.0.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 cf857c0dfc5b79cdecea928b162346d95af437c1a8b6287a0fdcb9b8630a50bf
MD5 12db172016cf3f9ab29d15bcb65a200e
BLAKE2b-256 dfa7015a095d78e781fb6fb8611b61153de1f754af95e44e54d10107a674d714

See more details on using hashes here.

File details

Details for the file pyemd-1.0.0-cp38-cp38-win32.whl.

File metadata

  • Download URL: pyemd-1.0.0-cp38-cp38-win32.whl
  • Upload date:
  • Size: 154.0 kB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.9

File hashes

Hashes for pyemd-1.0.0-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 9693942882199154afe1fb6ad307ff7f96cf5272405e893ffefdb563a7e7829c
MD5 e6ff3fbaef6983a52d3fc46066567ef9
BLAKE2b-256 b2a0b024fa7846190091646d1330aee9f923ce5bef29a720c1be797be180634f

See more details on using hashes here.

File details

Details for the file pyemd-1.0.0-cp38-cp38-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pyemd-1.0.0-cp38-cp38-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 5b199dfa85a33e01a2c49ce128059465748a3bd8db7d6008b8cd4a607c350fbf
MD5 a44d1664cb84e7a50cb2f07a98528fa2
BLAKE2b-256 d5ff838354be4cabb1e342ffd1d67da84c44cc463ed3023d390d6368fa4d04e7

See more details on using hashes here.

File details

Details for the file pyemd-1.0.0-cp38-cp38-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for pyemd-1.0.0-cp38-cp38-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 2f1a84e3c2a4e3dccb08d01394886e2f99d7c167268f8fc0a93ee281fda5aa2c
MD5 0b9122e1845ce2b420640f341356610a
BLAKE2b-256 48aa5080cf9d64d375e743405dc25208d0456ea7ec38233825e175aea7df2a26

See more details on using hashes here.

File details

Details for the file pyemd-1.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyemd-1.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 54f6f9592326dd24d547cb3320fff7a99534e946676b88e37ced8912a93af313
MD5 878d5bf3d6f825c962e0b3ae52ede321
BLAKE2b-256 2388e9f640b6b3586ad6fde65e8c19ad8fe81b959c38d941eb376541d0c52364

See more details on using hashes here.

File details

Details for the file pyemd-1.0.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pyemd-1.0.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 13626f75f9e127fcccf88f7c39d073bf7a924946f363440d443a8cea033d08c2
MD5 1eb93924bac43cf18695fa3318582e9c
BLAKE2b-256 ac936080a23c54e27ed4a452b63eb99161b986ff8b2e6d13bb5b11db19acc0e6

See more details on using hashes here.

File details

Details for the file pyemd-1.0.0-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pyemd-1.0.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 6cd53a94d0e3169b9c94b4e56a7f6f0cb9b2a5d54c61dae7d31255fe9f398f54
MD5 3e3af34e7e8b6a4f5f2e177648d5fa2a
BLAKE2b-256 9e7b4b02e27ec3c76ffeae4cc07f14e9847dd3dea01213e364a025d327c43077

See more details on using hashes here.

File details

Details for the file pyemd-1.0.0-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: pyemd-1.0.0-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 157.9 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.9

File hashes

Hashes for pyemd-1.0.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 614398c2c3ab22cc8f1ada918ba5acf81ccba936d5babb5b1c2d1bf2bd870f3d
MD5 70076ac928d5150e13cb01eaa8b6e64e
BLAKE2b-256 e0cf520a07fdc0edfa93befdcc74afdb9624db16fe9f95edb897936999972d0f

See more details on using hashes here.

File details

Details for the file pyemd-1.0.0-cp37-cp37m-win32.whl.

File metadata

  • Download URL: pyemd-1.0.0-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 153.3 kB
  • Tags: CPython 3.7m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.9

File hashes

Hashes for pyemd-1.0.0-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 c6fb28ae439653122b16fa5d145988828291b317b737bb1d4edc56a3047a68dc
MD5 4b864435161837b89b41a3afac9294d4
BLAKE2b-256 447527c0fa3f9c26b43bafa3ba80fb53c39732dc074bc38fb1cf7e798f09afff

See more details on using hashes here.

File details

Details for the file pyemd-1.0.0-cp37-cp37m-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pyemd-1.0.0-cp37-cp37m-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 81236d3a5dda727456120b26208372e4dce8d77a92ebd3b05c6b63ded3682193
MD5 7606ef7f6c3205cf5e62635076fe56b8
BLAKE2b-256 3005aa783333b56fac8c24b01e0221bfad960d517830163ac2db16edcf3766f7

See more details on using hashes here.

File details

Details for the file pyemd-1.0.0-cp37-cp37m-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for pyemd-1.0.0-cp37-cp37m-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 ae93dd220b0cd6d34ccb4443d1eefdfbebab480f2fe65bbafc8476c28acbba13
MD5 1c6fb47fc340cb780df9168f923fe50d
BLAKE2b-256 488b60ebdbedb0b2684e440ca034b20fb1d9b82d2c972993f540d769a6cfdc7b

See more details on using hashes here.

File details

Details for the file pyemd-1.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyemd-1.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6c41912f419995438d4526a492db4e4fd32a57e157cb550cd2fce508a2536596
MD5 cdad17b338fe22b28778046ffbc3962c
BLAKE2b-256 6c69b0c18fc6fcec6b2d0394f5ebcabf610fae30be01d866ef20273ad9a89554

See more details on using hashes here.

File details

Details for the file pyemd-1.0.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pyemd-1.0.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 600290ceb7e95eb69e855ee6553ff98ffa0879213d4f5d518da35377c24e3991
MD5 7f9a9c6c2793d45c036f0cbb547d361a
BLAKE2b-256 ff83a0613e73fe191d92c8c00974650e8916b64d302b5a0ee436bdbe3df4c05e

See more details on using hashes here.

File details

Details for the file pyemd-1.0.0-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pyemd-1.0.0-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 47efc1e9d7555d32a4ed46529b03df5d473c4602ed250a28d680dd6283778e7a
MD5 ce23c49dbd4a1cdedfa60c970871db50
BLAKE2b-256 04014eb502694bfe1e4e9b1fdf0dd819cbbd16ab6380d767d4052bdcffe790b3

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page