ITookAPill's picture
PyComp First Commit
9273228
|
Raw
History Blame Contribute Delete
4.02 kB
# PyHash API
See also the `PyTypeObject.tp_hash`{.interpreted-text role="c:member"} member and `numeric-hash`{.interpreted-text role="ref"}.
> Hash value type: signed integer.
>
> ::: versionadded
> 3.2
> :::
> Hash value type: unsigned integer.
>
> ::: versionadded
> 3.2
> :::
> A numerical value indicating the algorithm for hashing of `str`{.interpreted-text role="class"}, `bytes`{.interpreted-text role="class"}, and `memoryview`{.interpreted-text role="class"}.
>
> The algorithm name is exposed by `sys.hash_info.algorithm`{.interpreted-text role="data"}.
>
> ::: versionadded
> 3.4
> :::
> Buffers of length in range `[1, Py_HASH_CUTOFF)` are hashed using DJBX33A instead of the algorithm described by `Py_HASH_ALGORITHM`{.interpreted-text role="c:macro"}.
>
> - A `!Py_HASH_CUTOFF`{.interpreted-text role="c:macro"} of 0 disables the optimization.
> - `!Py_HASH_CUTOFF`{.interpreted-text role="c:macro"} 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 `sys.hash_info.cutoff`{.interpreted-text role="data"} constant.
>
> ::: versionadded
> 3.4
> :::
> The [Mersenne prime](https://en.wikipedia.org/wiki/Mersenne_prime) `P = 2**n -1`, used for numeric hash scheme.
>
> This corresponds to the `sys.hash_info.modulus`{.interpreted-text role="data"} constant.
>
> ::: versionadded
> 3.13
> :::
> The exponent `n` of `P` in `PyHASH_MODULUS`{.interpreted-text role="c:macro"}.
>
> ::: versionadded
> 3.13
> :::
> Prime multiplier used in string and various other hashes.
>
> ::: versionadded
> 3.13
> :::
> The hash value returned for a positive infinity.
>
> This corresponds to the `sys.hash_info.inf`{.interpreted-text role="data"} constant.
>
> ::: versionadded
> 3.13
> :::
> The multiplier used for the imaginary part of a complex number.
>
> This corresponds to the `sys.hash_info.imag`{.interpreted-text role="data"} constant.
>
> ::: versionadded
> 3.13
> :::
> Hash function definition used by `PyHash_GetFuncDef`{.interpreted-text role="c:func"}.
>
> > Hash function.
>
> > Hash function name (UTF-8 encoded string).
> >
> > This corresponds to the `sys.hash_info.algorithm`{.interpreted-text role="data"} constant.
>
> > Internal size of the hash value in bits.
> >
> > This corresponds to the `sys.hash_info.hash_bits`{.interpreted-text role="data"} constant.
>
> > Size of seed input in bits.
> >
> > This corresponds to the `sys.hash_info.seed_bits`{.interpreted-text role="data"} constant.
>
> ::: versionadded
> 3.4
> :::
> Get the hash function definition.
>
> ::: seealso
> `456`{.interpreted-text role="pep"} \"Secure and interchangeable hash algorithm\".
> :::
>
> ::: versionadded
> 3.4
> :::
> 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
> :::
> Compute and return the hash value of a buffer of *len* bytes starting at address *ptr*. The hash is guaranteed to match that of `bytes`{.interpreted-text role="class"}, `memoryview`{.interpreted-text role="class"}, and other built-in objects that implement the `buffer protocol <bufferobjects>`{.interpreted-text role="ref"}.
>
> Use this function to implement hashing for immutable objects whose `~PyTypeObject.tp_richcompare`{.interpreted-text role="c:member"} function compares to another object\'s buffer.
>
> *len* must be greater than or equal to `0`.
>
> This function always succeeds.
>
> ::: versionadded
> 3.14
> :::
> 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 `Py_HashPointer`{.interpreted-text role="c:func"}.
> :::
>
> ::: versionadded
> 3.13
> :::