Python Wrapper para Farmhash y Cityhash, una familia de funciones de hash no critografía rápidas.
Para instalar desde Pypi:
pip install cityhashPara instalar en un entorno de condena:
conda install -c conda-forge python-cityhash El paquete expone las API de Python para Cityhash y Farmhash bajo los espacios de nombres cityhash y farmhash , respectivamente. Cada uno proporciona implementaciones de 32, 64 y 128 bits.
Ejemplo de uso para Farmhash:
> >> from farmhash import FarmHash32 , FarmHash64 , FarmHash128
> >> FarmHash32 ( "abc" )
1961358185
> >> FarmHash64 ( "abc" )
2640714258260161385
> >> FarmHash128 ( "abc" )
76434233956484675513733017140465933893Las huellas dactilares son hashes sin semillas que se garantizan que son hardware y plataforma. Esto puede ser útil para aplicaciones de red que requieren valores de hash persistentes.
> >> from farmhash import Fingerprint128
> >> Fingerprint128 ( "abc" )
76434233956484675513733017140465933893Cityhash y Farmhash no apoyan el hashing incremental y, por lo tanto, no son ideales para el hashing de las corrientes de personajes. Si necesita hashing incremental, considere otra biblioteca de hash, como Metrohash o Xxhash.
El protocolo de búfer permite que los objetos de Python expongan sus datos como matrices de bytes sin procesar para acceso rápido sin tener que copiar a una ubicación separada en la memoria. Numpy es una biblioteca bien conocida que usa ampliamente este protocolo.
Todas las funciones de Hashing en este paquete leerán matrices de bytes de objetos que las exponen a través del protocolo de búfer. Aquí hay un ejemplo que muestra el hashing de una matriz Numpy de cuatro dimensiones:
> >> import numpy as np
> >> from farmhash import FarmHash64
> >> arr = np . zeros (( 256 , 256 , 4 ))
> >> FarmHash64 ( arr )
1550282412043536862 Las matrices numpy deben ser contiguas para que esto funcione. Para convertir una matriz no contigua, use la función ascontiguousarray() de Numpy.
Para las plataformas X86-64, el repositorio PYPI para este paquete incluye ruedas compiladas con soporte SSE4.2. Las variantes de 32 y 64 bits (pero no las 128 bits) de Farmhash se benefician significativamente de las instrucciones SSE4.2.
Las funciones de Vanilla Cityhash (bajo el módulo cityhash ) no aprovechan SSE4.2. En su lugar, se puede usar el módulo cityhashcrc provisto de este paquete que expone funciones de CRC de 128 y 256 bits que aprovechan SSE4.2. Estas funciones son muy rápidas y vencen FarmHash128 a la velocidad (Farmhash no incluye una función de 256 bits). Sin embargo, dado que Farmhash es el sucesor previsto de Cityhash, tendría cuidado antes de usar las funciones de Cityhash-CRC, y verificaría si proporcionan suficiente aleatoriedad para su aplicación prevista.
Para aquellos que desean contribuir, aquí hay un comienzo rápido de usar comandos:
git clone https://github.com/escherba/python-cityhash.git
cd python-cityhash
make env # create a virtual environment
make test # run Python tests
make cpp-test # run C++ tests
make shell # enter IPython shellPara averiguar qué objetivos de marca están disponibles, ingrese:
make helpLas ruedas del paquete se construyen con cibuildwheel y se distribuyen a PYPI utilizando acciones de GitHub. Las ruedas contienen binarios compilados y están disponibles para las siguientes plataformas: Windows-AMD64, Ubuntu-X86, Linux-X86_64, Linux-Aarch64 y MacOSX-X86_64.
Para otras funciones de hash no crayragráficas rápidas disponibles como extensiones de Python, ver Metrohash, Murmurhash y Xxhash.
Las enlaces originales de Cityhash Python se deben a Alexander [Amper] Marshalov. Fueron reescritos en Cython por Eugene Scherba, quien también agregó las fijaciones de Farmhash. Los algoritmos Cityhash y Farmhash y su implementación de C ++ son de Google.
Este software tiene licencia bajo la licencia MIT. Consulte el archivo de licencia incluido para más detalles.