Python Non-cryptographic Hash Library
Project description
Introduction
pyhash is a python non-cryptographic hash library. It provides several common hash algorithms with C/C++ implementation for performance.
>>> import pyhash
>>> hasher = pyhash.fnv1_32()
>>> hasher('hello world')
2805756500L
>>> hasher('hello', ' ', 'world')
2805756500L
>>> hasher('hello ')
406904344
>>> hasher('world', seed=406904344)
2805756500L
Installation
Please use pyhash to install it from pypi
$sudo pip install pyhash
Notes: pyhash
depends on Boost
library to build
- Ubuntu
sudo apt-get install libboost-all-dev
- CentOS
sudo yum install boost-devel
- OSX
brew install boost boost-python
Algorithms
pyhash supports the following hash algorithms
- FNV (Fowler-Noll-Vo) hash
- fnv1_32
- fnv1a_32
- fnv1_64
- fnv1a_64
- MurmurHash 1/2/3
- murmur1_32
- murmur1_aligned_32
- murmur2_32
- murmur2a_32
- murmur2_aligned_32
- murmur2_neutral_32
- murmur2_x64_64a
- murmur2_x86_64b
- murmur3_32
- murmur3_x86_128
- murmur3_x64_128
- lookup3
- lookup3 # base on sys.byteorder
- lookup3_little
- lookup3_big
- SuperFastHash
- super_fast_hash
- City Hash
_ city_32
- city_64
- city_128
- city_crc_128
- Spooky Hash
- spooky_32
- spooky_64
- spooky_128
- FarmHash
- farm_32
- farm_64
- farm_128
- MetroHash
- metro_64
- metro_128
- metro_crc_64
- metro_crc_128
- MumHash
- mum_64
- T1Hash
- t1_32
- t1_32_be
- t1_64
- t1_64_be
- XXHash
- xx_32
- xx_64
Notes
Python has two types can be used to present string literals, the hash values of the two types are definitely different.
- For Python 2.x String literals,
str
will be used by default,unicode
can be used with theu
prefix. - For Python 3.x String and Bytes literals,
unicode
will be used by default,bytes
can be used with theb
prefix.
For example,
$ python2
Python 2.7.15 (default, Jun 17 2018, 12:46:58)
[GCC 4.2.1 Compatible Apple LLVM 9.1.0 (clang-902.0.39.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyhash
>>> hasher = pyhash.murmur3_32()
>>> hasher('foo')
4138058784L
>>> hasher(u'foo')
2085578581L
>>> hasher(b'foo')
4138058784L
$ python3
Python 3.7.0 (default, Jun 29 2018, 20:13:13)
[Clang 9.1.0 (clang-902.0.39.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyhash
>>> hasher = pyhash.murmur3_32()
>>> hasher('foo')
2085578581
>>> hasher(u'foo')
2085578581
>>> hasher(b'foo')
4138058784
You can also import unicode_literals to use unicode literals in Python 2.x
from __future__ import unicode_literals
In general, it is more compelling to use unicode_literals when back-porting new or existing Python 3 code to Python 2/3 than when porting existing Python 2 code to 2/3. In the latter case, explicitly marking up all unicode string literals with u'' prefixes would help to avoid unintentionally changing the existing Python 2 API. However, if changing the existing Python 2 API is not a concern, using unicode_literals may speed up the porting process.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Hashes for pyhash-0.8.3-cp37-cp37m-macosx_10_13_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9ac677d89602fd89f586f8f174c26c32c6b8e1a67f2be0fa14e8e6e55591c57f |
|
MD5 | 9bebfb84b0e68e2d7547a9d0fe88a87d |
|
BLAKE2b-256 | a9927b265e305676c3f0118281a6838cd4331b5a90c6b84b482113fc0e903b5d |
Hashes for pyhash-0.8.3-cp27-cp27m-macosx_10_13_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8c59be637342700d6e5f2c707ea87eb00db94e724a21eca22a7836fc2d0b97be |
|
MD5 | 151392e4668ea3a58ebab72a4f546641 |
|
BLAKE2b-256 | a2081b4f242a23a83577fa15d93b8d1e8867ec85e527f9dbcd11fea58c93e7a3 |