17db96d56Sopenharmony_ci.. highlight:: c
27db96d56Sopenharmony_ci
37db96d56Sopenharmony_ci.. _longobjects:
47db96d56Sopenharmony_ci
57db96d56Sopenharmony_ciInteger Objects
67db96d56Sopenharmony_ci---------------
77db96d56Sopenharmony_ci
87db96d56Sopenharmony_ci.. index:: pair: object; long integer
97db96d56Sopenharmony_ci           pair: object; integer
107db96d56Sopenharmony_ci
117db96d56Sopenharmony_ciAll integers are implemented as "long" integer objects of arbitrary size.
127db96d56Sopenharmony_ci
137db96d56Sopenharmony_ciOn error, most ``PyLong_As*`` APIs return ``(return type)-1`` which cannot be
147db96d56Sopenharmony_cidistinguished from a number.  Use :c:func:`PyErr_Occurred` to disambiguate.
157db96d56Sopenharmony_ci
167db96d56Sopenharmony_ci.. c:type:: PyLongObject
177db96d56Sopenharmony_ci
187db96d56Sopenharmony_ci   This subtype of :c:type:`PyObject` represents a Python integer object.
197db96d56Sopenharmony_ci
207db96d56Sopenharmony_ci
217db96d56Sopenharmony_ci.. c:var:: PyTypeObject PyLong_Type
227db96d56Sopenharmony_ci
237db96d56Sopenharmony_ci   This instance of :c:type:`PyTypeObject` represents the Python integer type.
247db96d56Sopenharmony_ci   This is the same object as :class:`int` in the Python layer.
257db96d56Sopenharmony_ci
267db96d56Sopenharmony_ci
277db96d56Sopenharmony_ci.. c:function:: int PyLong_Check(PyObject *p)
287db96d56Sopenharmony_ci
297db96d56Sopenharmony_ci   Return true if its argument is a :c:type:`PyLongObject` or a subtype of
307db96d56Sopenharmony_ci   :c:type:`PyLongObject`.  This function always succeeds.
317db96d56Sopenharmony_ci
327db96d56Sopenharmony_ci
337db96d56Sopenharmony_ci.. c:function:: int PyLong_CheckExact(PyObject *p)
347db96d56Sopenharmony_ci
357db96d56Sopenharmony_ci   Return true if its argument is a :c:type:`PyLongObject`, but not a subtype of
367db96d56Sopenharmony_ci   :c:type:`PyLongObject`.  This function always succeeds.
377db96d56Sopenharmony_ci
387db96d56Sopenharmony_ci
397db96d56Sopenharmony_ci.. c:function:: PyObject* PyLong_FromLong(long v)
407db96d56Sopenharmony_ci
417db96d56Sopenharmony_ci   Return a new :c:type:`PyLongObject` object from *v*, or ``NULL`` on failure.
427db96d56Sopenharmony_ci
437db96d56Sopenharmony_ci   The current implementation keeps an array of integer objects for all integers
447db96d56Sopenharmony_ci   between ``-5`` and ``256``. When you create an int in that range you actually
457db96d56Sopenharmony_ci   just get back a reference to the existing object.
467db96d56Sopenharmony_ci
477db96d56Sopenharmony_ci
487db96d56Sopenharmony_ci.. c:function:: PyObject* PyLong_FromUnsignedLong(unsigned long v)
497db96d56Sopenharmony_ci
507db96d56Sopenharmony_ci   Return a new :c:type:`PyLongObject` object from a C :c:expr:`unsigned long`, or
517db96d56Sopenharmony_ci   ``NULL`` on failure.
527db96d56Sopenharmony_ci
537db96d56Sopenharmony_ci
547db96d56Sopenharmony_ci.. c:function:: PyObject* PyLong_FromSsize_t(Py_ssize_t v)
557db96d56Sopenharmony_ci
567db96d56Sopenharmony_ci   Return a new :c:type:`PyLongObject` object from a C :c:type:`Py_ssize_t`, or
577db96d56Sopenharmony_ci   ``NULL`` on failure.
587db96d56Sopenharmony_ci
597db96d56Sopenharmony_ci
607db96d56Sopenharmony_ci.. c:function:: PyObject* PyLong_FromSize_t(size_t v)
617db96d56Sopenharmony_ci
627db96d56Sopenharmony_ci   Return a new :c:type:`PyLongObject` object from a C :c:type:`size_t`, or
637db96d56Sopenharmony_ci   ``NULL`` on failure.
647db96d56Sopenharmony_ci
657db96d56Sopenharmony_ci
667db96d56Sopenharmony_ci.. c:function:: PyObject* PyLong_FromLongLong(long long v)
677db96d56Sopenharmony_ci
687db96d56Sopenharmony_ci   Return a new :c:type:`PyLongObject` object from a C :c:expr:`long long`, or ``NULL``
697db96d56Sopenharmony_ci   on failure.
707db96d56Sopenharmony_ci
717db96d56Sopenharmony_ci
727db96d56Sopenharmony_ci.. c:function:: PyObject* PyLong_FromUnsignedLongLong(unsigned long long v)
737db96d56Sopenharmony_ci
747db96d56Sopenharmony_ci   Return a new :c:type:`PyLongObject` object from a C :c:expr:`unsigned long long`,
757db96d56Sopenharmony_ci   or ``NULL`` on failure.
767db96d56Sopenharmony_ci
777db96d56Sopenharmony_ci
787db96d56Sopenharmony_ci.. c:function:: PyObject* PyLong_FromDouble(double v)
797db96d56Sopenharmony_ci
807db96d56Sopenharmony_ci   Return a new :c:type:`PyLongObject` object from the integer part of *v*, or
817db96d56Sopenharmony_ci   ``NULL`` on failure.
827db96d56Sopenharmony_ci
837db96d56Sopenharmony_ci
847db96d56Sopenharmony_ci.. c:function:: PyObject* PyLong_FromString(const char *str, char **pend, int base)
857db96d56Sopenharmony_ci
867db96d56Sopenharmony_ci   Return a new :c:type:`PyLongObject` based on the string value in *str*, which
877db96d56Sopenharmony_ci   is interpreted according to the radix in *base*.  If *pend* is non-``NULL``,
887db96d56Sopenharmony_ci   *\*pend* will point to the first character in *str* which follows the
897db96d56Sopenharmony_ci   representation of the number.  If *base* is ``0``, *str* is interpreted using
907db96d56Sopenharmony_ci   the :ref:`integers` definition; in this case, leading zeros in a
917db96d56Sopenharmony_ci   non-zero decimal number raises a :exc:`ValueError`. If *base* is not ``0``,
927db96d56Sopenharmony_ci   it must be between ``2`` and ``36``, inclusive.  Leading spaces and single
937db96d56Sopenharmony_ci   underscores after a base specifier and between digits are ignored.  If there
947db96d56Sopenharmony_ci   are no digits, :exc:`ValueError` will be raised.
957db96d56Sopenharmony_ci
967db96d56Sopenharmony_ci   .. seealso:: Python methods :meth:`int.to_bytes` and :meth:`int.from_bytes`
977db96d56Sopenharmony_ci      to convert a :c:type:`PyLongObject` to/from an array of bytes in base
987db96d56Sopenharmony_ci      ``256``. You can call those from C using :c:func:`PyObject_CallMethod`.
997db96d56Sopenharmony_ci
1007db96d56Sopenharmony_ci
1017db96d56Sopenharmony_ci.. c:function:: PyObject* PyLong_FromUnicodeObject(PyObject *u, int base)
1027db96d56Sopenharmony_ci
1037db96d56Sopenharmony_ci   Convert a sequence of Unicode digits in the string *u* to a Python integer
1047db96d56Sopenharmony_ci   value.
1057db96d56Sopenharmony_ci
1067db96d56Sopenharmony_ci   .. versionadded:: 3.3
1077db96d56Sopenharmony_ci
1087db96d56Sopenharmony_ci
1097db96d56Sopenharmony_ci.. c:function:: PyObject* PyLong_FromVoidPtr(void *p)
1107db96d56Sopenharmony_ci
1117db96d56Sopenharmony_ci   Create a Python integer from the pointer *p*. The pointer value can be
1127db96d56Sopenharmony_ci   retrieved from the resulting value using :c:func:`PyLong_AsVoidPtr`.
1137db96d56Sopenharmony_ci
1147db96d56Sopenharmony_ci
1157db96d56Sopenharmony_ci.. XXX alias PyLong_AS_LONG (for now)
1167db96d56Sopenharmony_ci.. c:function:: long PyLong_AsLong(PyObject *obj)
1177db96d56Sopenharmony_ci
1187db96d56Sopenharmony_ci   .. index::
1197db96d56Sopenharmony_ci      single: LONG_MAX
1207db96d56Sopenharmony_ci      single: OverflowError (built-in exception)
1217db96d56Sopenharmony_ci
1227db96d56Sopenharmony_ci   Return a C :c:expr:`long` representation of *obj*.  If *obj* is not an
1237db96d56Sopenharmony_ci   instance of :c:type:`PyLongObject`, first call its :meth:`__index__` method
1247db96d56Sopenharmony_ci   (if present) to convert it to a :c:type:`PyLongObject`.
1257db96d56Sopenharmony_ci
1267db96d56Sopenharmony_ci   Raise :exc:`OverflowError` if the value of *obj* is out of range for a
1277db96d56Sopenharmony_ci   :c:expr:`long`.
1287db96d56Sopenharmony_ci
1297db96d56Sopenharmony_ci   Returns ``-1`` on error.  Use :c:func:`PyErr_Occurred` to disambiguate.
1307db96d56Sopenharmony_ci
1317db96d56Sopenharmony_ci   .. versionchanged:: 3.8
1327db96d56Sopenharmony_ci      Use :meth:`__index__` if available.
1337db96d56Sopenharmony_ci
1347db96d56Sopenharmony_ci   .. versionchanged:: 3.10
1357db96d56Sopenharmony_ci      This function will no longer use :meth:`__int__`.
1367db96d56Sopenharmony_ci
1377db96d56Sopenharmony_ci
1387db96d56Sopenharmony_ci.. c:function:: long PyLong_AsLongAndOverflow(PyObject *obj, int *overflow)
1397db96d56Sopenharmony_ci
1407db96d56Sopenharmony_ci   Return a C :c:expr:`long` representation of *obj*.  If *obj* is not an
1417db96d56Sopenharmony_ci   instance of :c:type:`PyLongObject`, first call its :meth:`__index__`
1427db96d56Sopenharmony_ci   method (if present) to convert it to a :c:type:`PyLongObject`.
1437db96d56Sopenharmony_ci
1447db96d56Sopenharmony_ci   If the value of *obj* is greater than :const:`LONG_MAX` or less than
1457db96d56Sopenharmony_ci   :const:`LONG_MIN`, set *\*overflow* to ``1`` or ``-1``, respectively, and
1467db96d56Sopenharmony_ci   return ``-1``; otherwise, set *\*overflow* to ``0``.  If any other exception
1477db96d56Sopenharmony_ci   occurs set *\*overflow* to ``0`` and return ``-1`` as usual.
1487db96d56Sopenharmony_ci
1497db96d56Sopenharmony_ci   Returns ``-1`` on error.  Use :c:func:`PyErr_Occurred` to disambiguate.
1507db96d56Sopenharmony_ci
1517db96d56Sopenharmony_ci   .. versionchanged:: 3.8
1527db96d56Sopenharmony_ci      Use :meth:`__index__` if available.
1537db96d56Sopenharmony_ci
1547db96d56Sopenharmony_ci   .. versionchanged:: 3.10
1557db96d56Sopenharmony_ci      This function will no longer use :meth:`__int__`.
1567db96d56Sopenharmony_ci
1577db96d56Sopenharmony_ci
1587db96d56Sopenharmony_ci.. c:function:: long long PyLong_AsLongLong(PyObject *obj)
1597db96d56Sopenharmony_ci
1607db96d56Sopenharmony_ci   .. index::
1617db96d56Sopenharmony_ci      single: OverflowError (built-in exception)
1627db96d56Sopenharmony_ci
1637db96d56Sopenharmony_ci   Return a C :c:expr:`long long` representation of *obj*.  If *obj* is not an
1647db96d56Sopenharmony_ci   instance of :c:type:`PyLongObject`, first call its :meth:`__index__` method
1657db96d56Sopenharmony_ci   (if present) to convert it to a :c:type:`PyLongObject`.
1667db96d56Sopenharmony_ci
1677db96d56Sopenharmony_ci   Raise :exc:`OverflowError` if the value of *obj* is out of range for a
1687db96d56Sopenharmony_ci   :c:expr:`long long`.
1697db96d56Sopenharmony_ci
1707db96d56Sopenharmony_ci   Returns ``-1`` on error.  Use :c:func:`PyErr_Occurred` to disambiguate.
1717db96d56Sopenharmony_ci
1727db96d56Sopenharmony_ci   .. versionchanged:: 3.8
1737db96d56Sopenharmony_ci      Use :meth:`__index__` if available.
1747db96d56Sopenharmony_ci
1757db96d56Sopenharmony_ci   .. versionchanged:: 3.10
1767db96d56Sopenharmony_ci      This function will no longer use :meth:`__int__`.
1777db96d56Sopenharmony_ci
1787db96d56Sopenharmony_ci
1797db96d56Sopenharmony_ci.. c:function:: long long PyLong_AsLongLongAndOverflow(PyObject *obj, int *overflow)
1807db96d56Sopenharmony_ci
1817db96d56Sopenharmony_ci   Return a C :c:expr:`long long` representation of *obj*.  If *obj* is not an
1827db96d56Sopenharmony_ci   instance of :c:type:`PyLongObject`, first call its :meth:`__index__` method
1837db96d56Sopenharmony_ci   (if present) to convert it to a :c:type:`PyLongObject`.
1847db96d56Sopenharmony_ci
1857db96d56Sopenharmony_ci   If the value of *obj* is greater than :const:`LLONG_MAX` or less than
1867db96d56Sopenharmony_ci   :const:`LLONG_MIN`, set *\*overflow* to ``1`` or ``-1``, respectively,
1877db96d56Sopenharmony_ci   and return ``-1``; otherwise, set *\*overflow* to ``0``.  If any other
1887db96d56Sopenharmony_ci   exception occurs set *\*overflow* to ``0`` and return ``-1`` as usual.
1897db96d56Sopenharmony_ci
1907db96d56Sopenharmony_ci   Returns ``-1`` on error.  Use :c:func:`PyErr_Occurred` to disambiguate.
1917db96d56Sopenharmony_ci
1927db96d56Sopenharmony_ci   .. versionadded:: 3.2
1937db96d56Sopenharmony_ci
1947db96d56Sopenharmony_ci   .. versionchanged:: 3.8
1957db96d56Sopenharmony_ci      Use :meth:`__index__` if available.
1967db96d56Sopenharmony_ci
1977db96d56Sopenharmony_ci   .. versionchanged:: 3.10
1987db96d56Sopenharmony_ci      This function will no longer use :meth:`__int__`.
1997db96d56Sopenharmony_ci
2007db96d56Sopenharmony_ci
2017db96d56Sopenharmony_ci.. c:function:: Py_ssize_t PyLong_AsSsize_t(PyObject *pylong)
2027db96d56Sopenharmony_ci
2037db96d56Sopenharmony_ci   .. index::
2047db96d56Sopenharmony_ci      single: PY_SSIZE_T_MAX
2057db96d56Sopenharmony_ci      single: OverflowError (built-in exception)
2067db96d56Sopenharmony_ci
2077db96d56Sopenharmony_ci   Return a C :c:type:`Py_ssize_t` representation of *pylong*.  *pylong* must
2087db96d56Sopenharmony_ci   be an instance of :c:type:`PyLongObject`.
2097db96d56Sopenharmony_ci
2107db96d56Sopenharmony_ci   Raise :exc:`OverflowError` if the value of *pylong* is out of range for a
2117db96d56Sopenharmony_ci   :c:type:`Py_ssize_t`.
2127db96d56Sopenharmony_ci
2137db96d56Sopenharmony_ci   Returns ``-1`` on error.  Use :c:func:`PyErr_Occurred` to disambiguate.
2147db96d56Sopenharmony_ci
2157db96d56Sopenharmony_ci
2167db96d56Sopenharmony_ci.. c:function:: unsigned long PyLong_AsUnsignedLong(PyObject *pylong)
2177db96d56Sopenharmony_ci
2187db96d56Sopenharmony_ci   .. index::
2197db96d56Sopenharmony_ci      single: ULONG_MAX
2207db96d56Sopenharmony_ci      single: OverflowError (built-in exception)
2217db96d56Sopenharmony_ci
2227db96d56Sopenharmony_ci   Return a C :c:expr:`unsigned long` representation of *pylong*.  *pylong*
2237db96d56Sopenharmony_ci   must be an instance of :c:type:`PyLongObject`.
2247db96d56Sopenharmony_ci
2257db96d56Sopenharmony_ci   Raise :exc:`OverflowError` if the value of *pylong* is out of range for a
2267db96d56Sopenharmony_ci   :c:expr:`unsigned long`.
2277db96d56Sopenharmony_ci
2287db96d56Sopenharmony_ci   Returns ``(unsigned long)-1`` on error.
2297db96d56Sopenharmony_ci   Use :c:func:`PyErr_Occurred` to disambiguate.
2307db96d56Sopenharmony_ci
2317db96d56Sopenharmony_ci
2327db96d56Sopenharmony_ci.. c:function:: size_t PyLong_AsSize_t(PyObject *pylong)
2337db96d56Sopenharmony_ci
2347db96d56Sopenharmony_ci   .. index::
2357db96d56Sopenharmony_ci      single: SIZE_MAX
2367db96d56Sopenharmony_ci      single: OverflowError (built-in exception)
2377db96d56Sopenharmony_ci
2387db96d56Sopenharmony_ci   Return a C :c:type:`size_t` representation of *pylong*.  *pylong* must be
2397db96d56Sopenharmony_ci   an instance of :c:type:`PyLongObject`.
2407db96d56Sopenharmony_ci
2417db96d56Sopenharmony_ci   Raise :exc:`OverflowError` if the value of *pylong* is out of range for a
2427db96d56Sopenharmony_ci   :c:type:`size_t`.
2437db96d56Sopenharmony_ci
2447db96d56Sopenharmony_ci   Returns ``(size_t)-1`` on error.
2457db96d56Sopenharmony_ci   Use :c:func:`PyErr_Occurred` to disambiguate.
2467db96d56Sopenharmony_ci
2477db96d56Sopenharmony_ci
2487db96d56Sopenharmony_ci.. c:function:: unsigned long long PyLong_AsUnsignedLongLong(PyObject *pylong)
2497db96d56Sopenharmony_ci
2507db96d56Sopenharmony_ci   .. index::
2517db96d56Sopenharmony_ci      single: OverflowError (built-in exception)
2527db96d56Sopenharmony_ci
2537db96d56Sopenharmony_ci   Return a C :c:expr:`unsigned long long` representation of *pylong*.  *pylong*
2547db96d56Sopenharmony_ci   must be an instance of :c:type:`PyLongObject`.
2557db96d56Sopenharmony_ci
2567db96d56Sopenharmony_ci   Raise :exc:`OverflowError` if the value of *pylong* is out of range for an
2577db96d56Sopenharmony_ci   :c:expr:`unsigned long long`.
2587db96d56Sopenharmony_ci
2597db96d56Sopenharmony_ci   Returns ``(unsigned long long)-1`` on error.
2607db96d56Sopenharmony_ci   Use :c:func:`PyErr_Occurred` to disambiguate.
2617db96d56Sopenharmony_ci
2627db96d56Sopenharmony_ci   .. versionchanged:: 3.1
2637db96d56Sopenharmony_ci      A negative *pylong* now raises :exc:`OverflowError`, not :exc:`TypeError`.
2647db96d56Sopenharmony_ci
2657db96d56Sopenharmony_ci
2667db96d56Sopenharmony_ci.. c:function:: unsigned long PyLong_AsUnsignedLongMask(PyObject *obj)
2677db96d56Sopenharmony_ci
2687db96d56Sopenharmony_ci   Return a C :c:expr:`unsigned long` representation of *obj*.  If *obj* is not
2697db96d56Sopenharmony_ci   an instance of :c:type:`PyLongObject`, first call its :meth:`__index__`
2707db96d56Sopenharmony_ci   method (if present) to convert it to a :c:type:`PyLongObject`.
2717db96d56Sopenharmony_ci
2727db96d56Sopenharmony_ci   If the value of *obj* is out of range for an :c:expr:`unsigned long`,
2737db96d56Sopenharmony_ci   return the reduction of that value modulo ``ULONG_MAX + 1``.
2747db96d56Sopenharmony_ci
2757db96d56Sopenharmony_ci   Returns ``(unsigned long)-1`` on error.  Use :c:func:`PyErr_Occurred` to
2767db96d56Sopenharmony_ci   disambiguate.
2777db96d56Sopenharmony_ci
2787db96d56Sopenharmony_ci   .. versionchanged:: 3.8
2797db96d56Sopenharmony_ci      Use :meth:`__index__` if available.
2807db96d56Sopenharmony_ci
2817db96d56Sopenharmony_ci   .. versionchanged:: 3.10
2827db96d56Sopenharmony_ci      This function will no longer use :meth:`__int__`.
2837db96d56Sopenharmony_ci
2847db96d56Sopenharmony_ci
2857db96d56Sopenharmony_ci.. c:function:: unsigned long long PyLong_AsUnsignedLongLongMask(PyObject *obj)
2867db96d56Sopenharmony_ci
2877db96d56Sopenharmony_ci   Return a C :c:expr:`unsigned long long` representation of *obj*.  If *obj*
2887db96d56Sopenharmony_ci   is not an instance of :c:type:`PyLongObject`, first call its
2897db96d56Sopenharmony_ci   :meth:`__index__` method (if present) to convert it to a
2907db96d56Sopenharmony_ci   :c:type:`PyLongObject`.
2917db96d56Sopenharmony_ci
2927db96d56Sopenharmony_ci   If the value of *obj* is out of range for an :c:expr:`unsigned long long`,
2937db96d56Sopenharmony_ci   return the reduction of that value modulo ``ULLONG_MAX + 1``.
2947db96d56Sopenharmony_ci
2957db96d56Sopenharmony_ci   Returns ``(unsigned long long)-1`` on error.  Use :c:func:`PyErr_Occurred`
2967db96d56Sopenharmony_ci   to disambiguate.
2977db96d56Sopenharmony_ci
2987db96d56Sopenharmony_ci   .. versionchanged:: 3.8
2997db96d56Sopenharmony_ci      Use :meth:`__index__` if available.
3007db96d56Sopenharmony_ci
3017db96d56Sopenharmony_ci   .. versionchanged:: 3.10
3027db96d56Sopenharmony_ci      This function will no longer use :meth:`__int__`.
3037db96d56Sopenharmony_ci
3047db96d56Sopenharmony_ci
3057db96d56Sopenharmony_ci.. c:function:: double PyLong_AsDouble(PyObject *pylong)
3067db96d56Sopenharmony_ci
3077db96d56Sopenharmony_ci   Return a C :c:expr:`double` representation of *pylong*.  *pylong* must be
3087db96d56Sopenharmony_ci   an instance of :c:type:`PyLongObject`.
3097db96d56Sopenharmony_ci
3107db96d56Sopenharmony_ci   Raise :exc:`OverflowError` if the value of *pylong* is out of range for a
3117db96d56Sopenharmony_ci   :c:expr:`double`.
3127db96d56Sopenharmony_ci
3137db96d56Sopenharmony_ci   Returns ``-1.0`` on error.  Use :c:func:`PyErr_Occurred` to disambiguate.
3147db96d56Sopenharmony_ci
3157db96d56Sopenharmony_ci
3167db96d56Sopenharmony_ci.. c:function:: void* PyLong_AsVoidPtr(PyObject *pylong)
3177db96d56Sopenharmony_ci
3187db96d56Sopenharmony_ci   Convert a Python integer *pylong* to a C :c:expr:`void` pointer.
3197db96d56Sopenharmony_ci   If *pylong* cannot be converted, an :exc:`OverflowError` will be raised.  This
3207db96d56Sopenharmony_ci   is only assured to produce a usable :c:expr:`void` pointer for values created
3217db96d56Sopenharmony_ci   with :c:func:`PyLong_FromVoidPtr`.
3227db96d56Sopenharmony_ci
3237db96d56Sopenharmony_ci   Returns ``NULL`` on error.  Use :c:func:`PyErr_Occurred` to disambiguate.
324