blob: 620204ca8e2295ec7f7cc4f4252fa67afc01aa73 [file] [log] [blame]
Stéphane Wirtelcbb64842019-05-17 11:55:34 +02001.. highlight:: c
Georg Brandl54a3faa2008-01-20 09:30:57 +00002
3.. _number:
4
5Number Protocol
6===============
7
8
Georg Brandl60203b42010-10-06 10:11:56 +00009.. c:function:: int PyNumber_Check(PyObject *o)
Georg Brandl54a3faa2008-01-20 09:30:57 +000010
11 Returns ``1`` if the object *o* provides numeric protocols, and false otherwise.
12 This function always succeeds.
13
Serhiy Storchaka6a44f6e2019-02-25 17:57:58 +020014 .. versionchanged:: 3.8
15 Returns ``1`` if *o* is an index integer.
16
Georg Brandl54a3faa2008-01-20 09:30:57 +000017
Georg Brandl60203b42010-10-06 10:11:56 +000018.. c:function:: PyObject* PyNumber_Add(PyObject *o1, PyObject *o2)
Georg Brandl54a3faa2008-01-20 09:30:57 +000019
Serhiy Storchaka25fc0882019-10-30 12:03:20 +020020 Returns the result of adding *o1* and *o2*, or ``NULL`` on failure. This is the
Georg Brandl54a3faa2008-01-20 09:30:57 +000021 equivalent of the Python expression ``o1 + o2``.
22
23
Georg Brandl60203b42010-10-06 10:11:56 +000024.. c:function:: PyObject* PyNumber_Subtract(PyObject *o1, PyObject *o2)
Georg Brandl54a3faa2008-01-20 09:30:57 +000025
Serhiy Storchaka25fc0882019-10-30 12:03:20 +020026 Returns the result of subtracting *o2* from *o1*, or ``NULL`` on failure. This is
Georg Brandl54a3faa2008-01-20 09:30:57 +000027 the equivalent of the Python expression ``o1 - o2``.
28
29
Georg Brandl60203b42010-10-06 10:11:56 +000030.. c:function:: PyObject* PyNumber_Multiply(PyObject *o1, PyObject *o2)
Georg Brandl54a3faa2008-01-20 09:30:57 +000031
Serhiy Storchaka25fc0882019-10-30 12:03:20 +020032 Returns the result of multiplying *o1* and *o2*, or ``NULL`` on failure. This is
Georg Brandl54a3faa2008-01-20 09:30:57 +000033 the equivalent of the Python expression ``o1 * o2``.
34
35
Benjamin Petersond51374e2014-04-09 23:55:56 -040036.. c:function:: PyObject* PyNumber_MatrixMultiply(PyObject *o1, PyObject *o2)
37
Serhiy Storchaka25fc0882019-10-30 12:03:20 +020038 Returns the result of matrix multiplication on *o1* and *o2*, or ``NULL`` on
Benjamin Petersond51374e2014-04-09 23:55:56 -040039 failure. This is the equivalent of the Python expression ``o1 @ o2``.
40
41 .. versionadded:: 3.5
42
43
Georg Brandl60203b42010-10-06 10:11:56 +000044.. c:function:: PyObject* PyNumber_FloorDivide(PyObject *o1, PyObject *o2)
Georg Brandl54a3faa2008-01-20 09:30:57 +000045
Serhiy Storchaka25fc0882019-10-30 12:03:20 +020046 Return the floor of *o1* divided by *o2*, or ``NULL`` on failure. This is
Georg Brandl54a3faa2008-01-20 09:30:57 +000047 equivalent to the "classic" division of integers.
48
49
Georg Brandl60203b42010-10-06 10:11:56 +000050.. c:function:: PyObject* PyNumber_TrueDivide(PyObject *o1, PyObject *o2)
Georg Brandl54a3faa2008-01-20 09:30:57 +000051
52 Return a reasonable approximation for the mathematical value of *o1* divided by
Serhiy Storchaka25fc0882019-10-30 12:03:20 +020053 *o2*, or ``NULL`` on failure. The return value is "approximate" because binary
Georg Brandl54a3faa2008-01-20 09:30:57 +000054 floating point numbers are approximate; it is not possible to represent all real
55 numbers in base two. This function can return a floating point value when
56 passed two integers.
57
58
Georg Brandl60203b42010-10-06 10:11:56 +000059.. c:function:: PyObject* PyNumber_Remainder(PyObject *o1, PyObject *o2)
Georg Brandl54a3faa2008-01-20 09:30:57 +000060
Serhiy Storchaka25fc0882019-10-30 12:03:20 +020061 Returns the remainder of dividing *o1* by *o2*, or ``NULL`` on failure. This is
Georg Brandl54a3faa2008-01-20 09:30:57 +000062 the equivalent of the Python expression ``o1 % o2``.
63
64
Georg Brandl60203b42010-10-06 10:11:56 +000065.. c:function:: PyObject* PyNumber_Divmod(PyObject *o1, PyObject *o2)
Georg Brandl54a3faa2008-01-20 09:30:57 +000066
67 .. index:: builtin: divmod
68
Serhiy Storchaka25fc0882019-10-30 12:03:20 +020069 See the built-in function :func:`divmod`. Returns ``NULL`` on failure. This is
Georg Brandl54a3faa2008-01-20 09:30:57 +000070 the equivalent of the Python expression ``divmod(o1, o2)``.
71
72
Georg Brandl60203b42010-10-06 10:11:56 +000073.. c:function:: PyObject* PyNumber_Power(PyObject *o1, PyObject *o2, PyObject *o3)
Georg Brandl54a3faa2008-01-20 09:30:57 +000074
75 .. index:: builtin: pow
76
Serhiy Storchaka25fc0882019-10-30 12:03:20 +020077 See the built-in function :func:`pow`. Returns ``NULL`` on failure. This is the
Georg Brandl54a3faa2008-01-20 09:30:57 +000078 equivalent of the Python expression ``pow(o1, o2, o3)``, where *o3* is optional.
Serhiy Storchaka25fc0882019-10-30 12:03:20 +020079 If *o3* is to be ignored, pass :c:data:`Py_None` in its place (passing ``NULL`` for
Georg Brandl54a3faa2008-01-20 09:30:57 +000080 *o3* would cause an illegal memory access).
81
82
Georg Brandl60203b42010-10-06 10:11:56 +000083.. c:function:: PyObject* PyNumber_Negative(PyObject *o)
Georg Brandl54a3faa2008-01-20 09:30:57 +000084
Serhiy Storchaka25fc0882019-10-30 12:03:20 +020085 Returns the negation of *o* on success, or ``NULL`` on failure. This is the
Georg Brandl54a3faa2008-01-20 09:30:57 +000086 equivalent of the Python expression ``-o``.
87
88
Georg Brandl60203b42010-10-06 10:11:56 +000089.. c:function:: PyObject* PyNumber_Positive(PyObject *o)
Georg Brandl54a3faa2008-01-20 09:30:57 +000090
Serhiy Storchaka25fc0882019-10-30 12:03:20 +020091 Returns *o* on success, or ``NULL`` on failure. This is the equivalent of the
Georg Brandl54a3faa2008-01-20 09:30:57 +000092 Python expression ``+o``.
93
94
Georg Brandl60203b42010-10-06 10:11:56 +000095.. c:function:: PyObject* PyNumber_Absolute(PyObject *o)
Georg Brandl54a3faa2008-01-20 09:30:57 +000096
97 .. index:: builtin: abs
98
Serhiy Storchaka25fc0882019-10-30 12:03:20 +020099 Returns the absolute value of *o*, or ``NULL`` on failure. This is the equivalent
Georg Brandl54a3faa2008-01-20 09:30:57 +0000100 of the Python expression ``abs(o)``.
101
102
Georg Brandl60203b42010-10-06 10:11:56 +0000103.. c:function:: PyObject* PyNumber_Invert(PyObject *o)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000104
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200105 Returns the bitwise negation of *o* on success, or ``NULL`` on failure. This is
Georg Brandl54a3faa2008-01-20 09:30:57 +0000106 the equivalent of the Python expression ``~o``.
107
108
Georg Brandl60203b42010-10-06 10:11:56 +0000109.. c:function:: PyObject* PyNumber_Lshift(PyObject *o1, PyObject *o2)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000110
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200111 Returns the result of left shifting *o1* by *o2* on success, or ``NULL`` on
Georg Brandl54a3faa2008-01-20 09:30:57 +0000112 failure. This is the equivalent of the Python expression ``o1 << o2``.
113
114
Georg Brandl60203b42010-10-06 10:11:56 +0000115.. c:function:: PyObject* PyNumber_Rshift(PyObject *o1, PyObject *o2)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000116
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200117 Returns the result of right shifting *o1* by *o2* on success, or ``NULL`` on
Georg Brandl54a3faa2008-01-20 09:30:57 +0000118 failure. This is the equivalent of the Python expression ``o1 >> o2``.
119
120
Georg Brandl60203b42010-10-06 10:11:56 +0000121.. c:function:: PyObject* PyNumber_And(PyObject *o1, PyObject *o2)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000122
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200123 Returns the "bitwise and" of *o1* and *o2* on success and ``NULL`` on failure.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000124 This is the equivalent of the Python expression ``o1 & o2``.
125
126
Georg Brandl60203b42010-10-06 10:11:56 +0000127.. c:function:: PyObject* PyNumber_Xor(PyObject *o1, PyObject *o2)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000128
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200129 Returns the "bitwise exclusive or" of *o1* by *o2* on success, or ``NULL`` on
Georg Brandl54a3faa2008-01-20 09:30:57 +0000130 failure. This is the equivalent of the Python expression ``o1 ^ o2``.
131
132
Georg Brandl60203b42010-10-06 10:11:56 +0000133.. c:function:: PyObject* PyNumber_Or(PyObject *o1, PyObject *o2)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000134
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200135 Returns the "bitwise or" of *o1* and *o2* on success, or ``NULL`` on failure.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000136 This is the equivalent of the Python expression ``o1 | o2``.
137
138
Georg Brandl60203b42010-10-06 10:11:56 +0000139.. c:function:: PyObject* PyNumber_InPlaceAdd(PyObject *o1, PyObject *o2)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000140
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200141 Returns the result of adding *o1* and *o2*, or ``NULL`` on failure. The operation
Georg Brandl54a3faa2008-01-20 09:30:57 +0000142 is done *in-place* when *o1* supports it. This is the equivalent of the Python
143 statement ``o1 += o2``.
144
145
Georg Brandl60203b42010-10-06 10:11:56 +0000146.. c:function:: PyObject* PyNumber_InPlaceSubtract(PyObject *o1, PyObject *o2)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000147
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200148 Returns the result of subtracting *o2* from *o1*, or ``NULL`` on failure. The
Georg Brandl54a3faa2008-01-20 09:30:57 +0000149 operation is done *in-place* when *o1* supports it. This is the equivalent of
150 the Python statement ``o1 -= o2``.
151
152
Georg Brandl60203b42010-10-06 10:11:56 +0000153.. c:function:: PyObject* PyNumber_InPlaceMultiply(PyObject *o1, PyObject *o2)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000154
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200155 Returns the result of multiplying *o1* and *o2*, or ``NULL`` on failure. The
Georg Brandl54a3faa2008-01-20 09:30:57 +0000156 operation is done *in-place* when *o1* supports it. This is the equivalent of
157 the Python statement ``o1 *= o2``.
158
159
Benjamin Petersond51374e2014-04-09 23:55:56 -0400160.. c:function:: PyObject* PyNumber_InPlaceMatrixMultiply(PyObject *o1, PyObject *o2)
161
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200162 Returns the result of matrix multiplication on *o1* and *o2*, or ``NULL`` on
Benjamin Petersond51374e2014-04-09 23:55:56 -0400163 failure. The operation is done *in-place* when *o1* supports it. This is
164 the equivalent of the Python statement ``o1 @= o2``.
165
166 .. versionadded:: 3.5
167
168
Georg Brandl60203b42010-10-06 10:11:56 +0000169.. c:function:: PyObject* PyNumber_InPlaceFloorDivide(PyObject *o1, PyObject *o2)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000170
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200171 Returns the mathematical floor of dividing *o1* by *o2*, or ``NULL`` on failure.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000172 The operation is done *in-place* when *o1* supports it. This is the equivalent
173 of the Python statement ``o1 //= o2``.
174
175
Georg Brandl60203b42010-10-06 10:11:56 +0000176.. c:function:: PyObject* PyNumber_InPlaceTrueDivide(PyObject *o1, PyObject *o2)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000177
178 Return a reasonable approximation for the mathematical value of *o1* divided by
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200179 *o2*, or ``NULL`` on failure. The return value is "approximate" because binary
Georg Brandl54a3faa2008-01-20 09:30:57 +0000180 floating point numbers are approximate; it is not possible to represent all real
181 numbers in base two. This function can return a floating point value when
182 passed two integers. The operation is done *in-place* when *o1* supports it.
183
184
Georg Brandl60203b42010-10-06 10:11:56 +0000185.. c:function:: PyObject* PyNumber_InPlaceRemainder(PyObject *o1, PyObject *o2)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000186
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200187 Returns the remainder of dividing *o1* by *o2*, or ``NULL`` on failure. The
Georg Brandl54a3faa2008-01-20 09:30:57 +0000188 operation is done *in-place* when *o1* supports it. This is the equivalent of
189 the Python statement ``o1 %= o2``.
190
191
Georg Brandl60203b42010-10-06 10:11:56 +0000192.. c:function:: PyObject* PyNumber_InPlacePower(PyObject *o1, PyObject *o2, PyObject *o3)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000193
194 .. index:: builtin: pow
195
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200196 See the built-in function :func:`pow`. Returns ``NULL`` on failure. The operation
Georg Brandl54a3faa2008-01-20 09:30:57 +0000197 is done *in-place* when *o1* supports it. This is the equivalent of the Python
Georg Brandl60203b42010-10-06 10:11:56 +0000198 statement ``o1 **= o2`` when o3 is :c:data:`Py_None`, or an in-place variant of
199 ``pow(o1, o2, o3)`` otherwise. If *o3* is to be ignored, pass :c:data:`Py_None`
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200200 in its place (passing ``NULL`` for *o3* would cause an illegal memory access).
Georg Brandl54a3faa2008-01-20 09:30:57 +0000201
202
Georg Brandl60203b42010-10-06 10:11:56 +0000203.. c:function:: PyObject* PyNumber_InPlaceLshift(PyObject *o1, PyObject *o2)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000204
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200205 Returns the result of left shifting *o1* by *o2* on success, or ``NULL`` on
Georg Brandl54a3faa2008-01-20 09:30:57 +0000206 failure. The operation is done *in-place* when *o1* supports it. This is the
207 equivalent of the Python statement ``o1 <<= o2``.
208
209
Georg Brandl60203b42010-10-06 10:11:56 +0000210.. c:function:: PyObject* PyNumber_InPlaceRshift(PyObject *o1, PyObject *o2)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000211
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200212 Returns the result of right shifting *o1* by *o2* on success, or ``NULL`` on
Georg Brandl54a3faa2008-01-20 09:30:57 +0000213 failure. The operation is done *in-place* when *o1* supports it. This is the
214 equivalent of the Python statement ``o1 >>= o2``.
215
216
Georg Brandl60203b42010-10-06 10:11:56 +0000217.. c:function:: PyObject* PyNumber_InPlaceAnd(PyObject *o1, PyObject *o2)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000218
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200219 Returns the "bitwise and" of *o1* and *o2* on success and ``NULL`` on failure. The
Georg Brandl54a3faa2008-01-20 09:30:57 +0000220 operation is done *in-place* when *o1* supports it. This is the equivalent of
221 the Python statement ``o1 &= o2``.
222
223
Georg Brandl60203b42010-10-06 10:11:56 +0000224.. c:function:: PyObject* PyNumber_InPlaceXor(PyObject *o1, PyObject *o2)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000225
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200226 Returns the "bitwise exclusive or" of *o1* by *o2* on success, or ``NULL`` on
Georg Brandl54a3faa2008-01-20 09:30:57 +0000227 failure. The operation is done *in-place* when *o1* supports it. This is the
228 equivalent of the Python statement ``o1 ^= o2``.
229
230
Georg Brandl60203b42010-10-06 10:11:56 +0000231.. c:function:: PyObject* PyNumber_InPlaceOr(PyObject *o1, PyObject *o2)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000232
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200233 Returns the "bitwise or" of *o1* and *o2* on success, or ``NULL`` on failure. The
Georg Brandl54a3faa2008-01-20 09:30:57 +0000234 operation is done *in-place* when *o1* supports it. This is the equivalent of
235 the Python statement ``o1 |= o2``.
236
237
Georg Brandl60203b42010-10-06 10:11:56 +0000238.. c:function:: PyObject* PyNumber_Long(PyObject *o)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000239
Mark Dickinsond7467682009-01-10 22:14:33 +0000240 .. index:: builtin: int
Georg Brandl54a3faa2008-01-20 09:30:57 +0000241
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200242 Returns the *o* converted to an integer object on success, or ``NULL`` on
Mark Dickinsond7467682009-01-10 22:14:33 +0000243 failure. This is the equivalent of the Python expression ``int(o)``.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000244
245
Georg Brandl60203b42010-10-06 10:11:56 +0000246.. c:function:: PyObject* PyNumber_Float(PyObject *o)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000247
248 .. index:: builtin: float
249
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200250 Returns the *o* converted to a float object on success, or ``NULL`` on failure.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000251 This is the equivalent of the Python expression ``float(o)``.
252
253
Georg Brandl60203b42010-10-06 10:11:56 +0000254.. c:function:: PyObject* PyNumber_Index(PyObject *o)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000255
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200256 Returns the *o* converted to a Python int on success or ``NULL`` with a
Benjamin Petersone5384b02008-10-04 22:00:42 +0000257 :exc:`TypeError` exception raised on failure.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000258
259
Georg Brandl60203b42010-10-06 10:11:56 +0000260.. c:function:: PyObject* PyNumber_ToBase(PyObject *n, int base)
Christian Heimes81ee3ef2008-05-04 22:42:01 +0000261
Mark Dickinsonf1ab47e2011-10-11 18:06:36 +0100262 Returns the integer *n* converted to base *base* as a string. The *base*
263 argument must be one of 2, 8, 10, or 16. For base 2, 8, or 16, the
264 returned string is prefixed with a base marker of ``'0b'``, ``'0o'``, or
265 ``'0x'``, respectively. If *n* is not a Python int, it is converted with
Georg Brandl60203b42010-10-06 10:11:56 +0000266 :c:func:`PyNumber_Index` first.
Christian Heimes81ee3ef2008-05-04 22:42:01 +0000267
Christian Heimes81ee3ef2008-05-04 22:42:01 +0000268
Georg Brandl60203b42010-10-06 10:11:56 +0000269.. c:function:: Py_ssize_t PyNumber_AsSsize_t(PyObject *o, PyObject *exc)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000270
271 Returns *o* converted to a Py_ssize_t value if *o* can be interpreted as an
Serhiy Storchaka1ecf7d22016-10-27 21:41:19 +0300272 integer. If the call fails, an exception is raised and ``-1`` is returned.
Antoine Pitroufd060472011-07-13 21:02:22 +0200273
274 If *o* can be converted to a Python int but the attempt to
Georg Brandl54a3faa2008-01-20 09:30:57 +0000275 convert to a Py_ssize_t value would raise an :exc:`OverflowError`, then the
276 *exc* argument is the type of exception that will be raised (usually
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200277 :exc:`IndexError` or :exc:`OverflowError`). If *exc* is ``NULL``, then the
Serhiy Storchakae835b312019-10-30 21:37:16 +0200278 exception is cleared and the value is clipped to ``PY_SSIZE_T_MIN`` for a negative
279 integer or ``PY_SSIZE_T_MAX`` for a positive integer.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000280
281
Georg Brandl60203b42010-10-06 10:11:56 +0000282.. c:function:: int PyIndex_Check(PyObject *o)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000283
Serhiy Storchaka4adf01c2016-10-19 18:30:05 +0300284 Returns ``1`` if *o* is an index integer (has the nb_index slot of the
285 tp_as_number structure filled in), and ``0`` otherwise.
Serhiy Storchaka3fcc1e02018-12-18 13:57:17 +0200286 This function always succeeds.