Skip to main content

Python/Cython Murmurhash3 binding.

Project description

Yet Another Murmurhash3 Binding

https://img.shields.io/pypi/v/yammh3.svg https://img.shields.io/travis/rolando/yammh3.svg Documentation Status

Python/Cython Murmurhash3 binding.

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:

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))  # -> 17106754052855336054L

In Cython, first we need to write a .pyx file with our code:

# 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_t

def print_hashes(bytes key):
    cdef uint64_t h1
    cdef int64_t h2
    cdef uint32_t n = len(key)
    cdef char *c_key = <char *>key

    with 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:

# file: setup.py
from setuptools import setup
from setuptools.extension import Extension
from Cython.Build import cythonize

import yammh3  # already installed

setup(
    name='yammh3-example',
    ext_modules=cythonize([
        Extension('*', ['*.pyx'], include_dirs=[yammh3.get_include()]),
    ])
)

Then we build the modules in-place:

$ 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:

$ python -c 'import yammh3_example; yammh3_example.print_hashes(b"yammh3!")'
unsigned 64 bits hash is 17106754052855336054
signed 64 bits hash is -1339990020854215562

Credits

Murmurhash3 was originally created by Austin Appleby.

This package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template.

History

0.1.1 (2016-06-23)

  • First usable release :)

0.1.0 (2016-06-17)

  • First release on PyPI.

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

yammh3-0.1.2.tar.gz (225.4 kB view details)

Uploaded Source

File details

Details for the file yammh3-0.1.2.tar.gz.

File metadata

  • Download URL: yammh3-0.1.2.tar.gz
  • Upload date:
  • Size: 225.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for yammh3-0.1.2.tar.gz
Algorithm Hash digest
SHA256 187ade7ee6fd0d9499bc71835e79b5e79cb4b8fce4d072ff071f67285187dd77
MD5 6ed985c6fe6eb30e2a0af0e01e0d99c5
BLAKE2b-256 06475aeeeb8739dad8ecc642c65c0b8db4f42f7ff5dd9ca50023719747c3a3e4

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