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