1.. highlight:: c 2 3.. _number: 4 5Number Protocol 6=============== 7 8 9.. c:function:: int PyNumber_Check(PyObject *o) 10 11 Returns ``1`` if the object *o* provides numeric protocols, and false otherwise. 12 This function always succeeds. 13 14 .. versionchanged:: 3.8 15 Returns ``1`` if *o* is an index integer. 16 17 18.. c:function:: PyObject* PyNumber_Add(PyObject *o1, PyObject *o2) 19 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 24.. c:function:: PyObject* PyNumber_Subtract(PyObject *o1, PyObject *o2) 25 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 30.. c:function:: PyObject* PyNumber_Multiply(PyObject *o1, PyObject *o2) 31 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 36.. 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 44.. c:function:: PyObject* PyNumber_FloorDivide(PyObject *o1, PyObject *o2) 45 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 50.. c:function:: PyObject* PyNumber_TrueDivide(PyObject *o1, PyObject *o2) 51 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 59.. c:function:: PyObject* PyNumber_Remainder(PyObject *o1, PyObject *o2) 60 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 65.. c:function:: PyObject* PyNumber_Divmod(PyObject *o1, PyObject *o2) 66 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 73.. c:function:: PyObject* PyNumber_Power(PyObject *o1, PyObject *o2, PyObject *o3) 74 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. 79 If *o3* is to be ignored, pass :c:data:`Py_None` in its place (passing ``NULL`` for 80 *o3* would cause an illegal memory access). 81 82 83.. c:function:: PyObject* PyNumber_Negative(PyObject *o) 84 85 Returns the negation of *o* on success, or ``NULL`` on failure. This is the 86 equivalent of the Python expression ``-o``. 87 88 89.. c:function:: PyObject* PyNumber_Positive(PyObject *o) 90 91 Returns *o* on success, or ``NULL`` on failure. This is the equivalent of the 92 Python expression ``+o``. 93 94 95.. c:function:: PyObject* PyNumber_Absolute(PyObject *o) 96 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 103.. c:function:: PyObject* PyNumber_Invert(PyObject *o) 104 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 109.. c:function:: PyObject* PyNumber_Lshift(PyObject *o1, PyObject *o2) 110 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 115.. c:function:: PyObject* PyNumber_Rshift(PyObject *o1, PyObject *o2) 116 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 121.. c:function:: PyObject* PyNumber_And(PyObject *o1, PyObject *o2) 122 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 127.. c:function:: PyObject* PyNumber_Xor(PyObject *o1, PyObject *o2) 128 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 133.. c:function:: PyObject* PyNumber_Or(PyObject *o1, PyObject *o2) 134 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 139.. c:function:: PyObject* PyNumber_InPlaceAdd(PyObject *o1, PyObject *o2) 140 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 146.. c:function:: PyObject* PyNumber_InPlaceSubtract(PyObject *o1, PyObject *o2) 147 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 153.. c:function:: PyObject* PyNumber_InPlaceMultiply(PyObject *o1, PyObject *o2) 154 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 160.. 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 169.. c:function:: PyObject* PyNumber_InPlaceFloorDivide(PyObject *o1, PyObject *o2) 170 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 176.. c:function:: PyObject* PyNumber_InPlaceTrueDivide(PyObject *o1, PyObject *o2) 177 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 185.. c:function:: PyObject* PyNumber_InPlaceRemainder(PyObject *o1, PyObject *o2) 186 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 192.. c:function:: PyObject* PyNumber_InPlacePower(PyObject *o1, PyObject *o2, PyObject *o3) 193 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 198 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` 200 in its place (passing ``NULL`` for *o3* would cause an illegal memory access). 201 202 203.. c:function:: PyObject* PyNumber_InPlaceLshift(PyObject *o1, PyObject *o2) 204 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 210.. c:function:: PyObject* PyNumber_InPlaceRshift(PyObject *o1, PyObject *o2) 211 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 217.. c:function:: PyObject* PyNumber_InPlaceAnd(PyObject *o1, PyObject *o2) 218 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 224.. c:function:: PyObject* PyNumber_InPlaceXor(PyObject *o1, PyObject *o2) 225 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 231.. c:function:: PyObject* PyNumber_InPlaceOr(PyObject *o1, PyObject *o2) 232 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 238.. c:function:: PyObject* PyNumber_Long(PyObject *o) 239 240 .. index:: builtin: int 241 242 Returns the *o* converted to an integer object on success, or ``NULL`` on 243 failure. This is the equivalent of the Python expression ``int(o)``. 244 245 246.. c:function:: PyObject* PyNumber_Float(PyObject *o) 247 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 254.. c:function:: PyObject* PyNumber_Index(PyObject *o) 255 256 Returns the *o* converted to a Python int on success or ``NULL`` with a 257 :exc:`TypeError` exception raised on failure. 258 259 260.. c:function:: PyObject* PyNumber_ToBase(PyObject *n, int base) 261 262 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 266 :c:func:`PyNumber_Index` first. 267 268 269.. c:function:: Py_ssize_t PyNumber_AsSsize_t(PyObject *o, PyObject *exc) 270 271 Returns *o* converted to a Py_ssize_t value if *o* can be interpreted as an 272 integer. If the call fails, an exception is raised and ``-1`` is returned. 273 274 If *o* can be converted to a Python int but the attempt to 275 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 282.. c:function:: int PyIndex_Check(PyObject *o) 283 284 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. 286 This function always succeeds. 287