FarmhashとCityhashのPythonラッパー、速い非暗号化ハッシュ機能のファミリー。
Pypiからインストールするには:
pip install cityhashコンドラ環境にインストールするには:
conda install -c conda-forge python-cityhashこのパッケージは、 cityhashとfarmhash名前の下でそれぞれCityHashとFarmHashのPython APIを公開します。それぞれが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は、増分ハッシュをサポートせず、したがって、キャラクターストリームのハッシュに理想的ではありません。インクリメンタルハッシュが必要な場合は、メトロハッシュやxxhashなどの別のハッシュライブラリを検討してください。
バッファプロトコルにより、Pythonオブジェクトは、メモリ内の別の場所にコピーすることなく、高速アクセスのためにデータを生のバイト配列として公開できます。 Numpyは、このプロトコルを広範囲に使用する有名なライブラリの1つです。
このパッケージのすべてのハッシュ機能は、バッファプロトコルを介してそれらを公開するオブジェクトからバイト配列を読み取ります。以下は、4次元のnumpyアレイのハッシュ化を示す例です。
> >> import numpy as np
> >> from farmhash import FarmHash64
> >> arr = np . zeros (( 256 , 256 , 4 ))
> >> FarmHash64 ( arr )
1550282412043536862 Numpyアレイは、これが機能するために隣接する必要があります。非連続配列を変換するには、numpyのascontiguousarray()関数を使用します。
X86-64プラットフォームの場合、このパッケージのPYPIリポジトリには、SSE4.2サポートが編集されたホイールが含まれています。 Farmhashの32ビットと64ビット(128ビットではない)バリアントは、SSE4.2の指示から大きな恩恵を受けます。
バニラシティハッシュ関数( cityhashモジュールの下)は、SSE4.2を利用しません。代わりに、SSE4.2をハーネスする128ビットおよび256ビットのCRC関数を公開するこのパッケージに提供されたcityhashcrcモジュールを使用できます。これらの機能は非常に高速であり、速度で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パッケージホイールは、Cibuildwheelを使用して構築され、Githubアクションを使用してPypiに配布されます。ホイールにはコンパイルされたバイナリが含まれており、次のプラットフォームで利用できます:Windows-AMD64、Ubuntu-X86、Linux-X86_64、Linux-Aarch64、およびMacOSX-X86_64。
Python拡張機能として利用可能な他の高速非暗号化ハッシュ関数については、Metrohash、Murmurhash、およびXxhashを参照してください。
元のCityHash Pythonのバインディングは、Alexander [Amper] Marshalovによるものです。彼らはユージン・シェルバによってシトンで書き直されました。 CityHashとFarmHashのアルゴリズムとC ++の実装はGoogleによるものです。
このソフトウェアは、MITライセンスの下でライセンスされています。詳細については、付属のライセンスファイルを参照してください。