Pembungkus Python untuk Farmhash dan CityHash, keluarga fungsi hash non-kripografi cepat.
Untuk menginstal dari pypi:
pip install cityhashUntuk menginstal di lingkungan Conda:
conda install -c conda-forge python-cityhash Paket ini mengekspos Python API untuk CityHash dan Farmhash di bawah cityhash dan farmhash Namespaces, masing -masing. Masing-masing memberikan implementasi 32-, 64- dan 128-bit.
Contoh Penggunaan untuk Farmhash:
> >> from farmhash import FarmHash32 , FarmHash64 , FarmHash128
> >> FarmHash32 ( "abc" )
1961358185
> >> FarmHash64 ( "abc" )
2640714258260161385
> >> FarmHash128 ( "abc" )
76434233956484675513733017140465933893Sidik jari adalah hash tanpa biji yang dijamin perangkat keras dan platform-independen. Ini dapat berguna untuk aplikasi jaringan yang membutuhkan nilai hash yang bertahan.
> >> from farmhash import Fingerprint128
> >> Fingerprint128 ( "abc" )
76434233956484675513733017140465933893CityHash dan Farmhash tidak mendukung hashing tambahan dan karenanya tidak ideal untuk hashing aliran karakter. Jika Anda memerlukan hashing tambahan, pertimbangkan perpustakaan hashing lain, seperti Metrohash atau XXHash.
Protokol buffer memungkinkan objek Python untuk mengekspos data mereka sebagai array byte mentah untuk akses cepat tanpa harus menyalin ke lokasi terpisah dalam memori. Numpy adalah salah satu perpustakaan terkenal yang secara luas menggunakan protokol ini.
Semua fungsi hashing dalam paket ini akan membaca array byte dari objek yang mengeksposnya melalui protokol buffer. Berikut adalah contoh yang menunjukkan hashing dari array Numpy empat dimensi:
> >> import numpy as np
> >> from farmhash import FarmHash64
> >> arr = np . zeros (( 256 , 256 , 4 ))
> >> FarmHash64 ( arr )
1550282412043536862 Array Numpy harus berdekatan agar ini berfungsi. Untuk mengonversi array yang tidak bersebelahan, gunakan fungsi ascontiguousarray() Numpy.
Untuk platform x86-64, repositori PYPI untuk paket ini termasuk roda yang dikompilasi dengan dukungan SSE4.2. Varian farmhash 32- dan 64-bit (tetapi bukan 128-bit) secara signifikan mendapat manfaat dari instruksi SSE4.2.
Fungsi Vanilla CityHash (di bawah modul cityhash ) tidak memanfaatkan SSE4.2. Sebaliknya, seseorang dapat menggunakan modul cityhashcrc yang disediakan dengan paket ini yang memperlihatkan fungsi CRC 128- dan 256-bit yang memanfaatkan SSE4.2. Fungsi-fungsi ini sangat cepat, dan mengalahkan FarmHash128 pada kecepatan (Farmhash tidak termasuk fungsi 256-bit). Karena Farmhash adalah penerus CityHash yang dimaksudkan, saya akan berhati-hati sebelum menggunakan fungsi CityHash-CRC, dan akan memverifikasi apakah mereka memberikan keacakan yang cukup untuk aplikasi yang Anda maksudkan.
Bagi mereka yang ingin berkontribusi, berikut adalah awal yang cepat menggunakan Command 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 shellUntuk mencari tahu target mana yang tersedia, masukkan:
make helpRoda paket dibangun menggunakan cibuildwheel dan didistribusikan ke PYPI menggunakan tindakan github. Roda berisi biner yang dikompilasi dan tersedia untuk platform berikut: Windows-AMD64, Ubuntu-X86, Linux-X86_64, Linux-Aarch64, dan MacOSX-X86_64.
Untuk fungsi hash non-kripografi cepat lainnya yang tersedia sebagai ekstensi Python, lihat Metrohash, Murmurhash, dan XXHASH.
Binding Python CityHash asli adalah karena Alexander [Amper] Marshalov. Mereka ditulis ulang di Cython oleh Eugene Scherba, yang juga menambahkan binding pertanian. Algoritma CityHash dan Farmhash dan implementasi C ++ mereka adalah oleh Google.
Perangkat lunak ini dilisensikan di bawah lisensi MIT. Lihat file lisensi yang disertakan untuk detailnya.