Skip to content

Commit

Permalink
pythongh-111389: expose PyHASH_INF/BITS/MODULUS/IMAG macros as public (
Browse files Browse the repository at this point in the history
…python#111418)

Co-authored-by: Victor Stinner <vstinner@python.org>
  • Loading branch information
2 people authored and diegorusso committed Apr 17, 2024
1 parent 15cfe3a commit ab7da30
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 6 deletions.
25 changes: 24 additions & 1 deletion Doc/c-api/hash.rst
Expand Up @@ -3,7 +3,7 @@
PyHash API
----------

See also the :c:member:`PyTypeObject.tp_hash` member.
See also the :c:member:`PyTypeObject.tp_hash` member and :ref:`numeric-hash`.

.. c:type:: Py_hash_t
Expand All @@ -17,6 +17,29 @@ See also the :c:member:`PyTypeObject.tp_hash` member.

.. versionadded:: 3.2

.. c:macro:: PyHASH_MODULUS
The `Mersenne prime <https://en.wikipedia.org/wiki/Mersenne_prime>`_ ``P = 2**n -1``, used for numeric hash scheme.

.. versionadded:: 3.13

.. c:macro:: PyHASH_BITS
The exponent ``n`` of ``P`` in :c:macro:`PyHASH_MODULUS`.

.. versionadded:: 3.13

.. c:macro:: PyHASH_INF
The hash value returned for a positive infinity.

.. versionadded:: 3.13

.. c:macro:: PyHASH_IMAG
The multiplier used for the imaginary part of a complex number.

.. versionadded:: 3.13

.. c:type:: PyHash_FuncDef
Expand Down
16 changes: 11 additions & 5 deletions Include/cpython/pyhash.h
Expand Up @@ -10,14 +10,20 @@
reduction modulo the prime 2**_PyHASH_BITS - 1. */

#if SIZEOF_VOID_P >= 8
# define _PyHASH_BITS 61
# define PyHASH_BITS 61
#else
# define _PyHASH_BITS 31
# define PyHASH_BITS 31
#endif

#define _PyHASH_MODULUS (((size_t)1 << _PyHASH_BITS) - 1)
#define _PyHASH_INF 314159
#define _PyHASH_IMAG _PyHASH_MULTIPLIER
#define PyHASH_MODULUS (((size_t)1 << _PyHASH_BITS) - 1)
#define PyHASH_INF 314159
#define PyHASH_IMAG _PyHASH_MULTIPLIER

/* Aliases kept for backward compatibility with Python 3.12 */
#define _PyHASH_BITS PyHASH_BITS
#define _PyHASH_MODULUS PyHASH_MODULUS
#define _PyHASH_INF PyHASH_INF
#define _PyHASH_IMAG PyHASH_IMAG

/* Helpers for hash functions */
PyAPI_FUNC(Py_hash_t) _Py_HashDouble(PyObject *, double);
Expand Down
@@ -0,0 +1,2 @@
Add :c:macro:`PyHASH_MODULUS`, :c:macro:`PyHASH_BITS`, :c:macro:`PyHASH_INF`
and :c:macro:`PyHASH_IMAG` C macros. Patch by Sergey B Kirpichev.

0 comments on commit ab7da30

Please sign in to comment.