initial commit

This commit is contained in:
2026-05-11 12:36:20 +05:30
commit 384cbe8019
15377 changed files with 2360544 additions and 0 deletions

View File

@@ -0,0 +1 @@
pip

View File

@@ -0,0 +1,542 @@
Metadata-Version: 2.4
Name: xxhash
Version: 3.6.0
Summary: Python binding for xxHash
Home-page: https://github.com/ifduyue/python-xxhash
Author: Yue Du
Author-email: ifduyue@gmail.com
License: BSD
Classifier: Development Status :: 5 - Production/Stable
Classifier: License :: OSI Approved :: BSD License
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Free Threading :: 1 - Unstable
Requires-Python: >=3.7
Description-Content-Type: text/x-rst
License-File: LICENSE
Dynamic: author
Dynamic: author-email
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: license
Dynamic: license-file
Dynamic: requires-python
Dynamic: summary
python-xxhash
=============
.. image:: https://github.com/ifduyue/python-xxhash/actions/workflows/test.yml/badge.svg
:target: https://github.com/ifduyue/python-xxhash/actions/workflows/test.yml
:alt: Github Actions Status
.. image:: https://img.shields.io/pypi/v/xxhash.svg
:target: https://pypi.org/project/xxhash/
:alt: Latest Version
.. image:: https://img.shields.io/pypi/pyversions/xxhash.svg
:target: https://pypi.org/project/xxhash/
:alt: Supported Python versions
.. image:: https://img.shields.io/pypi/l/xxhash.svg
:target: https://pypi.org/project/xxhash/
:alt: License
.. _HMAC: http://en.wikipedia.org/wiki/Hash-based_message_authentication_code
.. _xxHash: https://github.com/Cyan4973/xxHash
.. _Cyan4973: https://github.com/Cyan4973
xxhash is a Python binding for the xxHash_ library by `Yann Collet`__.
__ Cyan4973_
Installation
------------
.. code-block:: bash
$ pip install xxhash
You can also install using conda:
.. code-block:: bash
$ conda install -c conda-forge python-xxhash
Installing From Source
~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: bash
$ pip install --no-binary xxhash xxhash
Prerequisites
++++++++++++++
On Debian/Ubuntu:
.. code-block:: bash
$ apt-get install python-dev gcc
On CentOS/Fedora:
.. code-block:: bash
$ yum install python-devel gcc redhat-rpm-config
Linking to libxxhash.so
~~~~~~~~~~~~~~~~~~~~~~~~
By default python-xxhash will use bundled xxHash,
we can change this by specifying ENV var ``XXHASH_LINK_SO``:
.. code-block:: bash
$ XXHASH_LINK_SO=1 pip install --no-binary xxhash xxhash
Usage
--------
Module version and its backend xxHash library version can be retrieved using
the module properties ``VERSION`` AND ``XXHASH_VERSION`` respectively.
.. code-block:: python
>>> import xxhash
>>> xxhash.VERSION
'2.0.0'
>>> xxhash.XXHASH_VERSION
'0.8.0'
This module is hashlib-compliant, which means you can use it in the same way as ``hashlib.md5``.
| update() -- update the current digest with an additional string
| digest() -- return the current digest value
| hexdigest() -- return the current digest as a string of hexadecimal digits
| intdigest() -- return the current digest as an integer
| copy() -- return a copy of the current xxhash object
| reset() -- reset state
md5 digest returns bytes, but the original xxh32 and xxh64 C APIs return integers.
While this module is made hashlib-compliant, ``intdigest()`` is also provided to
get the integer digest.
Constructors for hash algorithms provided by this module are ``xxh32()`` and ``xxh64()``.
For example, to obtain the digest of the byte string ``b'Nobody inspects the spammish repetition'``:
.. code-block:: python
>>> import xxhash
>>> x = xxhash.xxh32()
>>> x.update(b'Nobody inspects')
>>> x.update(b' the spammish repetition')
>>> x.digest()
b'\xe2);/'
>>> x.digest_size
4
>>> x.block_size
16
More condensed:
.. code-block:: python
>>> xxhash.xxh32(b'Nobody inspects the spammish repetition').hexdigest()
'e2293b2f'
>>> xxhash.xxh32(b'Nobody inspects the spammish repetition').digest() == x.digest()
True
An optional seed (default is 0) can be used to alter the result predictably:
.. code-block:: python
>>> import xxhash
>>> xxhash.xxh64('xxhash').hexdigest()
'32dd38952c4bc720'
>>> xxhash.xxh64('xxhash', seed=20141025).hexdigest()
'b559b98d844e0635'
>>> x = xxhash.xxh64(seed=20141025)
>>> x.update('xxhash')
>>> x.hexdigest()
'b559b98d844e0635'
>>> x.intdigest()
13067679811253438005
Be careful that xxh32 takes an unsigned 32-bit integer as seed, while xxh64
takes an unsigned 64-bit integer. Although unsigned integer overflow is
defined behavior, it's better not to make it happen:
.. code-block:: python
>>> xxhash.xxh32('I want an unsigned 32-bit seed!', seed=0).hexdigest()
'f7a35af8'
>>> xxhash.xxh32('I want an unsigned 32-bit seed!', seed=2**32).hexdigest()
'f7a35af8'
>>> xxhash.xxh32('I want an unsigned 32-bit seed!', seed=1).hexdigest()
'd8d4b4ba'
>>> xxhash.xxh32('I want an unsigned 32-bit seed!', seed=2**32+1).hexdigest()
'd8d4b4ba'
>>>
>>> xxhash.xxh64('I want an unsigned 64-bit seed!', seed=0).hexdigest()
'd4cb0a70a2b8c7c1'
>>> xxhash.xxh64('I want an unsigned 64-bit seed!', seed=2**64).hexdigest()
'd4cb0a70a2b8c7c1'
>>> xxhash.xxh64('I want an unsigned 64-bit seed!', seed=1).hexdigest()
'ce5087f12470d961'
>>> xxhash.xxh64('I want an unsigned 64-bit seed!', seed=2**64+1).hexdigest()
'ce5087f12470d961'
``digest()`` returns bytes of the **big-endian** representation of the integer
digest:
.. code-block:: python
>>> import xxhash
>>> h = xxhash.xxh64()
>>> h.digest()
b'\xefF\xdb7Q\xd8\xe9\x99'
>>> h.intdigest().to_bytes(8, 'big')
b'\xefF\xdb7Q\xd8\xe9\x99'
>>> h.hexdigest()
'ef46db3751d8e999'
>>> format(h.intdigest(), '016x')
'ef46db3751d8e999'
>>> h.intdigest()
17241709254077376921
>>> int(h.hexdigest(), 16)
17241709254077376921
Besides xxh32/xxh64 mentioned above, oneshot functions are also provided,
so we can avoid allocating XXH32/64 state on heap:
| xxh32_digest(bytes, seed=0)
| xxh32_intdigest(bytes, seed=0)
| xxh32_hexdigest(bytes, seed=0)
| xxh64_digest(bytes, seed=0)
| xxh64_intdigest(bytes, seed=0)
| xxh64_hexdigest(bytes, seed=0)
.. code-block:: python
>>> import xxhash
>>> xxhash.xxh64('a').digest() == xxhash.xxh64_digest('a')
True
>>> xxhash.xxh64('a').intdigest() == xxhash.xxh64_intdigest('a')
True
>>> xxhash.xxh64('a').hexdigest() == xxhash.xxh64_hexdigest('a')
True
>>> xxhash.xxh64_hexdigest('xxhash', seed=20141025)
'b559b98d844e0635'
>>> xxhash.xxh64_intdigest('xxhash', seed=20141025)
13067679811253438005L
>>> xxhash.xxh64_digest('xxhash', seed=20141025)
'\xb5Y\xb9\x8d\x84N\x065'
.. code-block:: python
In [1]: import xxhash
In [2]: %timeit xxhash.xxh64_hexdigest('xxhash')
268 ns ± 24.1 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In [3]: %timeit xxhash.xxh64('xxhash').hexdigest()
416 ns ± 17.3 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
XXH3 hashes are available since v2.0.0 (xxHash v0.8.0), they are:
Streaming classes:
| xxh3_64
| xxh3_128
Oneshot functions:
| xxh3_64_digest(bytes, seed=0)
| xxh3_64_intdigest(bytes, seed=0)
| xxh3_64_hexdigest(bytes, seed=0)
| xxh3_128_digest(bytes, seed=0)
| xxh3_128_intdigest(bytes, seed=0)
| xxh3_128_hexdigest(bytes, seed=0)
And aliases:
| xxh128 = xxh3_128
| xxh128_digest = xxh3_128_digest
| xxh128_intdigest = xxh3_128_intdigest
| xxh128_hexdigest = xxh3_128_hexdigest
Caveats
-------
SEED OVERFLOW
~~~~~~~~~~~~~~
xxh32 takes an unsigned 32-bit integer as seed, and xxh64 takes
an unsigned 64-bit integer as seed. Make sure that the seed is greater than
or equal to ``0``.
ENDIANNESS
~~~~~~~~~~~
As of python-xxhash 0.3.0, ``digest()`` returns bytes of the
**big-endian** representation of the integer digest. It used
to be little-endian.
DONT USE XXHASH IN HMAC
~~~~~~~~~~~~~~~~~~~~~~~
Though you can use xxhash as an HMAC_ hash function, but it's
highly recommended not to.
xxhash is **NOT** a cryptographic hash function, it is a
non-cryptographic hash algorithm aimed at speed and quality.
Do not put xxhash in any position where cryptographic hash
functions are required.
Copyright and License
---------------------
Copyright (c) 2014-2025 Yue Du - https://github.com/ifduyue
Licensed under `BSD 2-Clause License <http://opensource.org/licenses/BSD-2-Clause>`_
CHANGELOG
-----------
v3.6.0 2025-10-02
~~~~~~~~~~~~~~~~~
- Build wheels for Python 3.14
- Python free-threading support
- Typing: Use Buffer type stubs
- Deprecate xxhash.VERSION_TUPLE, it will be removed in the next major release
v3.5.0 2024-08-17
~~~~~~~~~~~~~~~~~
- Build wheels for Python 3.13
v3.4.1 2023-10-05
~~~~~~~~~~~~~~~~~
- Build wheels for Python 3.12
- Remove setuptools_scm
v3.4.0 2023-10-05
~~~~~~~~~~~~~~~~~
*Yanked* due to wheels building problem.
v3.3.0 2023-07-29
~~~~~~~~~~~~~~~~~
- Upgrade xxHash to v0.8.2
- Drop support for Python 3.6
v3.2.0 2022-12-28
~~~~~~~~~~~~~~~~~
This is the last version to support Python 3.6
- Build Python 3.11 wheels.
- Remove setup.py test_suites, call unittest directly
v3.1.0 2022-10-19
~~~~~~~~~~~~~~~~~
- Type annotations.
- Enabled muslinux wheels building.
v3.0.0 2022-02-25
~~~~~~~~~~~~~~~~~
- New set `algorithms_available` lists all implemented algorithms in `xxhash`
package.
- Upgrade xxHash to v0.8.1.
- Drop support for EOL Python versions, require python >= 3.6 from now on.
- Migrate to github actions and build arm64 wheels for macOS.
- Always release GIL.
v2.0.2 2021-04-15
~~~~~~~~~~~~~~~~~
- Fix Travis CI OSX dpl python2.7 get-pip.py error
v2.0.1 2021-04-15
~~~~~~~~~~~~~~~~~
- Only to trigger Python 3.9 wheels building.
v2.0.0 2020-08-03
~~~~~~~~~~~~~~~~~
- **Require xxHash version >= v0.8.0**
- Upgrade xxHash to v0.8.0
- XXH3 hashes: `xxh3_64`, `xxh3_128`, and their oneshot functions
v1.4.4 2020-06-20
~~~~~~~~~~~~~~~~~
- Upgrade xxHash to v0.7.3
- Stop using PEP393 deprecated APIs
- Use XXH(32|64)_canonicalFromHash to replace u2bytes and ull2bytes
v1.4.3 2019-11-12
~~~~~~~~~~~~~~~~~
- Upgrade xxHash to v0.7.2
- Python 3.8 wheels
v1.4.2 2019-10-13
~~~~~~~~~~~~~~~~~
- Fixed: setup.py fails when reading README.rst and the default encoding is not UTF-8
v1.4.1 2019-08-27
~~~~~~~~~~~~~~~~~
- Fixed: xxh3.h in missing from source tarball
v1.4.0 2019-08-25
~~~~~~~~~~~~~~~~~
- Upgrade xxHash to v0.7.1
v1.3.0 2018-10-21
~~~~~~~~~~~~~~~~~
- Wheels are now built automatically
- Split CFFI variant into a separate package `ifduyue/python-xxhash-cffi <https://github.com/ifduyue/python-xxhash-cffi>`_
v1.2.0 2018-07-13
~~~~~~~~~~~~~~~~~
- Add oneshot functions xxh{32,64}_{,int,hex}digest
v1.1.0 2018-07-05
~~~~~~~~~~~~~~~~~
- Allow input larger than 2GB
- Release the GIL on sufficiently large input
- Drop support for Python 3.2
v1.0.1 2017-03-02
~~~~~~~~~~~~~~~~~~
- Free state actively, instead of delegating it to ffi.gc
v1.0.0 2017-02-10
~~~~~~~~~~~~~~~~~~
- Fixed copy() segfault
- Added CFFI variant
v0.6.3 2017-02-10
~~~~~~~~~~~~~~~~~~
- Fixed copy() segfault
v0.6.2 2017-02-10
~~~~~~~~~~~~~~~~~~
- Upgrade xxHash to v0.6.2
v0.6.1 2016-06-26
~~~~~~~~~~~~~~~~~~
- Upgrade xxHash to v0.6.1
v0.5.0 2016-03-02
~~~~~~~~~~~~~~~~~~
- Upgrade xxHash to v0.5.0
v0.4.3 2015-08-21
~~~~~~~~~~~~~~~~~~
- Upgrade xxHash to r42
v0.4.1 2015-08-16
~~~~~~~~~~~~~~~~~~
- Upgrade xxHash to r41
v0.4.0 2015-08-05
~~~~~~~~~~~~~~~~~~
- Added method reset
- Upgrade xxHash to r40
v0.3.2 2015-01-27
~~~~~~~~~~~~~~~~~~
- Fixed some typos in docstrings
v0.3.1 2015-01-24
~~~~~~~~~~~~~~~~~~
- Upgrade xxHash to r39
v0.3.0 2014-11-11
~~~~~~~~~~~~~~~~~~
- Change digest() from little-endian representation to big-endian representation of the integer digest.
This change breaks compatibility (digest() results are different).
v0.2.0 2014-10-25
~~~~~~~~~~~~~~~~~~
- Make this package hashlib-compliant
v0.1.3 2014-10-23
~~~~~~~~~~~~~~~~~~
- Update xxHash to r37
v0.1.2 2014-10-19
~~~~~~~~~~~~~~~~~~
- Improve: Check XXHnn_init() return value.
- Update xxHash to r36
v0.1.1 2014-08-07
~~~~~~~~~~~~~~~~~~
- Improve: Can now be built with Visual C++ Compiler.
v0.1.0 2014-08-05
~~~~~~~~~~~~~~~~~~
- New: XXH32 and XXH64 type, which support partially update.
- Fix: build under Python 3.4
v0.0.2 2014-08-03
~~~~~~~~~~~~~~~~~~
- NEW: Support Python 3
v0.0.1 2014-07-30
~~~~~~~~~~~~~~~~~~
- NEW: xxh32 and xxh64

