Spaces:
Running on Zero
Running on Zero
File size: 4,016 Bytes
9273228 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | # 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
> :::
|