Doc/c-api/hash.rst
.. highlight:: c
See also the :c:member:PyTypeObject.tp_hash member and :ref:numeric-hash.
.. c:type:: Py_hash_t
Hash value type: signed integer.
.. versionadded:: 3.2
.. c:type:: Py_uhash_t
Hash value type: unsigned integer.
.. versionadded:: 3.2
.. c:macro:: Py_HASH_ALGORITHM
A numerical value indicating the algorithm for hashing of :class:str,
:class:bytes, and :class:memoryview.
The algorithm name is exposed by :data:sys.hash_info.algorithm.
.. versionadded:: 3.4
.. c:macro:: Py_HASH_FNV Py_HASH_SIPHASH24 Py_HASH_SIPHASH13
Numerical values to compare to :c:macro:Py_HASH_ALGORITHM to determine
which algorithm is used for hashing. The hash algorithm can be configured
via the configure :option:--with-hash-algorithm option.
.. versionadded:: 3.4
Add :c:macro:!Py_HASH_FNV and :c:macro:!Py_HASH_SIPHASH24.
.. versionadded:: 3.11
Add :c:macro:!Py_HASH_SIPHASH13.
.. c:macro:: Py_HASH_CUTOFF
Buffers of length in range [1, Py_HASH_CUTOFF) are hashed using DJBX33A
instead of the algorithm described by :c:macro:Py_HASH_ALGORITHM.
!Py_HASH_CUTOFF of 0 disables the optimization.!Py_HASH_CUTOFF must be non-negative and less or equal than 7.32-bit platforms should use a cutoff smaller than 64-bit platforms because it is easier to create colliding strings. A cutoff of 7 on 64-bit platforms and 5 on 32-bit platforms should provide a decent safety margin.
This corresponds to the :data:sys.hash_info.cutoff constant.
.. versionadded:: 3.4
.. c:macro:: PyHASH_MODULUS
The Mersenne prime <https://en.wikipedia.org/wiki/Mersenne_prime>_ P = 2**n -1,
used for numeric hash scheme.
This corresponds to the :data:sys.hash_info.modulus constant.
.. versionadded:: 3.13
.. c:macro:: PyHASH_BITS
The exponent n of P in :c:macro:PyHASH_MODULUS.
.. versionadded:: 3.13
.. c:macro:: PyHASH_MULTIPLIER
Prime multiplier used in string and various other hashes.
.. versionadded:: 3.13
.. c:macro:: PyHASH_INF
The hash value returned for a positive infinity.
This corresponds to the :data:sys.hash_info.inf constant.
.. versionadded:: 3.13
.. c:macro:: PyHASH_IMAG
The multiplier used for the imaginary part of a complex number.
This corresponds to the :data:sys.hash_info.imag constant.
.. versionadded:: 3.13
.. c:type:: PyHash_FuncDef
Hash function definition used by :c:func:PyHash_GetFuncDef.
.. c:member:: Py_hash_t (*const hash)(const void *, Py_ssize_t)
Hash function.
.. c:member:: const char *name
Hash function name (UTF-8 encoded string).
This corresponds to the :data:`sys.hash_info.algorithm` constant.
.. c:member:: const int hash_bits
Internal size of the hash value in bits.
This corresponds to the :data:`sys.hash_info.hash_bits` constant.
.. c:member:: const int seed_bits
Size of seed input in bits.
This corresponds to the :data:`sys.hash_info.seed_bits` constant.
.. versionadded:: 3.4
.. c:function:: PyHash_FuncDef* PyHash_GetFuncDef(void)
Get the hash function definition.
.. seealso::
:pep:456 "Secure and interchangeable hash algorithm".
.. versionadded:: 3.4
.. c:function:: Py_hash_t Py_HashPointer(const void *ptr)
Hash a pointer value: process the pointer value as an integer (cast it to
uintptr_t internally). The pointer is not dereferenced.
The function cannot fail: it cannot return -1.
.. versionadded:: 3.13
.. c:function:: Py_hash_t Py_HashBuffer(const void *ptr, Py_ssize_t len)
Compute and return the hash value of a buffer of len bytes
starting at address ptr. The hash is guaranteed to match that of
:class:bytes, :class:memoryview, and other built-in objects
that implement the :ref:buffer protocol <bufferobjects>.
Use this function to implement hashing for immutable objects whose
:c:member:~PyTypeObject.tp_richcompare function compares to another
object's buffer.
len must be greater than or equal to 0.
This function always succeeds.
.. versionadded:: 3.14
.. c:function:: Py_hash_t PyObject_GenericHash(PyObject *obj)
Generic hashing function that is meant to be put into a type
object's tp_hash slot.
Its result only depends on the object's identity.
.. impl-detail::
In CPython, it is equivalent to :c:func:Py_HashPointer.
.. versionadded:: 3.13