View File

@@ -0,0 +1,13 @@
xxhash-3.6.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
xxhash-3.6.0.dist-info/METADATA,sha256=mPxw1RoX3qQxbuYGaGeu-Oi04-y7D3HFycbAhyHToAg,13721
xxhash-3.6.0.dist-info/RECORD,,
xxhash-3.6.0.dist-info/WHEEL,sha256=JLOMsP7F5qtkAkINx5UnzbFguf8CqZeraV8o04b0I8I,101
xxhash-3.6.0.dist-info/licenses/LICENSE,sha256=s8YgrcmogSzAw8f8CVZ_qamTDTVG3pVd-5VbFoz5iaw,1313
xxhash-3.6.0.dist-info/top_level.txt,sha256=1PPSBP-gnjG59E5bigzMTzmT6BVWjHwnpzMiisPWZ5I,15
xxhash/__init__.py,sha256=mPEdihxDMU0rjLWum3FrU9Ua2jQ-rzfewYgIg-J-Jlc,1147
xxhash/__init__.pyi,sha256=wtUIx1kTqei5PRPbaSfCrax9v9E3GoGHa5UN5s_1Jyc,1899
xxhash/__pycache__/__init__.cpython-311.pyc,,
xxhash/__pycache__/version.cpython-311.pyc,,
xxhash/_xxhash.cp311-win_amd64.pyd,sha256=kJRiP7Q0WmruFHSpglxTOBBY1-mA7ORXFEj69d5gsg0,59904
xxhash/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
xxhash/version.py,sha256=mAU8_8ohXNGl5LtYt2yUduSKweEkEK0R3U_-zZXyHNI,101

View File

@@ -0,0 +1,5 @@
Wheel-Version: 1.0
Generator: setuptools (80.9.0)
Root-Is-Purelib: false
Tag: cp311-cp311-win_amd64

View File

@@ -0,0 +1,22 @@
Copyright (c) 2014-2024, Yue Du
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@@ -0,0 +1,2 @@
_xxhash
xxhash