Python Wrapper для Farmhash и Cityhash, семейства быстрых некриптографических функций.
Установка из PYPI:
pip install cityhashЧтобы установить в среде Conda:
conda install -c conda-forge python-cityhash Пакет разоблачает Python API для Cityhash и Farmhash в пространствах имен cityhash и farmhash соответственно. Каждый предоставляет 32, 64- и 128-битные реализации.
Пример использования для Farmhash:
> >> from farmhash import FarmHash32 , FarmHash64 , FarmHash128
> >> FarmHash32 ( "abc" )
1961358185
> >> FarmHash64 ( "abc" )
2640714258260161385
> >> FarmHash128 ( "abc" )
76434233956484675513733017140465933893Отпечатки пальцев- это хэши без семян, которые гарантированно будут зависеть от оборудования и платформы. Это может быть полезно для сетевых приложений, которые требуют сохраняющихся хешированных значений.
> >> from farmhash import Fingerprint128
> >> Fingerprint128 ( "abc" )
76434233956484675513733017140465933893Cityhash и Farmhash не поддерживают постепенное хеширование и, следовательно, не идеальны для хэширования потоков персонажей. Если вам требуется постепенное хэширование, рассмотрите другую библиотеку хеширования, такую как Metrohash или Xxhash.
Протокол буфера позволяет объектам Python разоблачить свои данные в виде необработанных байтовых массивов для быстрого доступа без необходимости копирования в отдельное место в памяти. Numpy-одна известная библиотека, которая широко использует этот протокол.
Все функции хэширования в этом пакете будут считывать байтовые массивы из объектов, которые выставляют их через буферный протокол. Вот пример, показывающий хешинг четырехмерного массива Numpy:
> >> import numpy as np
> >> from farmhash import FarmHash64
> >> arr = np . zeros (( 256 , 256 , 4 ))
> >> FarmHash64 ( arr )
1550282412043536862 Массивы Numpy должны быть смежными, чтобы это работало. Чтобы преобразовать непостоянный массив, используйте функцию Numpy's ascontiguousarray() .
Для платформ X86-64 репозиторий PYPI для этого пакета включает колеса, составленные с поддержкой SSE4.2. 32- и 64-битные (но не 128-битные) варианты Farmhash значительно выигрывают от инструкций SSE4.2.
Функции Vanilla CityHash (под модулем cityhash ) не используют преимущества SSE4.2. Вместо этого можно использовать модуль cityhashcrc , предоставляемый с этим пакетом, который выставляет 128- и 256-битные функции CRC, которые используют SSE4.2. Эти функции очень быстрые, и Beat FarmHash128 на скорости (Farmhash не включает 256-битную функцию). Поскольку Farmhash является предполагаемым преемником CityHash, я был бы осторожен, прежде чем использовать функции CityHash-CRC, и убедился бы, что они обеспечивают достаточную случайность для вашего предполагаемого применения.
Для тех, кто хочет внести свой вклад, вот быстрое начало использования команд Make:
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 shellЧтобы выяснить, какие цели доступны, введите:
make helpКолеса пакета создаются с использованием CibuildWhile и распределены по PYPI с использованием действий GitHub. Колеса содержат скомпилированные двоичные файлы и доступны для следующих платформ: Windows-AMD64, Ubuntu-X86, Linux-X86_64, Linux-Aarch64 и Macosx-X86_64.
Для других быстрых некриптографических хэш-функций, доступных в виде расширений Python, см. Metrohash, Murmurhash и Xxhash.
Оригинальные привязки Cityhash Python связаны с Александром [Amper] Маршаловином. Они были переписаны в цинтоне Юджином Шербой, который также добавил привязки Farmhash. Алгоритмы Cityhash и Farmhash и их реализация C ++ - Google.
Это программное обеспечение лицензировано по лицензии MIT. Смотрите включенный файл лицензии для получения подробной информации.