Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/rmax/yammh3
Yet another Murmurhash3 bindings.
https://github.com/rmax/yammh3
Last synced: 29 days ago
JSON representation
Yet another Murmurhash3 bindings.
- Host: GitHub
- URL: https://github.com/rmax/yammh3
- Owner: rmax
- License: mit
- Created: 2016-06-17T03:26:12.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2023-01-11T16:48:19.000Z (almost 2 years ago)
- Last Synced: 2024-09-12T22:22:25.793Z (about 2 months ago)
- Language: Python
- Size: 51.8 KB
- Stars: 1
- Watchers: 3
- Forks: 1
- Open Issues: 5
-
Metadata Files:
- Readme: README.rst
- Changelog: HISTORY.rst
- Contributing: CONTRIBUTING.rst
- License: LICENSE
Awesome Lists containing this project
README
===============================
Yet Another Murmurhash3 Binding
===============================.. image:: https://img.shields.io/pypi/v/yammh3.svg
:target: https://pypi.python.org/pypi/yammh3.. image:: https://img.shields.io/travis/rolando/yammh3.svg
:target: https://travis-ci.org/rolando/yammh3.. image:: https://readthedocs.org/projects/yammh3/badge/?version=latest
:target: https://readthedocs.org/projects/yammh3/?badge=latest
:alt: Documentation StatusPython/Cython Murmurhash3 binding.
* Free software: MIT license
* Documentation: https://yammh3.readthedocs.org.Features
--------* Provides a high-level Python API.
* Provides a low-level Cython binding.
* Python 2 and 3 support.Example
-------Here is an example in Python:
.. code:: python
from yammh3 import hash64
key = b"yammh3!"
# hash* functions return a signed integer by default.
print("signed 64 bits hash is %s" % hash64(key)) # -> -1339990020854215562
print("unsigned 64 bits hash is %s" % hash64(key, signed=False)) # -> 17106754052855336054LIn Cython, first we need to write a ``.pyx`` file with our code:
.. code:: cython
# file: yammh3_example.pyx
# mhash* functions are only available via cimport.
from yammh3._yammh3 cimport mhash64, mhash64s
from yammh3._yammh3 cimport int64_t, uint64_t, uint32_tdef print_hashes(bytes key):
cdef uint64_t h1
cdef int64_t h2
cdef uint32_t n = len(key)
cdef char *c_key = keywith nogil: # releasing the GIL!
h1 = mhash64(c_key, n)
h2 = mhash64s(c_key, n)print("unsigned 64 bits hash is %d" % h1)
print("signed 64 bits hash is %d" % h2)We need to compile it as a module, usually by using a setup script:
.. code:: python
# file: setup.py
from setuptools import setup
from setuptools.extension import Extension
from Cython.Build import cythonizeimport yammh3 # already installed
setup(
name='yammh3-example',
ext_modules=cythonize([
Extension('*', ['*.pyx'], include_dirs=[yammh3.get_include()]),
])
)Then we build the modules in-place:
.. code::
$ python setup.py build_ext --inplace
Running build_ext
building 'yammh3_example' extension
... [snip] ...
copying build/lib.macosx-10.5-x86_64-2.7/yammh3_example.so ->Now we are ready to run our code:
.. code::
$ python -c 'import yammh3_example; yammh3_example.print_hashes(b"yammh3!")'
unsigned 64 bits hash is 17106754052855336054
signed 64 bits hash is -1339990020854215562Credits
---------Murmurhash3 was originally created by `Austin Appleby`_.
This package was created with Cookiecutter_ and the `audreyr/cookiecutter-pypackage`_ project template.
.. _Cookiecutter: https://github.com/audreyr/cookiecutter
.. _`audreyr/cookiecutter-pypackage`: https://github.com/audreyr/cookiecutter-pypackage
.. _`Austin Appleby`: https://github.com/aappleby/smhasher