1 from cpython.ref cimport PyObject
3 cdef extern from "Python.h":
5 #####################################################################
7 #####################################################################
9 bint PyNumber_Check(object o)
10 # Returns 1 if the object o provides numeric protocols, and false
11 # otherwise. This function always succeeds.
13 object PyNumber_Add(object o1, object o2)
14 # Return value: New reference.
15 # Returns the result of adding o1 and o2, or NULL on failure. This
16 # is the equivalent of the Python expression "o1 + o2".
18 object PyNumber_Subtract(object o1, object o2)
19 # Return value: New reference.
20 # Returns the result of subtracting o2 from o1, or NULL on
21 # failure. This is the equivalent of the Python expression "o1 -
24 object PyNumber_Multiply(object o1, object o2)
25 # Return value: New reference.
26 # Returns the result of multiplying o1 and o2, or NULL on
27 # failure. This is the equivalent of the Python expression "o1 *
30 object PyNumber_Divide(object o1, object o2)
31 # Return value: New reference.
32 # Returns the result of dividing o1 by o2, or NULL on
33 # failure. This is the equivalent of the Python expression "o1 /
36 object PyNumber_FloorDivide(object o1, object o2)
37 # Return value: New reference.
38 # Return the floor of o1 divided by o2, or NULL on failure. This
39 # is equivalent to the ``classic'' division of integers.
41 object PyNumber_TrueDivide(object o1, object o2)
42 # Return value: New reference.
43 # Return a reasonable approximation for the mathematical value of
44 # o1 divided by o2, or NULL on failure. The return value is
45 # ``approximate'' because binary floating point numbers are
46 # approximate; it is not possible to represent all real numbers in
47 # base two. This function can return a floating point value when
48 # passed two integers.
50 object PyNumber_Remainder(object o1, object o2)
51 # Return value: New reference.
52 # Returns the remainder of dividing o1 by o2, or NULL on
53 # failure. This is the equivalent of the Python expression "o1 %
56 object PyNumber_Divmod(object o1, object o2)
57 # Return value: New reference.
58 # See the built-in function divmod(). Returns NULL on
59 # failure. This is the equivalent of the Python expression
62 object PyNumber_Power(object o1, object o2, object o3)
63 # Return value: New reference.
64 # See the built-in function pow(). Returns NULL on failure. This
65 # is the equivalent of the Python expression "pow(o1, o2, o3)",
66 # where o3 is optional. If o3 is to be ignored, pass Py_None in
67 # its place (passing NULL for o3 would cause an illegal memory
70 object PyNumber_Negative(object o)
71 # Return value: New reference.
72 # Returns the negation of o on success, or NULL on failure. This
73 # is the equivalent of the Python expression "-o".
75 object PyNumber_Positive(object o)
76 # Return value: New reference.
77 # Returns o on success, or NULL on failure. This is the equivalent
78 # of the Python expression "+o".
80 object PyNumber_Absolute(object o)
81 # Return value: New reference.
82 # Returns the absolute value of o, or NULL on failure. This is the
83 # equivalent of the Python expression "abs(o)".
85 object PyNumber_Invert(object o)
86 # Return value: New reference.
87 # Returns the bitwise negation of o on success, or NULL on
88 # failure. This is the equivalent of the Python expression "~o".
90 object PyNumber_Lshift(object o1, object o2)
91 # Return value: New reference.
92 # Returns the result of left shifting o1 by o2 on success, or NULL
93 # on failure. This is the equivalent of the Python expression "o1
96 object PyNumber_Rshift(object o1, object o2)
97 # Return value: New reference.
98 # Returns the result of right shifting o1 by o2 on success, or
99 # NULL on failure. This is the equivalent of the Python expression
102 object PyNumber_And(object o1, object o2)
103 # Return value: New reference.
104 # Returns the ``bitwise and'' of o1 and o2 on success and NULL on
105 # failure. This is the equivalent of the Python expression "o1 &
108 object PyNumber_Xor(object o1, object o2)
109 # Return value: New reference.
110 # Returns the ``bitwise exclusive or'' of o1 by o2 on success, or
111 # NULL on failure. This is the equivalent of the Python expression
114 object PyNumber_Or(object o1, object o2)
115 # Return value: New reference.
116 # Returns the ``bitwise or'' of o1 and o2 on success, or NULL on failure. This is the equivalent of the Python expression "o1 | o2".
118 object PyNumber_InPlaceAdd(object o1, object o2)
119 # Return value: New reference.
120 # Returns the result of adding o1 and o2, or NULL on failure. The
121 # operation is done in-place when o1 supports it. This is the
122 # equivalent of the Python statement "o1 += o2".
124 object PyNumber_InPlaceSubtract(object o1, object o2)
125 # Return value: New reference.
126 # Returns the result of subtracting o2 from o1, or NULL on
127 # failure. The operation is done in-place when o1 supports
128 # it. This is the equivalent of the Python statement "o1 -= o2".
130 object PyNumber_InPlaceMultiply(object o1, object o2)
131 # Return value: New reference.
132 # Returns the result of multiplying o1 and o2, or NULL on
133 # failure. The operation is done in-place when o1 supports
134 # it. This is the equivalent of the Python statement "o1 *= o2".
136 object PyNumber_InPlaceDivide(object o1, object o2)
137 # Return value: New reference.
138 # Returns the result of dividing o1 by o2, or NULL on failure. The
139 # operation is done in-place when o1 supports it. This is the
140 # equivalent of the Python statement "o1 /= o2".
142 object PyNumber_InPlaceFloorDivide(object o1, object o2)
143 # Return value: New reference.
144 # Returns the mathematical floor of dividing o1 by o2, or NULL on
145 # failure. The operation is done in-place when o1 supports
146 # it. This is the equivalent of the Python statement "o1 //=
149 object PyNumber_InPlaceTrueDivide(object o1, object o2)
150 # Return value: New reference.
151 # Return a reasonable approximation for the mathematical value of
152 # o1 divided by o2, or NULL on failure. The return value is
153 # ``approximate'' because binary floating point numbers are
154 # approximate; it is not possible to represent all real numbers in
155 # base two. This function can return a floating point value when
156 # passed two integers. The operation is done in-place when o1
159 object PyNumber_InPlaceRemainder(object o1, object o2)
160 # Return value: New reference.
161 # Returns the remainder of dividing o1 by o2, or NULL on
162 # failure. The operation is done in-place when o1 supports
163 # it. This is the equivalent of the Python statement "o1 %= o2".
165 object PyNumber_InPlacePower(object o1, object o2, object o3)
166 # Return value: New reference.
167 # See the built-in function pow(). Returns NULL on failure. The
168 # operation is done in-place when o1 supports it. This is the
169 # equivalent of the Python statement "o1 **= o2" when o3 is
170 # Py_None, or an in-place variant of "pow(o1, o2, o3)"
171 # otherwise. If o3 is to be ignored, pass Py_None in its place
172 # (passing NULL for o3 would cause an illegal memory access).
174 object PyNumber_InPlaceLshift(object o1, object o2)
175 # Return value: New reference.
176 # Returns the result of left shifting o1 by o2 on success, or NULL
177 # on failure. The operation is done in-place when o1 supports
178 # it. This is the equivalent of the Python statement "o1 <<= o2".
180 object PyNumber_InPlaceRshift(object o1, object o2)
181 # Return value: New reference.
182 # Returns the result of right shifting o1 by o2 on success, or
183 # NULL on failure. The operation is done in-place when o1 supports
184 # it. This is the equivalent of the Python statement "o1 >>= o2".
186 object PyNumber_InPlaceAnd(object o1, object o2)
187 # Return value: New reference.
188 # Returns the ``bitwise and'' of o1 and o2 on success and NULL on
189 # failure. The operation is done in-place when o1 supports
190 # it. This is the equivalent of the Python statement "o1 &= o2".
192 object PyNumber_InPlaceXor(object o1, object o2)
193 # Return value: New reference.
194 # Returns the ``bitwise exclusive or'' of o1 by o2 on success, or
195 # NULL on failure. The operation is done in-place when o1 supports
196 # it. This is the equivalent of the Python statement "o1 ^= o2".
198 object PyNumber_InPlaceOr(object o1, object o2)
199 # Return value: New reference.
200 # Returns the ``bitwise or'' of o1 and o2 on success, or NULL on
201 # failure. The operation is done in-place when o1 supports
202 # it. This is the equivalent of the Python statement "o1 |= o2".
204 int PyNumber_Coerce(PyObject **p1, PyObject **p2) except -1
205 # This function takes the addresses of two variables of type
206 # PyObject*. If the objects pointed to by *p1 and *p2 have the
207 # same type, increment their reference count and return 0
208 # (success). If the objects can be converted to a common numeric
209 # type, replace *p1 and *p2 by their converted value (with 'new'
210 # reference counts), and return 0. If no conversion is possible,
211 # or if some other error occurs, return -1 (failure) and don't
212 # increment the reference counts. The call PyNumber_Coerce(&o1,
213 # &o2) is equivalent to the Python statement "o1, o2 = coerce(o1,
216 object PyNumber_Int(object o)
217 # Return value: New reference.
218 # Returns the o converted to an integer object on success, or NULL
219 # on failure. If the argument is outside the integer range a long
220 # object will be returned instead. This is the equivalent of the
221 # Python expression "int(o)".
223 object PyNumber_Long(object o)
224 # Return value: New reference.
225 # Returns the o converted to a long integer object on success, or
226 # NULL on failure. This is the equivalent of the Python expression
229 object PyNumber_Float(object o)
230 # Return value: New reference.
231 # Returns the o converted to a float object on success, or NULL on
232 # failure. This is the equivalent of the Python expression
235 object PyNumber_Index(object o)
236 # Returns the o converted to a Python int or long on success or
237 # NULL with a TypeError exception raised on failure.
239 Py_ssize_t PyNumber_AsSsize_t(object o, object exc) except? -1
240 # Returns o converted to a Py_ssize_t value if o can be
241 # interpreted as an integer. If o can be converted to a Python int
242 # or long but the attempt to convert to a Py_ssize_t value would
243 # raise an OverflowError, then the exc argument is the type of
244 # exception that will be raised (usually IndexError or
245 # OverflowError). If exc is NULL, then the exception is cleared
246 # and the value is clipped to PY_SSIZE_T_MIN for a negative
247 # integer or PY_SSIZE_T_MAX for a positive integer.
249 bint PyIndex_Check "__Pyx_PyIndex_Check" (object)
250 # Returns True if o is an index integer (has the nb_index slot of
251 # the tp_as_number structure filled in).