# MetroHash
Python wrapper for [MetroHash](https://github.com/jandrewrogers/MetroHash), a
fast non-cryptographic hash function.
[![Build Status](https://img.shields.io/github/actions/workflow/status/escherba/python-metrohash/build.yml?branch=master)](https://github.com/escherba/python-metrohash/actions/workflows/build.yml)
[![Latest
Version](https://img.shields.io/pypi/v/metrohash.svg)](https://pypi.python.org/pypi/metrohash)
[![Downloads](https://img.shields.io/pypi/dm/metrohash.svg)](https://pypistats.org/packages/metrohash)
[![License](https://img.shields.io/pypi/l/metrohash.svg)](https://opensource.org/licenses/Apache-2.0)
[![Supported Python
versions](https://img.shields.io/pypi/pyversions/metrohash.svg)](https://pypi.python.org/pypi/metrohash)
## Getting Started
To use this package in your program, simply type
``` bash
pip install metrohash
```
After that, you should be able to import the module and do things with
it (see usage example below).
## Usage Examples
### Stateless hashing
This package provides Python interfaces to 64- and 128-bit
implementations of MetroHash algorithm. For stateless hashing, it
exports `metrohash64` and `metrohash128` functions. Both take a value to
be hashed and an optional `seed` parameter:
``` python
>>> import metrohash
...
>>> metrohash.hash64_int("abc", seed=0)
17099979927131455419
>>> metrohash.hash128_int("abc")
182995299641628952910564950850867298725
```
### Incremental hashing
Unlike its cousins CityHash and FarmHash, MetroHash allows incremental
(stateful) hashing. For incremental hashing, use `MetroHash64` and
`MetroHash128` classes. Incremental hashing is associative and
guarantees that any combination of input slices will result in the same
final hash value. This is useful for processing large inputs and stream
data. Example with two slices:
``` python
>>> mh = metrohash.MetroHash64()
>>> mh.update("Nobody inspects")
>>> mh.update(" the spammish repetition")
>>> mh.intdigest()
7851180100622203313
```
The resulting hash value above should be the same as in:
``` python
>>> mh = metrohash.MetroHash64()
>>> mh.update("Nobody inspects the spammish repetition")
>>> mh.intdigest()
7851180100622203313
```
### Fast hashing of NumPy arrays
The Python [Buffer
Protocol](https://docs.python.org/3/c-api/buffer.html) allows Python
objects to expose their data as raw byte arrays to other objects, for
fast access without copying to a separate location in memory. Among
others, NumPy is a major framework that supports this protocol.
All hashing functions in this packege will read byte arrays from objects
that expose them via the buffer protocol. Here is an example showing
hashing of a 4D NumPy array:
``` python
>>> import numpy as np
>>> arr = np.zeros((256, 256, 4))
>>> metrohash.hash64_int(arr)
12125832280816116063
```
The arrays need to be contiguous for this to work. To convert a
non-contiguous array, use NumPy's `ascontiguousarray()` function.
## Development
### Local workflow
For those who want to contribute, here is a quick start using some
makefile commands:
``` bash
git clone https://github.com/escherba/python-metrohash.git
cd python-metrohash
make env # create a virtual environment
make test # run Python tests
make cpp-test # run C++ tests
make shell # enter IPython shell
```
To find out which Make targets are available, type:
``` bash
make help
```
### Distribution
The wheels are built using [cibuildwheel](https://cibuildwheel.readthedocs.io/)
and are distributed to PyPI using GitHub actions. The wheels contain compiled
binaries and are available for the following platforms: windows-amd64,
ubuntu-x86, linux-x86\_64, linux-aarch64, and macosx-x86\_64.
## See Also
For other fast non-cryptographic hash functions available as Python
extensions, see [FarmHash](https://github.com/escherba/python-cityhash)
and [MurmurHash](https://github.com/hajimes/mmh3).
## Authors
The MetroHash algorithm and C++ implementation is due to J. Andrew
Rogers. The Python bindings for it were written by Eugene Scherba.
## License
This software is licensed under the [Apache License,
Version 2.0](https://opensource.org/licenses/Apache-2.0). See the
included LICENSE file for details.
Raw data
{
"_id": null,
"home_page": "https://github.com/escherba/python-metrohash",
"name": "metrohash",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.6",
"maintainer_email": "",
"keywords": "hash,hashing,metrohash,cython",
"author": "Eugene Scherba",
"author_email": "escherba+metrohash@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/54/b6/6d93fe1bb8871537a7fdb441c66c3fa2a5caf095653a7c78ea441f7a95c0/metrohash-0.3.3.tar.gz",
"platform": null,
"description": "# MetroHash\n\nPython wrapper for [MetroHash](https://github.com/jandrewrogers/MetroHash), a\nfast non-cryptographic hash function.\n\n[![Build Status](https://img.shields.io/github/actions/workflow/status/escherba/python-metrohash/build.yml?branch=master)](https://github.com/escherba/python-metrohash/actions/workflows/build.yml)\n[![Latest\nVersion](https://img.shields.io/pypi/v/metrohash.svg)](https://pypi.python.org/pypi/metrohash)\n[![Downloads](https://img.shields.io/pypi/dm/metrohash.svg)](https://pypistats.org/packages/metrohash)\n[![License](https://img.shields.io/pypi/l/metrohash.svg)](https://opensource.org/licenses/Apache-2.0)\n[![Supported Python\nversions](https://img.shields.io/pypi/pyversions/metrohash.svg)](https://pypi.python.org/pypi/metrohash)\n\n## Getting Started\n\nTo use this package in your program, simply type\n\n``` bash\npip install metrohash\n```\n\nAfter that, you should be able to import the module and do things with\nit (see usage example below).\n\n## Usage Examples\n\n### Stateless hashing\n\nThis package provides Python interfaces to 64- and 128-bit\nimplementations of MetroHash algorithm. For stateless hashing, it\nexports `metrohash64` and `metrohash128` functions. Both take a value to\nbe hashed and an optional `seed` parameter:\n\n``` python\n>>> import metrohash\n...\n>>> metrohash.hash64_int(\"abc\", seed=0)\n17099979927131455419\n>>> metrohash.hash128_int(\"abc\")\n182995299641628952910564950850867298725\n\n```\n\n### Incremental hashing\n\nUnlike its cousins CityHash and FarmHash, MetroHash allows incremental\n(stateful) hashing. For incremental hashing, use `MetroHash64` and\n`MetroHash128` classes. Incremental hashing is associative and\nguarantees that any combination of input slices will result in the same\nfinal hash value. This is useful for processing large inputs and stream\ndata. Example with two slices:\n\n``` python\n>>> mh = metrohash.MetroHash64()\n>>> mh.update(\"Nobody inspects\")\n>>> mh.update(\" the spammish repetition\")\n>>> mh.intdigest()\n7851180100622203313\n\n```\n\nThe resulting hash value above should be the same as in:\n\n``` python\n>>> mh = metrohash.MetroHash64()\n>>> mh.update(\"Nobody inspects the spammish repetition\")\n>>> mh.intdigest()\n7851180100622203313\n\n```\n\n### Fast hashing of NumPy arrays\n\nThe Python [Buffer\nProtocol](https://docs.python.org/3/c-api/buffer.html) allows Python\nobjects to expose their data as raw byte arrays to other objects, for\nfast access without copying to a separate location in memory. Among\nothers, NumPy is a major framework that supports this protocol.\n\nAll hashing functions in this packege will read byte arrays from objects\nthat expose them via the buffer protocol. Here is an example showing\nhashing of a 4D NumPy array:\n\n``` python\n>>> import numpy as np\n>>> arr = np.zeros((256, 256, 4))\n>>> metrohash.hash64_int(arr)\n12125832280816116063\n\n```\n\nThe arrays need to be contiguous for this to work. To convert a\nnon-contiguous array, use NumPy's `ascontiguousarray()` function.\n\n## Development\n\n### Local workflow\n\nFor those who want to contribute, here is a quick start using some\nmakefile commands:\n\n``` bash\ngit clone https://github.com/escherba/python-metrohash.git\ncd python-metrohash\nmake env # create a virtual environment\nmake test # run Python tests\nmake cpp-test # run C++ tests\nmake shell # enter IPython shell\n```\n\nTo find out which Make targets are available, type:\n\n``` bash\nmake help\n```\n\n### Distribution\n\nThe wheels are built using [cibuildwheel](https://cibuildwheel.readthedocs.io/)\nand are distributed to PyPI using GitHub actions. The wheels contain compiled\nbinaries and are available for the following platforms: windows-amd64,\nubuntu-x86, linux-x86\\_64, linux-aarch64, and macosx-x86\\_64.\n\n## See Also\n\nFor other fast non-cryptographic hash functions available as Python\nextensions, see [FarmHash](https://github.com/escherba/python-cityhash)\nand [MurmurHash](https://github.com/hajimes/mmh3).\n\n## Authors\n\nThe MetroHash algorithm and C++ implementation is due to J. Andrew\nRogers. The Python bindings for it were written by Eugene Scherba.\n\n## License\n\nThis software is licensed under the [Apache License,\nVersion 2.0](https://opensource.org/licenses/Apache-2.0). See the\nincluded LICENSE file for details.\n",
"bugtrack_url": null,
"license": "Apache License 2.0",
"summary": "Python bindings for MetroHash, a fast non-cryptographic hash algorithm",
"version": "0.3.3",
"split_keywords": [
"hash",
"hashing",
"metrohash",
"cython"
],
"urls": [
{
"comment_text": "",
"digests": {
"md5": "4ffde5943394606c3b2ad34c818cebc1",
"sha256": "7c68e6f1aab17f40c17df9750d302942244bbfd4de0054eb7936ed56f10c6846"
},
"downloads": -1,
"filename": "metrohash-0.3.3-cp310-cp310-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "4ffde5943394606c3b2ad34c818cebc1",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.6",
"size": 37063,
"upload_time": "2022-12-17T00:50:34",
"upload_time_iso_8601": "2022-12-17T00:50:34.278690Z",
"url": "https://files.pythonhosted.org/packages/d4/75/78ad4a33a7deef197c7d5825d8b655c0b45acc5fdc1fe3978244a1e0bee1/metrohash-0.3.3-cp310-cp310-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "33f0968f74d4d1fc4ccfb77abf43db02",
"sha256": "4856f21f770c88744c8236b7c538068153d3de7ea6ff299ca8ce847442447840"
},
"downloads": -1,
"filename": "metrohash-0.3.3-cp310-cp310-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "33f0968f74d4d1fc4ccfb77abf43db02",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.6",
"size": 35683,
"upload_time": "2022-12-17T00:50:35",
"upload_time_iso_8601": "2022-12-17T00:50:35.893194Z",
"url": "https://files.pythonhosted.org/packages/4c/4b/f30cc273544b82ecd66a53937aba0422699de1d6394f31a6ed1461e5cdcb/metrohash-0.3.3-cp310-cp310-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "6fb198a6f65cd77050027c40747f4f1a",
"sha256": "6a23c5a3734afab33e9eccdfe79b0af75f1b9426b643d61024fe8bb1b105619f"
},
"downloads": -1,
"filename": "metrohash-0.3.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "6fb198a6f65cd77050027c40747f4f1a",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.6",
"size": 190943,
"upload_time": "2022-12-17T00:50:37",
"upload_time_iso_8601": "2022-12-17T00:50:37.650251Z",
"url": "https://files.pythonhosted.org/packages/12/98/69bc10fac6e5997ed0ae9382f561dd25cc8bff7f2bc01eae4ef62b461b59/metrohash-0.3.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "557190bfaf8f32f0074fad2f58385009",
"sha256": "07478d06b181dc225e8ed01f68cdf549899ec5154d158726fc14e701fc19a33f"
},
"downloads": -1,
"filename": "metrohash-0.3.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "557190bfaf8f32f0074fad2f58385009",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.6",
"size": 190739,
"upload_time": "2022-12-17T00:50:39",
"upload_time_iso_8601": "2022-12-17T00:50:39.380222Z",
"url": "https://files.pythonhosted.org/packages/09/d1/f8959759ff20fcaa899658d9a9c9c0a6ed540b5aff6b1a7a524033b4d647/metrohash-0.3.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "0fbc231d9b04328dab239d0841d4676d",
"sha256": "90e8178953f5c0c99e2be46fb978114c3c3c707a1eaf00d2c6e95d78832c51c9"
},
"downloads": -1,
"filename": "metrohash-0.3.3-cp310-cp310-win32.whl",
"has_sig": false,
"md5_digest": "0fbc231d9b04328dab239d0841d4676d",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.6",
"size": 32804,
"upload_time": "2022-12-17T00:50:41",
"upload_time_iso_8601": "2022-12-17T00:50:41.161428Z",
"url": "https://files.pythonhosted.org/packages/2b/23/82cc1987813e7b7c5747c7cace9d7482fe68c785a720104fa30d5d8607a7/metrohash-0.3.3-cp310-cp310-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "afe40f7b7af29b90e4f986a3b60eb876",
"sha256": "06f354b5269687eeef1a845f9f4e8cdca5b64d25a066c80ea9dcf5a2c614c994"
},
"downloads": -1,
"filename": "metrohash-0.3.3-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "afe40f7b7af29b90e4f986a3b60eb876",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.6",
"size": 33054,
"upload_time": "2022-12-17T00:50:42",
"upload_time_iso_8601": "2022-12-17T00:50:42.502108Z",
"url": "https://files.pythonhosted.org/packages/80/4a/5929c6b02c6e272efc506b55e4011af122973943950cfc3f38d798d60542/metrohash-0.3.3-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "3c9cceb91c536c9d95fd1bc50c3f11df",
"sha256": "6d1661188b2083f87227bcabd91523ddd950c2ae63be4b40da948c6da4269f02"
},
"downloads": -1,
"filename": "metrohash-0.3.3-cp311-cp311-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "3c9cceb91c536c9d95fd1bc50c3f11df",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.6",
"size": 37190,
"upload_time": "2022-12-17T00:50:44",
"upload_time_iso_8601": "2022-12-17T00:50:44.404389Z",
"url": "https://files.pythonhosted.org/packages/92/84/50a74191be905ffa56af1221dfa3e92406546eb35db545b2de7e5879331a/metrohash-0.3.3-cp311-cp311-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "607dc3190b68444e0dbf1b058ff744b3",
"sha256": "c727b4edd191a2134d0e79d972efdef7d32e651cbbb54b459d153cafb5525109"
},
"downloads": -1,
"filename": "metrohash-0.3.3-cp311-cp311-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "607dc3190b68444e0dbf1b058ff744b3",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.6",
"size": 35732,
"upload_time": "2022-12-17T00:50:46",
"upload_time_iso_8601": "2022-12-17T00:50:46.048732Z",
"url": "https://files.pythonhosted.org/packages/ed/d4/a9f0b29d7cb10a104acf1ed85fe45f10210b5a3226414e8a37a2f9265d6c/metrohash-0.3.3-cp311-cp311-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "9517c78d73053b88a8b9ff897bc67821",
"sha256": "e2deec525cead0abc3f4aa2174f528f08673563e06658674e50f852a7ba5dc2f"
},
"downloads": -1,
"filename": "metrohash-0.3.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "9517c78d73053b88a8b9ff897bc67821",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.6",
"size": 205163,
"upload_time": "2022-12-17T00:50:47",
"upload_time_iso_8601": "2022-12-17T00:50:47.743257Z",
"url": "https://files.pythonhosted.org/packages/ea/35/c0200e0b53ba003383b570164a6327b2983badc8a803864dcf836beefaa1/metrohash-0.3.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "da562be1521573668322dd629e1266bf",
"sha256": "4ff52007e02927519627d61dd5840a5ad05cc3e933d2b3b7cefe1a8089e2b5c1"
},
"downloads": -1,
"filename": "metrohash-0.3.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "da562be1521573668322dd629e1266bf",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.6",
"size": 205394,
"upload_time": "2022-12-17T00:50:49",
"upload_time_iso_8601": "2022-12-17T00:50:49.621322Z",
"url": "https://files.pythonhosted.org/packages/be/35/f054aa83311ac55465bb866b647718d2fc5bd62849770f830d7bd155549f/metrohash-0.3.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "060832c56653558f88a8ea2e9a87a2c6",
"sha256": "00f7afe5028fcdaad8cf26c3ed432e1da60323e8da53f61bffc405343b37d3d7"
},
"downloads": -1,
"filename": "metrohash-0.3.3-cp311-cp311-win32.whl",
"has_sig": false,
"md5_digest": "060832c56653558f88a8ea2e9a87a2c6",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.6",
"size": 32653,
"upload_time": "2022-12-17T00:50:50",
"upload_time_iso_8601": "2022-12-17T00:50:50.933571Z",
"url": "https://files.pythonhosted.org/packages/d9/8b/4e1b3e79831d6bf79b8ff413e9fd3433cb6e742595ccf0f48508a067d047/metrohash-0.3.3-cp311-cp311-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "6ae847d74a692b9ed7c8d9ea11abda69",
"sha256": "e3ddca7f50e63746e456d3933278aadce9a98d7e9311aada8f02f12814b13db7"
},
"downloads": -1,
"filename": "metrohash-0.3.3-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "6ae847d74a692b9ed7c8d9ea11abda69",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.6",
"size": 32523,
"upload_time": "2022-12-17T00:50:52",
"upload_time_iso_8601": "2022-12-17T00:50:52.269610Z",
"url": "https://files.pythonhosted.org/packages/c0/3a/4728b732b4435c29d7b2590028f067d3ff5f5cbff7ffab2ae33e5b017095/metrohash-0.3.3-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "d8290ecc1569595e25b3257ed11dc3d8",
"sha256": "e41409f06d6b6f910d4a77bdacdf9c4ae4eb5fcfde960d2e5ee9a7b775673527"
},
"downloads": -1,
"filename": "metrohash-0.3.3-cp36-cp36m-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "d8290ecc1569595e25b3257ed11dc3d8",
"packagetype": "bdist_wheel",
"python_version": "cp36",
"requires_python": ">=3.6",
"size": 37816,
"upload_time": "2022-12-17T00:50:54",
"upload_time_iso_8601": "2022-12-17T00:50:54.124780Z",
"url": "https://files.pythonhosted.org/packages/d8/2c/70d649ace021709229adf9018f8c84ce9d25167d8cc37154a1181df78716/metrohash-0.3.3-cp36-cp36m-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "334614c759fe0b71bcd6dd46f78f66fa",
"sha256": "32691614244da194936a80fc56ffbeeb46c7e6bef7a8aedf9d403ab4381adf8c"
},
"downloads": -1,
"filename": "metrohash-0.3.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "334614c759fe0b71bcd6dd46f78f66fa",
"packagetype": "bdist_wheel",
"python_version": "cp36",
"requires_python": ">=3.6",
"size": 183316,
"upload_time": "2022-12-17T00:50:55",
"upload_time_iso_8601": "2022-12-17T00:50:55.469516Z",
"url": "https://files.pythonhosted.org/packages/aa/51/df4b29cd67921e17a3769a95b7b3a801a13a2fd566867846c428e1c787a9/metrohash-0.3.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "2ef5f40730074003361c71ff0ecbdb07",
"sha256": "0d8b4eb678847613cd5763925a8f337bdd4fff94f3265154d422d4058e4ba47b"
},
"downloads": -1,
"filename": "metrohash-0.3.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "2ef5f40730074003361c71ff0ecbdb07",
"packagetype": "bdist_wheel",
"python_version": "cp36",
"requires_python": ">=3.6",
"size": 184158,
"upload_time": "2022-12-17T00:50:56",
"upload_time_iso_8601": "2022-12-17T00:50:56.809035Z",
"url": "https://files.pythonhosted.org/packages/27/f3/d2ca4685e673a7d9d5789018368556e25293aacddf3b6052281d7d09ed57/metrohash-0.3.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "0a435b734cfacfedc0b4237ba8ef0b9c",
"sha256": "cccc6b44ac97e7911562df066f04991403775fca374fa6d493a91142d4a6a6eb"
},
"downloads": -1,
"filename": "metrohash-0.3.3-cp36-cp36m-win32.whl",
"has_sig": false,
"md5_digest": "0a435b734cfacfedc0b4237ba8ef0b9c",
"packagetype": "bdist_wheel",
"python_version": "cp36",
"requires_python": ">=3.6",
"size": 32984,
"upload_time": "2022-12-17T00:50:58",
"upload_time_iso_8601": "2022-12-17T00:50:58.445489Z",
"url": "https://files.pythonhosted.org/packages/7e/e6/0785a9ed64ba015c380bfe179887da9b5002a4650f5ccf3e24b3af41ee29/metrohash-0.3.3-cp36-cp36m-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "8f1d9344564021e191d5d77587087abc",
"sha256": "9e8405c79484e81c8ff5263ffe472e6eeb9c808de07c83da3663159fd6dd1f4e"
},
"downloads": -1,
"filename": "metrohash-0.3.3-cp36-cp36m-win_amd64.whl",
"has_sig": false,
"md5_digest": "8f1d9344564021e191d5d77587087abc",
"packagetype": "bdist_wheel",
"python_version": "cp36",
"requires_python": ">=3.6",
"size": 33551,
"upload_time": "2022-12-17T00:51:00",
"upload_time_iso_8601": "2022-12-17T00:51:00.136438Z",
"url": "https://files.pythonhosted.org/packages/32/99/40619fce783b1c5a12d580cfb7d1a3b24cf8cdda0f594b209905cd7911d2/metrohash-0.3.3-cp36-cp36m-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "1fc67733d6f23805264a1f955066201e",
"sha256": "24f4b41d86f09913eabb1b2bde88f1d9fa0c6076fa16c1b518d3cab2a4bb6029"
},
"downloads": -1,
"filename": "metrohash-0.3.3-cp37-cp37m-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "1fc67733d6f23805264a1f955066201e",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.6",
"size": 36934,
"upload_time": "2022-12-17T00:51:01",
"upload_time_iso_8601": "2022-12-17T00:51:01.901356Z",
"url": "https://files.pythonhosted.org/packages/a0/48/608329bf41c1370938870bc54e0a5d00093f32a71a7d5db269cd46a0c704/metrohash-0.3.3-cp37-cp37m-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "e1235040d3a4b36b3048d4680cb7d926",
"sha256": "c8e536098802143a576a558f5b2e432eb17fc5c7649a465f96df736f0125f81d"
},
"downloads": -1,
"filename": "metrohash-0.3.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "e1235040d3a4b36b3048d4680cb7d926",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.6",
"size": 184871,
"upload_time": "2022-12-17T00:51:03",
"upload_time_iso_8601": "2022-12-17T00:51:03.582879Z",
"url": "https://files.pythonhosted.org/packages/e8/10/d168a05543435b3324bced33f5e7742cbe1eeec34957100050bcd7ea2a61/metrohash-0.3.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "19f4f068326c38a74123396449a66b8c",
"sha256": "f327c4e4d93c42a6750ec26dfee9308776776b8d9718018d7f3a9b7d6afc1594"
},
"downloads": -1,
"filename": "metrohash-0.3.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "19f4f068326c38a74123396449a66b8c",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.6",
"size": 185639,
"upload_time": "2022-12-17T00:51:05",
"upload_time_iso_8601": "2022-12-17T00:51:05.622280Z",
"url": "https://files.pythonhosted.org/packages/a2/cd/b9051d63d7904c17708146012492cdc472f544765d6d308332aff2ae722e/metrohash-0.3.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "36094bcd7d9e7b65312cea2940cff2e0",
"sha256": "b20c505b22509fa2024efc986630660b1cecb8c25473db98ef51d60842ab7d3e"
},
"downloads": -1,
"filename": "metrohash-0.3.3-cp37-cp37m-win32.whl",
"has_sig": false,
"md5_digest": "36094bcd7d9e7b65312cea2940cff2e0",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.6",
"size": 32941,
"upload_time": "2022-12-17T00:51:07",
"upload_time_iso_8601": "2022-12-17T00:51:07.022352Z",
"url": "https://files.pythonhosted.org/packages/21/61/491b127671aa4bdd885120925e94a6855cc023c4e1bb63f1d81d0b41d2a0/metrohash-0.3.3-cp37-cp37m-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "7bf978bfc364ce6fe2cbef75c5b1c9b2",
"sha256": "668fc5e59daf6f2ed9db6c560ad09cc6c8993cac9af74da9d9068a06102078ca"
},
"downloads": -1,
"filename": "metrohash-0.3.3-cp37-cp37m-win_amd64.whl",
"has_sig": false,
"md5_digest": "7bf978bfc364ce6fe2cbef75c5b1c9b2",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.6",
"size": 33549,
"upload_time": "2022-12-17T00:51:08",
"upload_time_iso_8601": "2022-12-17T00:51:08.678101Z",
"url": "https://files.pythonhosted.org/packages/ad/ac/a0fa91d9b32ca49efb6dd47943747685158b1f6cb9d585d90c2b4207825a/metrohash-0.3.3-cp37-cp37m-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "f1e9a5263ac270739b76f4e4aec7ecab",
"sha256": "1039636ffb7fec3dd5e03bc28f594a450a462e1a1edfff5f723bbcae02a1b2d4"
},
"downloads": -1,
"filename": "metrohash-0.3.3-cp38-cp38-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "f1e9a5263ac270739b76f4e4aec7ecab",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.6",
"size": 37268,
"upload_time": "2022-12-17T00:51:10",
"upload_time_iso_8601": "2022-12-17T00:51:10.042935Z",
"url": "https://files.pythonhosted.org/packages/91/bc/aa6e0862b4c761d92485b7fecab7dd8c8f71915e0fe37e715d74fd68b68c/metrohash-0.3.3-cp38-cp38-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "3b68b4bc6231cc34da703003ddcd38fc",
"sha256": "8360c996e3c116e5c0727c2760e4c3ee4b40386dd1f8ae8fd612f78f038d1ffe"
},
"downloads": -1,
"filename": "metrohash-0.3.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "3b68b4bc6231cc34da703003ddcd38fc",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.6",
"size": 195224,
"upload_time": "2022-12-17T00:51:11",
"upload_time_iso_8601": "2022-12-17T00:51:11.735432Z",
"url": "https://files.pythonhosted.org/packages/0f/29/2dce9f347a415ad0bbfb7f013963c5c5198aa33c5d7d71b7b7bb3c40a0e6/metrohash-0.3.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "75d68972dc4ae69588f552a11a1cce83",
"sha256": "42591d67282e23da0b813614fe97e196449aadebc2ad88d6aa727f2f43694679"
},
"downloads": -1,
"filename": "metrohash-0.3.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "75d68972dc4ae69588f552a11a1cce83",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.6",
"size": 194439,
"upload_time": "2022-12-17T00:51:13",
"upload_time_iso_8601": "2022-12-17T00:51:13.368040Z",
"url": "https://files.pythonhosted.org/packages/ff/87/e94a7f300d90a8cc00a7cc6a37d3c0d83293ead4783d0ea67fea6db3a4f4/metrohash-0.3.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "7d7b9c440f3a7eb831b0fea0e81bfdad",
"sha256": "4a1708e0fbd0df76731a3b1fc667f8be58b8aea3d556afc974741534229a9a63"
},
"downloads": -1,
"filename": "metrohash-0.3.3-cp38-cp38-win32.whl",
"has_sig": false,
"md5_digest": "7d7b9c440f3a7eb831b0fea0e81bfdad",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.6",
"size": 33164,
"upload_time": "2022-12-17T00:51:14",
"upload_time_iso_8601": "2022-12-17T00:51:14.609789Z",
"url": "https://files.pythonhosted.org/packages/a4/f8/ec63f3e26059615f95785785eef145c03eb3ef06661d0662ed49fbb16412/metrohash-0.3.3-cp38-cp38-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "9d3566d1fdd2d6a37faf4669b8f44e3b",
"sha256": "0295d16de7511e71f6a4af8a9eb6152855e289a434ea7aba8356089bb87f5708"
},
"downloads": -1,
"filename": "metrohash-0.3.3-cp38-cp38-win_amd64.whl",
"has_sig": false,
"md5_digest": "9d3566d1fdd2d6a37faf4669b8f44e3b",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.6",
"size": 33729,
"upload_time": "2022-12-17T00:51:15",
"upload_time_iso_8601": "2022-12-17T00:51:15.819396Z",
"url": "https://files.pythonhosted.org/packages/f6/ae/0a97164b99db6097e6c60490515a90147532be1cd979bea2568501a9e36c/metrohash-0.3.3-cp38-cp38-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "8df14d563339689c867e0d44de1fa7ef",
"sha256": "9cbcc4bde0d5be9a2e7eac09bc748850d5438407d46b574db1ba9a990d688a01"
},
"downloads": -1,
"filename": "metrohash-0.3.3-cp39-cp39-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "8df14d563339689c867e0d44de1fa7ef",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.6",
"size": 37789,
"upload_time": "2022-12-17T00:51:17",
"upload_time_iso_8601": "2022-12-17T00:51:17.092442Z",
"url": "https://files.pythonhosted.org/packages/5f/04/aa90cf27299ebe95e26cdb5823a6ce0b4dace7b9dff7433c243015e70b5b/metrohash-0.3.3-cp39-cp39-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "9f27e1319e4741dedae48b59b45d3499",
"sha256": "21f6eac44548c31bd8b300c9796838e717b72afe1315568355a35a015efa2c1c"
},
"downloads": -1,
"filename": "metrohash-0.3.3-cp39-cp39-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "9f27e1319e4741dedae48b59b45d3499",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.6",
"size": 36246,
"upload_time": "2022-12-17T00:51:18",
"upload_time_iso_8601": "2022-12-17T00:51:18.365484Z",
"url": "https://files.pythonhosted.org/packages/94/17/35848e244a53a54ce33db643c047e7cb5547347e6849242f444606c5fbba/metrohash-0.3.3-cp39-cp39-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "0e9f0e6a6309454a85ea64a9ffba2ce0",
"sha256": "340c6a8f41086aa8e3f22b93a78975aa30aec94669b566a469f23563f63fb621"
},
"downloads": -1,
"filename": "metrohash-0.3.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "0e9f0e6a6309454a85ea64a9ffba2ce0",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.6",
"size": 197158,
"upload_time": "2022-12-17T00:51:19",
"upload_time_iso_8601": "2022-12-17T00:51:19.683678Z",
"url": "https://files.pythonhosted.org/packages/3a/b3/51cceb60e8095b2504a6bb9ced5b470f4dbdab59b0640b296abd0a08b5ae/metrohash-0.3.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "fb33bbb99e783867ccf8c3ee1d86fb2e",
"sha256": "8915093c7eed6b6fae6bf7ed7d46b622d36137711d2ff520a0c6ea4a0903a9ca"
},
"downloads": -1,
"filename": "metrohash-0.3.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "fb33bbb99e783867ccf8c3ee1d86fb2e",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.6",
"size": 195766,
"upload_time": "2022-12-17T00:51:21",
"upload_time_iso_8601": "2022-12-17T00:51:21.024510Z",
"url": "https://files.pythonhosted.org/packages/33/80/36321195db666ebcdb9267d79cd75c84f4b247730646ee9d1f6eb56260a7/metrohash-0.3.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "a2df93d24f623a3f3f8769da0ed2ccc8",
"sha256": "0af3d8e368ffabfddeb21d6dff23fcde90e8282efe122d94e15de121142ed6aa"
},
"downloads": -1,
"filename": "metrohash-0.3.3-cp39-cp39-win32.whl",
"has_sig": false,
"md5_digest": "a2df93d24f623a3f3f8769da0ed2ccc8",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.6",
"size": 33108,
"upload_time": "2022-12-17T00:51:23",
"upload_time_iso_8601": "2022-12-17T00:51:23.146113Z",
"url": "https://files.pythonhosted.org/packages/b0/17/b71041c66fbf0aa37884c614cde9a619f91e8a7318348a022593268c6f66/metrohash-0.3.3-cp39-cp39-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "a74578979b7585147a2ccaaf7db88cba",
"sha256": "35d3d876564c57d46e2e684069bb92719f1d5130636ae0a23904d7bccada318d"
},
"downloads": -1,
"filename": "metrohash-0.3.3-cp39-cp39-win_amd64.whl",
"has_sig": false,
"md5_digest": "a74578979b7585147a2ccaaf7db88cba",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.6",
"size": 33549,
"upload_time": "2022-12-17T00:51:24",
"upload_time_iso_8601": "2022-12-17T00:51:24.600346Z",
"url": "https://files.pythonhosted.org/packages/d7/73/39f2a08c3e714a97f9006e67b02944a2a422329536c1709982a338854f6b/metrohash-0.3.3-cp39-cp39-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "4716dd6b66fe601fa00252293f06a7a7",
"sha256": "6b75bc384efdcd9409529a4697fd913b1c47d746d93ca612a4a5e87f2581d332"
},
"downloads": -1,
"filename": "metrohash-0.3.3.tar.gz",
"has_sig": false,
"md5_digest": "4716dd6b66fe601fa00252293f06a7a7",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 63219,
"upload_time": "2022-12-17T00:51:25",
"upload_time_iso_8601": "2022-12-17T00:51:25.885567Z",
"url": "https://files.pythonhosted.org/packages/54/b6/6d93fe1bb8871537a7fdb441c66c3fa2a5caf095653a7c78ea441f7a95c0/metrohash-0.3.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2022-12-17 00:51:25",
"github": true,
"gitlab": false,
"bitbucket": false,
"github_user": "escherba",
"github_project": "python-metrohash",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "Cython",
"specs": []
},
{
"name": "ipdb",
"specs": []
},
{
"name": "ipython",
"specs": []
},
{
"name": "numpy",
"specs": []
},
{
"name": "py-cpuinfo",
"specs": []
},
{
"name": "pytest",
"specs": []
}
],
"lcname": "metrohash"
}