blob: 9fb220b192b9a63c9877ab2e2395a1aa9ee9755a [file] [log] [blame]
Georg Brandl54a3faa2008-01-20 09:30:57 +00001.. highlightlang:: c
2
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
20 Returns the result of adding *o1* and *o2*, or *NULL* on failure. This is the
21 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
26 Returns the result of subtracting *o2* from *o1*, or *NULL* on failure. This is
27 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
32 Returns the result of multiplying *o1* and *o2*, or *NULL* on failure. This is
33 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
38 Returns the result of matrix multiplication on *o1* and *o2*, or *NULL* on
39 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
46 Return the floor of *o1* divided by *o2*, or *NULL* on failure. This is
47 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
53 *o2*, or *NULL* on failure. The return value is "approximate" because binary
54 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
61 Returns the remainder of dividing *o1* by *o2*, or *NULL* on failure. This is
62 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
69 See the built-in function :func:`divmod`. Returns *NULL* on failure. This is
70 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
77 See the built-in function :func:`pow`. Returns *NULL* on failure. This is the
78 equivalent of the Python expression ``pow(o1, o2, o3)``, where *o3* is optional.
Georg Brandl60203b42010-10-06 10:11:56 +000079 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
85 Returns the negation of *o* on success, or *NULL* on failure. This is the
86 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
91 Returns *o* on success, or *NULL* on failure. This is the equivalent of the
92 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
99 Returns the absolute value of *o*, or *NULL* on failure. This is the equivalent
100 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
105 Returns the bitwise negation of *o* on success, or *NULL* on failure. This is
106 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
111 Returns the result of left shifting *o1* by *o2* on success, or *NULL* on
112 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
117 Returns the result of right shifting *o1* by *o2* on success, or *NULL* on
118 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
123 Returns the "bitwise and" of *o1* and *o2* on success and *NULL* on failure.
124 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
129 Returns the "bitwise exclusive or" of *o1* by *o2* on success, or *NULL* on
130 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
135 Returns the "bitwise or" of *o1* and *o2* on success, or *NULL* on failure.
136 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
141 Returns the result of adding *o1* and *o2*, or *NULL* on failure. The operation
142 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
148 Returns the result of subtracting *o2* from *o1*, or *NULL* on failure. The
149 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
155 Returns the result of multiplying *o1* and *o2*, or *NULL* on failure. The
156 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
162 Returns the result of matrix multiplication on *o1* and *o2*, or *NULL* on
163 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
171 Returns the mathematical floor of dividing *o1* by *o2*, or *NULL* on failure.
172 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
179 *o2*, or *NULL* on failure. The return value is "approximate" because binary
180 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
187 Returns the remainder of dividing *o1* by *o2*, or *NULL* on failure. The
188 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
196 See the built-in function :func:`pow`. Returns *NULL* on failure. The operation
197 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`
Georg Brandl54a3faa2008-01-20 09:30:57 +0000200 in its place (passing *NULL* for *o3* would cause an illegal memory access).
201
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
205 Returns the result of left shifting *o1* by *o2* on success, or *NULL* on
206 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
212 Returns the result of right shifting *o1* by *o2* on success, or *NULL* on
213 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
219 Returns the "bitwise and" of *o1* and *o2* on success and *NULL* on failure. The
220 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
226 Returns the "bitwise exclusive or" of *o1* by *o2* on success, or *NULL* on
227 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
233 Returns the "bitwise or" of *o1* and *o2* on success, or *NULL* on failure. The
234 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
242 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
250 Returns the *o* converted to a float object on success, or *NULL* on failure.
251 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
Mark Dickinson0bbcc4c2009-01-17 09:45:37 +0000256 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
277 :exc:`IndexError` or :exc:`OverflowError`). If *exc* is *NULL*, then the
278 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.
280
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.