blob: 929861e4a50ce4c66d367673dd9c54e25dbe355b [file] [log] [blame]
Victor Stinnerb6522d02016-12-19 13:12:08 +01001/* Abstract Object Interface (many thanks to Jim Fulton) */
2
Guido van Rossuma8275371995-07-18 14:07:00 +00003#ifndef Py_ABSTRACTOBJECT_H
4#define Py_ABSTRACTOBJECT_H
5#ifdef __cplusplus
6extern "C" {
7#endif
8
Victor Stinner2a358f82016-12-06 16:55:39 +01009/* === Object Protocol ================================================== */
Guido van Rossuma8275371995-07-18 14:07:00 +000010
Victor Stinner2a358f82016-12-06 16:55:39 +010011/* Implemented elsewhere:
Guido van Rossuma8275371995-07-18 14:07:00 +000012
Victor Stinner5bef7cd2016-12-15 09:14:25 +010013 int PyObject_Print(PyObject *o, FILE *fp, int flags);
Guido van Rossuma8275371995-07-18 14:07:00 +000014
Victor Stinner5bef7cd2016-12-15 09:14:25 +010015 Print an object 'o' on file 'fp'. Returns -1 on error. The flags argument
16 is used to enable certain printing options. The only option currently
17 supported is Py_Print_RAW.
Guido van Rossuma8275371995-07-18 14:07:00 +000018
Victor Stinner5bef7cd2016-12-15 09:14:25 +010019 (What should be said about Py_Print_RAW?). */
Victor Stinner2a358f82016-12-06 16:55:39 +010020
21
22/* Implemented elsewhere:
23
Victor Stinner5bef7cd2016-12-15 09:14:25 +010024 int PyObject_HasAttrString(PyObject *o, const char *attr_name);
Victor Stinner2a358f82016-12-06 16:55:39 +010025
Victor Stinner5bef7cd2016-12-15 09:14:25 +010026 Returns 1 if object 'o' has the attribute attr_name, and 0 otherwise.
Victor Stinner2a358f82016-12-06 16:55:39 +010027
Victor Stinner5bef7cd2016-12-15 09:14:25 +010028 This is equivalent to the Python expression: hasattr(o,attr_name).
29
30 This function always succeeds. */
31
Victor Stinner2a358f82016-12-06 16:55:39 +010032
33/* Implemented elsewhere:
34
Victor Stinner5bef7cd2016-12-15 09:14:25 +010035 PyObject* PyObject_GetAttrString(PyObject *o, const char *attr_name);
Victor Stinner2a358f82016-12-06 16:55:39 +010036
Victor Stinner5bef7cd2016-12-15 09:14:25 +010037 Retrieve an attributed named attr_name form object o.
38 Returns the attribute value on success, or NULL on failure.
Victor Stinner2a358f82016-12-06 16:55:39 +010039
Victor Stinner5bef7cd2016-12-15 09:14:25 +010040 This is the equivalent of the Python expression: o.attr_name. */
Victor Stinner2a358f82016-12-06 16:55:39 +010041
Guido van Rossuma8275371995-07-18 14:07:00 +000042
Victor Stinner2a358f82016-12-06 16:55:39 +010043/* Implemented elsewhere:
Guido van Rossuma8275371995-07-18 14:07:00 +000044
Victor Stinner5bef7cd2016-12-15 09:14:25 +010045 int PyObject_HasAttr(PyObject *o, PyObject *attr_name);
Guido van Rossuma8275371995-07-18 14:07:00 +000046
Victor Stinner5bef7cd2016-12-15 09:14:25 +010047 Returns 1 if o has the attribute attr_name, and 0 otherwise.
Guido van Rossuma8275371995-07-18 14:07:00 +000048
Victor Stinner5bef7cd2016-12-15 09:14:25 +010049 This is equivalent to the Python expression: hasattr(o,attr_name).
Guido van Rossuma8275371995-07-18 14:07:00 +000050
Victor Stinner5bef7cd2016-12-15 09:14:25 +010051 This function always succeeds. */
Guido van Rossuma8275371995-07-18 14:07:00 +000052
Victor Stinner2a358f82016-12-06 16:55:39 +010053/* Implemented elsewhere:
Guido van Rossuma8275371995-07-18 14:07:00 +000054
Victor Stinner5bef7cd2016-12-15 09:14:25 +010055 PyObject* PyObject_GetAttr(PyObject *o, PyObject *attr_name);
Guido van Rossuma8275371995-07-18 14:07:00 +000056
Victor Stinner5bef7cd2016-12-15 09:14:25 +010057 Retrieve an attributed named 'attr_name' form object 'o'.
58 Returns the attribute value on success, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +000059
Victor Stinner5bef7cd2016-12-15 09:14:25 +010060 This is the equivalent of the Python expression: o.attr_name. */
Marc-André Lemburgad7c98e2001-01-17 17:09:53 +000061
Marc-André Lemburgad7c98e2001-01-17 17:09:53 +000062
Victor Stinner5bef7cd2016-12-15 09:14:25 +010063/* Implemented elsewhere:
Thomas Wouters89f507f2006-12-13 04:49:30 +000064
Victor Stinner5bef7cd2016-12-15 09:14:25 +010065 int PyObject_SetAttrString(PyObject *o, const char *attr_name, PyObject *v);
Guido van Rossuma8275371995-07-18 14:07:00 +000066
Victor Stinner5bef7cd2016-12-15 09:14:25 +010067 Set the value of the attribute named attr_name, for object 'o',
68 to the value 'v'. Raise an exception and return -1 on failure; return 0 on
69 success.
Guido van Rossuma8275371995-07-18 14:07:00 +000070
Victor Stinner5bef7cd2016-12-15 09:14:25 +010071 This is the equivalent of the Python statement o.attr_name=v. */
72
73
74/* Implemented elsewhere:
75
76 int PyObject_SetAttr(PyObject *o, PyObject *attr_name, PyObject *v);
77
78 Set the value of the attribute named attr_name, for object 'o', to the value
79 'v'. an exception and return -1 on failure; return 0 on success.
80
81 This is the equivalent of the Python statement o.attr_name=v. */
82
83/* Implemented as a macro:
84
85 int PyObject_DelAttrString(PyObject *o, const char *attr_name);
86
87 Delete attribute named attr_name, for object o. Returns
88 -1 on failure.
89
90 This is the equivalent of the Python statement: del o.attr_name. */
91#define PyObject_DelAttrString(O,A) PyObject_SetAttrString((O),(A), NULL)
92
93
94/* Implemented as a macro:
95
96 int PyObject_DelAttr(PyObject *o, PyObject *attr_name);
97
98 Delete attribute named attr_name, for object o. Returns -1
99 on failure. This is the equivalent of the Python
100 statement: del o.attr_name. */
101#define PyObject_DelAttr(O,A) PyObject_SetAttr((O),(A), NULL)
102
103
104/* Implemented elsewhere:
105
106 PyObject *PyObject_Repr(PyObject *o);
107
108 Compute the string representation of object 'o'. Returns the
109 string representation on success, NULL on failure.
110
111 This is the equivalent of the Python expression: repr(o).
112
113 Called by the repr() built-in function. */
114
115
116/* Implemented elsewhere:
117
118 PyObject *PyObject_Str(PyObject *o);
119
120 Compute the string representation of object, o. Returns the
121 string representation on success, NULL on failure.
122
123 This is the equivalent of the Python expression: str(o).
124
125 Called by the str() and print() built-in functions. */
126
127
128/* Declared elsewhere
129
130 PyAPI_FUNC(int) PyCallable_Check(PyObject *o);
131
132 Determine if the object, o, is callable. Return 1 if the object is callable
133 and 0 otherwise.
134
135 This function always succeeds. */
136
137
138#ifdef PY_SSIZE_T_CLEAN
139# define PyObject_CallFunction _PyObject_CallFunction_SizeT
140# define PyObject_CallMethod _PyObject_CallMethod_SizeT
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100141#endif
142
Guido van Rossuma8275371995-07-18 14:07:00 +0000143
Victor Stinner2ff58a22019-06-17 14:27:23 +0200144#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03090000
145/* Call a callable Python object without any arguments */
146PyAPI_FUNC(PyObject *) PyObject_CallNoArgs(PyObject *func);
147#endif
148
149
Victor Stinner2a358f82016-12-06 16:55:39 +0100150/* Call a callable Python object 'callable' with arguments given by the
151 tuple 'args' and keywords arguments given by the dictionary 'kwargs'.
Tim Peters6d6c1a32001-08-02 04:15:00 +0000152
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200153 'args' must not be NULL, use an empty tuple if no arguments are
Victor Stinner2a358f82016-12-06 16:55:39 +0100154 needed. If no named arguments are needed, 'kwargs' can be NULL.
Victor Stinner2d0eb652016-12-06 16:27:24 +0100155
Victor Stinner2a358f82016-12-06 16:55:39 +0100156 This is the equivalent of the Python expression:
157 callable(*args, **kwargs). */
158PyAPI_FUNC(PyObject *) PyObject_Call(PyObject *callable,
159 PyObject *args, PyObject *kwargs);
160
Victor Stinner2d0eb652016-12-06 16:27:24 +0100161
Victor Stinner2a358f82016-12-06 16:55:39 +0100162/* Call a callable Python object 'callable', with arguments given by the
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200163 tuple 'args'. If no arguments are needed, then 'args' can be NULL.
Victor Stinner2d0eb652016-12-06 16:27:24 +0100164
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200165 Returns the result of the call on success, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000166
Victor Stinner2a358f82016-12-06 16:55:39 +0100167 This is the equivalent of the Python expression:
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100168 callable(*args). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100169PyAPI_FUNC(PyObject *) PyObject_CallObject(PyObject *callable,
170 PyObject *args);
Guido van Rossuma8275371995-07-18 14:07:00 +0000171
Victor Stinner2a358f82016-12-06 16:55:39 +0100172/* Call a callable Python object, callable, with a variable number of C
173 arguments. The C arguments are described using a mkvalue-style format
174 string.
Victor Stinner2d0eb652016-12-06 16:27:24 +0100175
Victor Stinner2a358f82016-12-06 16:55:39 +0100176 The format may be NULL, indicating that no arguments are provided.
Victor Stinner2d0eb652016-12-06 16:27:24 +0100177
Victor Stinner2a358f82016-12-06 16:55:39 +0100178 Returns the result of the call on success, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000179
Victor Stinner2a358f82016-12-06 16:55:39 +0100180 This is the equivalent of the Python expression:
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100181 callable(arg1, arg2, ...). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100182PyAPI_FUNC(PyObject *) PyObject_CallFunction(PyObject *callable,
183 const char *format, ...);
Guido van Rossuma8275371995-07-18 14:07:00 +0000184
Victor Stinner2a358f82016-12-06 16:55:39 +0100185/* Call the method named 'name' of object 'obj' with a variable number of
186 C arguments. The C arguments are described by a mkvalue format string.
Guido van Rossuma8275371995-07-18 14:07:00 +0000187
Victor Stinner2a358f82016-12-06 16:55:39 +0100188 The format can be NULL, indicating that no arguments are provided.
Victor Stinner2d0eb652016-12-06 16:27:24 +0100189
Victor Stinner2a358f82016-12-06 16:55:39 +0100190 Returns the result of the call on success, or NULL on failure.
191
192 This is the equivalent of the Python expression:
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100193 obj.name(arg1, arg2, ...). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100194PyAPI_FUNC(PyObject *) PyObject_CallMethod(PyObject *obj,
195 const char *name,
196 const char *format, ...);
Guido van Rossuma8275371995-07-18 14:07:00 +0000197
Victor Stinner2a358f82016-12-06 16:55:39 +0100198PyAPI_FUNC(PyObject *) _PyObject_CallFunction_SizeT(PyObject *callable,
199 const char *format,
200 ...);
201
202PyAPI_FUNC(PyObject *) _PyObject_CallMethod_SizeT(PyObject *obj,
203 const char *name,
204 const char *format,
205 ...);
206
Victor Stinner2a358f82016-12-06 16:55:39 +0100207/* Call a callable Python object 'callable' with a variable number of C
208 arguments. The C arguments are provided as PyObject* values, terminated
209 by a NULL.
Victor Stinner2d0eb652016-12-06 16:27:24 +0100210
Victor Stinner2a358f82016-12-06 16:55:39 +0100211 Returns the result of the call on success, or NULL on failure.
Victor Stinner2d0eb652016-12-06 16:27:24 +0100212
Victor Stinner2a358f82016-12-06 16:55:39 +0100213 This is the equivalent of the Python expression:
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100214 callable(arg1, arg2, ...). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100215PyAPI_FUNC(PyObject *) PyObject_CallFunctionObjArgs(PyObject *callable,
216 ...);
Fred Drakeb421b8c2001-10-26 16:21:32 +0000217
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100218/* Call the method named 'name' of object 'obj' with a variable number of
219 C arguments. The C arguments are provided as PyObject* values, terminated
220 by NULL.
221
222 Returns the result of the call on success, or NULL on failure.
223
224 This is the equivalent of the Python expression: obj.name(*args). */
Guido van Rossuma8275371995-07-18 14:07:00 +0000225
Victor Stinner2a358f82016-12-06 16:55:39 +0100226PyAPI_FUNC(PyObject *) PyObject_CallMethodObjArgs(
227 PyObject *obj,
228 PyObject *name,
229 ...);
230
Victor Stinner2d0eb652016-12-06 16:27:24 +0100231
Victor Stinner2a358f82016-12-06 16:55:39 +0100232/* Implemented elsewhere:
Guido van Rossuma8275371995-07-18 14:07:00 +0000233
Andrew Svetlov95084022017-12-16 21:08:05 +0200234 Py_hash_t PyObject_Hash(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000235
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100236 Compute and return the hash, hash_value, of an object, o. On
237 failure, return -1.
238
239 This is the equivalent of the Python expression: hash(o). */
Guido van Rossuma8275371995-07-18 14:07:00 +0000240
241
Victor Stinner2a358f82016-12-06 16:55:39 +0100242/* Implemented elsewhere:
Guido van Rossuma8275371995-07-18 14:07:00 +0000243
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100244 int PyObject_IsTrue(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000245
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100246 Returns 1 if the object, o, is considered to be true, 0 if o is
247 considered to be false and -1 on failure.
248
249 This is equivalent to the Python expression: not not o. */
250
Guido van Rossuma8275371995-07-18 14:07:00 +0000251
Victor Stinner2a358f82016-12-06 16:55:39 +0100252/* Implemented elsewhere:
Guido van Rossumc3d3f961998-04-09 17:53:59 +0000253
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100254 int PyObject_Not(PyObject *o);
Guido van Rossumc3d3f961998-04-09 17:53:59 +0000255
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100256 Returns 0 if the object, o, is considered to be true, 1 if o is
257 considered to be false and -1 on failure.
Guido van Rossumc3d3f961998-04-09 17:53:59 +0000258
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100259 This is equivalent to the Python expression: not o. */
260
261
262/* Get the type of an object.
263
264 On success, returns a type object corresponding to the object type of object
265 'o'. On failure, returns NULL.
266
267 This is equivalent to the Python expression: type(o) */
Victor Stinner2a358f82016-12-06 16:55:39 +0100268PyAPI_FUNC(PyObject *) PyObject_Type(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000269
Guido van Rossuma8275371995-07-18 14:07:00 +0000270
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100271/* Return the size of object 'o'. If the object 'o' provides both sequence and
272 mapping protocols, the sequence size is returned.
273
274 On error, -1 is returned.
275
276 This is the equivalent to the Python expression: len(o) */
Victor Stinner2a358f82016-12-06 16:55:39 +0100277PyAPI_FUNC(Py_ssize_t) PyObject_Size(PyObject *o);
Jeremy Hylton6253f832000-07-12 12:56:19 +0000278
Guido van Rossuma8275371995-07-18 14:07:00 +0000279
Victor Stinner2a358f82016-12-06 16:55:39 +0100280/* For DLL compatibility */
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +0000281#undef PyObject_Length
Victor Stinner2a358f82016-12-06 16:55:39 +0100282PyAPI_FUNC(Py_ssize_t) PyObject_Length(PyObject *o);
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +0000283#define PyObject_Length PyObject_Size
284
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100285/* Return element of 'o' corresponding to the object 'key'. Return NULL
286 on failure.
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +0000287
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100288 This is the equivalent of the Python expression: o[key] */
Victor Stinner2a358f82016-12-06 16:55:39 +0100289PyAPI_FUNC(PyObject *) PyObject_GetItem(PyObject *o, PyObject *key);
Guido van Rossuma8275371995-07-18 14:07:00 +0000290
Guido van Rossuma8275371995-07-18 14:07:00 +0000291
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100292/* Map the object 'key' to the value 'v' into 'o'.
293
294 Raise an exception and return -1 on failure; return 0 on success.
295
296 This is the equivalent of the Python statement: o[key]=v. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100297PyAPI_FUNC(int) PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v);
Guido van Rossuma8275371995-07-18 14:07:00 +0000298
Serhiy Storchakaf5b11832018-05-22 11:02:44 +0300299/* Remove the mapping for the string 'key' from the object 'o'.
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100300 Returns -1 on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000301
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100302 This is equivalent to the Python statement: del o[key]. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100303PyAPI_FUNC(int) PyObject_DelItemString(PyObject *o, const char *key);
Martin v. Löwisb0d71d02002-01-05 10:50:30 +0000304
Serhiy Storchakaf5b11832018-05-22 11:02:44 +0300305/* Delete the mapping for the object 'key' from the object 'o'.
306 Returns -1 on failure.
Martin v. Löwisb0d71d02002-01-05 10:50:30 +0000307
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100308 This is the equivalent of the Python statement: del o[key]. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100309PyAPI_FUNC(int) PyObject_DelItem(PyObject *o, PyObject *key);
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000310
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000311
Miss Islington (bot)6b922da2021-07-29 04:31:42 -0700312/* === Old Buffer API ============================================ */
313
314/* FIXME: usage of these should all be replaced in Python itself
315 but for backwards compatibility we will implement them.
316 Their usage without a corresponding "unlock" mechanism
317 may create issues (but they would already be there). */
318
319/* Takes an arbitrary object which must support the (character, single segment)
320 buffer interface and returns a pointer to a read-only memory location
321 useable as character based input for subsequent processing.
322
323 Return 0 on success. buffer and buffer_len are only set in case no error
324 occurs. Otherwise, -1 is returned and an exception set. */
325Py_DEPRECATED(3.0)
326PyAPI_FUNC(int) PyObject_AsCharBuffer(PyObject *obj,
327 const char **buffer,
328 Py_ssize_t *buffer_len);
329
330/* Checks whether an arbitrary object supports the (character, single segment)
331 buffer interface.
332
333 Returns 1 on success, 0 on failure. */
334Py_DEPRECATED(3.0) PyAPI_FUNC(int) PyObject_CheckReadBuffer(PyObject *obj);
335
336/* Same as PyObject_AsCharBuffer() except that this API expects (readable,
337 single segment) buffer interface and returns a pointer to a read-only memory
338 location which can contain arbitrary data.
339
340 0 is returned on success. buffer and buffer_len are only set in case no
341 error occurs. Otherwise, -1 is returned and an exception set. */
342Py_DEPRECATED(3.0)
343PyAPI_FUNC(int) PyObject_AsReadBuffer(PyObject *obj,
344 const void **buffer,
345 Py_ssize_t *buffer_len);
346
347/* Takes an arbitrary object which must support the (writable, single segment)
348 buffer interface and returns a pointer to a writable memory location in
349 buffer of size 'buffer_len'.
350
351 Return 0 on success. buffer and buffer_len are only set in case no error
352 occurs. Otherwise, -1 is returned and an exception set. */
353Py_DEPRECATED(3.0)
354PyAPI_FUNC(int) PyObject_AsWriteBuffer(PyObject *obj,
355 void **buffer,
356 Py_ssize_t *buffer_len);
357
358
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100359/* === New Buffer API ============================================ */
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000360
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100361/* Takes an arbitrary object and returns the result of calling
362 obj.__format__(format_spec). */
363PyAPI_FUNC(PyObject *) PyObject_Format(PyObject *obj,
Victor Stinner2a358f82016-12-06 16:55:39 +0100364 PyObject *format_spec);
Eric Smith8fd3eba2008-02-17 19:48:00 +0000365
Guido van Rossum213c7a62001-04-23 14:08:49 +0000366
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100367/* ==== Iterators ================================================ */
368
369/* Takes an object and returns an iterator for it.
370 This is typically a new iterator but if the argument is an iterator, this
371 returns itself. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100372PyAPI_FUNC(PyObject *) PyObject_GetIter(PyObject *);
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000373
Joshua Bronsonf0a6fde2021-03-23 18:47:21 -0400374/* Takes an AsyncIterable object and returns an AsyncIterator for it.
375 This is typically a new iterator but if the argument is an AsyncIterator,
376 this returns itself. */
377PyAPI_FUNC(PyObject *) PyObject_GetAiter(PyObject *);
378
Erlend Egeberg Aaslandcc540012021-02-16 16:05:58 +0100379/* Returns non-zero if the object 'obj' provides iterator protocols, and 0 otherwise.
Christian Tismerea62ce72018-06-09 20:32:25 +0200380
381 This function always succeeds. */
Serhiy Storchaka5cbefa92018-06-11 15:01:47 +0300382PyAPI_FUNC(int) PyIter_Check(PyObject *);
Guido van Rossum213c7a62001-04-23 14:08:49 +0000383
Joshua Bronsonf0a6fde2021-03-23 18:47:21 -0400384/* Returns non-zero if the object 'obj' provides AsyncIterator protocols, and 0 otherwise.
385
386 This function always succeeds. */
387PyAPI_FUNC(int) PyAiter_Check(PyObject *);
388
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100389/* Takes an iterator object and calls its tp_iternext slot,
390 returning the next value.
391
392 If the iterator is exhausted, this returns NULL without setting an
393 exception.
394
395 NULL with an exception means an error occurred. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100396PyAPI_FUNC(PyObject *) PyIter_Next(PyObject *);
Guido van Rossum213c7a62001-04-23 14:08:49 +0000397
Vladimir Matveevcfb0f572020-10-13 10:26:51 -0700398#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030A0000
Vladimir Matveev037245c2020-10-09 17:15:15 -0700399
400/* Takes generator, coroutine or iterator object and sends the value into it.
401 Returns:
402 - PYGEN_RETURN (0) if generator has returned.
403 'result' parameter is filled with return value
404 - PYGEN_ERROR (-1) if exception was raised.
405 'result' parameter is NULL
406 - PYGEN_NEXT (1) if generator has yielded.
407 'result' parameter is filled with yielded value. */
408PyAPI_FUNC(PySendResult) PyIter_Send(PyObject *, PyObject *, PyObject **);
Vladimir Matveevcfb0f572020-10-13 10:26:51 -0700409#endif
Vladimir Matveev037245c2020-10-09 17:15:15 -0700410
Guido van Rossuma8275371995-07-18 14:07:00 +0000411
Victor Stinner2a358f82016-12-06 16:55:39 +0100412/* === Number Protocol ================================================== */
Guido van Rossuma8275371995-07-18 14:07:00 +0000413
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100414/* Returns 1 if the object 'o' provides numeric protocols, and 0 otherwise.
415
416 This function always succeeds. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100417PyAPI_FUNC(int) PyNumber_Check(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000418
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100419/* Returns the result of adding o1 and o2, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000420
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100421 This is the equivalent of the Python expression: o1 + o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100422PyAPI_FUNC(PyObject *) PyNumber_Add(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000423
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100424/* Returns the result of subtracting o2 from o1, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000425
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100426 This is the equivalent of the Python expression: o1 - o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100427PyAPI_FUNC(PyObject *) PyNumber_Subtract(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000428
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100429/* Returns the result of multiplying o1 and o2, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000430
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100431 This is the equivalent of the Python expression: o1 * o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100432PyAPI_FUNC(PyObject *) PyNumber_Multiply(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000433
Serhiy Storchaka34d0ac82016-12-27 14:57:39 +0200434#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100435/* This is the equivalent of the Python expression: o1 @ o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100436PyAPI_FUNC(PyObject *) PyNumber_MatrixMultiply(PyObject *o1, PyObject *o2);
Serhiy Storchaka34d0ac82016-12-27 14:57:39 +0200437#endif
Benjamin Petersond51374e2014-04-09 23:55:56 -0400438
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100439/* Returns the result of dividing o1 by o2 giving an integral result,
440 or NULL on failure.
Guido van Rossum4668b002001-08-08 05:00:18 +0000441
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100442 This is the equivalent of the Python expression: o1 // o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100443PyAPI_FUNC(PyObject *) PyNumber_FloorDivide(PyObject *o1, PyObject *o2);
Guido van Rossum4668b002001-08-08 05:00:18 +0000444
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100445/* Returns the result of dividing o1 by o2 giving a float result, or NULL on
446 failure.
Guido van Rossum4668b002001-08-08 05:00:18 +0000447
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100448 This is the equivalent of the Python expression: o1 / o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100449PyAPI_FUNC(PyObject *) PyNumber_TrueDivide(PyObject *o1, PyObject *o2);
Guido van Rossum4668b002001-08-08 05:00:18 +0000450
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100451/* Returns the remainder of dividing o1 by o2, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000452
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100453 This is the equivalent of the Python expression: o1 % o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100454PyAPI_FUNC(PyObject *) PyNumber_Remainder(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000455
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100456/* See the built-in function divmod.
Guido van Rossuma8275371995-07-18 14:07:00 +0000457
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100458 Returns NULL on failure.
459
460 This is the equivalent of the Python expression: divmod(o1, o2). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100461PyAPI_FUNC(PyObject *) PyNumber_Divmod(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000462
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100463/* See the built-in function pow. Returns NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000464
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100465 This is the equivalent of the Python expression: pow(o1, o2, o3),
466 where o3 is optional. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100467PyAPI_FUNC(PyObject *) PyNumber_Power(PyObject *o1, PyObject *o2,
468 PyObject *o3);
Guido van Rossuma8275371995-07-18 14:07:00 +0000469
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100470/* Returns the negation of o on success, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000471
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100472 This is the equivalent of the Python expression: -o. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100473PyAPI_FUNC(PyObject *) PyNumber_Negative(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000474
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100475/* Returns the positive of o on success, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000476
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100477 This is the equivalent of the Python expression: +o. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100478PyAPI_FUNC(PyObject *) PyNumber_Positive(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000479
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100480/* Returns the absolute value of 'o', or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000481
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100482 This is the equivalent of the Python expression: abs(o). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100483PyAPI_FUNC(PyObject *) PyNumber_Absolute(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000484
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100485/* Returns the bitwise negation of 'o' on success, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000486
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100487 This is the equivalent of the Python expression: ~o. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100488PyAPI_FUNC(PyObject *) PyNumber_Invert(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000489
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100490/* Returns the result of left shifting o1 by o2 on success, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000491
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100492 This is the equivalent of the Python expression: o1 << o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100493PyAPI_FUNC(PyObject *) PyNumber_Lshift(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000494
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100495/* Returns the result of right shifting o1 by o2 on success, or NULL on
496 failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000497
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100498 This is the equivalent of the Python expression: o1 >> o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100499PyAPI_FUNC(PyObject *) PyNumber_Rshift(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000500
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100501/* Returns the result of bitwise and of o1 and o2 on success, or NULL on
502 failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000503
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100504 This is the equivalent of the Python expression: o1 & o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100505PyAPI_FUNC(PyObject *) PyNumber_And(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000506
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100507/* Returns the bitwise exclusive or of o1 by o2 on success, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000508
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100509 This is the equivalent of the Python expression: o1 ^ o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100510PyAPI_FUNC(PyObject *) PyNumber_Xor(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000511
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100512/* Returns the result of bitwise or on o1 and o2 on success, or NULL on
513 failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000514
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100515 This is the equivalent of the Python expression: o1 | o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100516PyAPI_FUNC(PyObject *) PyNumber_Or(PyObject *o1, PyObject *o2);
517
Christian Tismerea62ce72018-06-09 20:32:25 +0200518/* Returns 1 if obj is an index integer (has the nb_index slot of the
519 tp_as_number structure filled in), and 0 otherwise. */
Serhiy Storchaka5cbefa92018-06-11 15:01:47 +0300520PyAPI_FUNC(int) PyIndex_Check(PyObject *);
Guido van Rossuma8275371995-07-18 14:07:00 +0000521
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100522/* Returns the object 'o' converted to a Python int, or NULL with an exception
523 raised on failure. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100524PyAPI_FUNC(PyObject *) PyNumber_Index(PyObject *o);
Guido van Rossum38fff8c2006-03-07 18:50:55 +0000525
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100526/* Returns the object 'o' converted to Py_ssize_t by going through
527 PyNumber_Index() first.
Guido van Rossum38fff8c2006-03-07 18:50:55 +0000528
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100529 If an overflow error occurs while converting the int to Py_ssize_t, then the
530 second argument 'exc' is the error-type to return. If it is NULL, then the
531 overflow error is cleared and the value is clipped. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100532PyAPI_FUNC(Py_ssize_t) PyNumber_AsSsize_t(PyObject *o, PyObject *exc);
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000533
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100534/* Returns the object 'o' converted to an integer object on success, or NULL
535 on failure.
Guido van Rossum38fff8c2006-03-07 18:50:55 +0000536
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100537 This is the equivalent of the Python expression: int(o). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100538PyAPI_FUNC(PyObject *) PyNumber_Long(PyObject *o);
Mark Dickinsond7467682009-01-10 22:14:33 +0000539
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100540/* Returns the object 'o' converted to a float object on success, or NULL
541 on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000542
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100543 This is the equivalent of the Python expression: float(o). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100544PyAPI_FUNC(PyObject *) PyNumber_Float(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000545
Victor Stinner2a358f82016-12-06 16:55:39 +0100546
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100547/* --- In-place variants of (some of) the above number protocol functions -- */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000548
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100549/* Returns the result of adding o2 to o1, possibly in-place, or NULL
550 on failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000551
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100552 This is the equivalent of the Python expression: o1 += o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100553PyAPI_FUNC(PyObject *) PyNumber_InPlaceAdd(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000554
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100555/* Returns the result of subtracting o2 from o1, possibly in-place or
556 NULL on failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000557
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100558 This is the equivalent of the Python expression: o1 -= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100559PyAPI_FUNC(PyObject *) PyNumber_InPlaceSubtract(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000560
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100561/* Returns the result of multiplying o1 by o2, possibly in-place, or NULL on
562 failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000563
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100564 This is the equivalent of the Python expression: o1 *= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100565PyAPI_FUNC(PyObject *) PyNumber_InPlaceMultiply(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000566
Serhiy Storchaka34d0ac82016-12-27 14:57:39 +0200567#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100568/* This is the equivalent of the Python expression: o1 @= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100569PyAPI_FUNC(PyObject *) PyNumber_InPlaceMatrixMultiply(PyObject *o1, PyObject *o2);
Serhiy Storchaka34d0ac82016-12-27 14:57:39 +0200570#endif
Benjamin Petersond51374e2014-04-09 23:55:56 -0400571
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100572/* Returns the result of dividing o1 by o2 giving an integral result, possibly
573 in-place, or NULL on failure.
Benjamin Petersond51374e2014-04-09 23:55:56 -0400574
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100575 This is the equivalent of the Python expression: o1 /= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100576PyAPI_FUNC(PyObject *) PyNumber_InPlaceFloorDivide(PyObject *o1,
577 PyObject *o2);
Guido van Rossum4668b002001-08-08 05:00:18 +0000578
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100579/* Returns the result of dividing o1 by o2 giving a float result, possibly
580 in-place, or null on failure.
Guido van Rossum4668b002001-08-08 05:00:18 +0000581
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100582 This is the equivalent of the Python expression: o1 /= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100583PyAPI_FUNC(PyObject *) PyNumber_InPlaceTrueDivide(PyObject *o1,
584 PyObject *o2);
Guido van Rossum4668b002001-08-08 05:00:18 +0000585
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100586/* Returns the remainder of dividing o1 by o2, possibly in-place, or NULL on
587 failure.
Guido van Rossum4668b002001-08-08 05:00:18 +0000588
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100589 This is the equivalent of the Python expression: o1 %= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100590PyAPI_FUNC(PyObject *) PyNumber_InPlaceRemainder(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000591
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100592/* Returns the result of raising o1 to the power of o2, possibly in-place,
593 or NULL on failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000594
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100595 This is the equivalent of the Python expression: o1 **= o2,
596 or o1 = pow(o1, o2, o3) if o3 is present. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100597PyAPI_FUNC(PyObject *) PyNumber_InPlacePower(PyObject *o1, PyObject *o2,
598 PyObject *o3);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000599
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100600/* Returns the result of left shifting o1 by o2, possibly in-place, or NULL
601 on failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000602
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100603 This is the equivalent of the Python expression: o1 <<= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100604PyAPI_FUNC(PyObject *) PyNumber_InPlaceLshift(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000605
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100606/* Returns the result of right shifting o1 by o2, possibly in-place or NULL
607 on failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000608
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100609 This is the equivalent of the Python expression: o1 >>= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100610PyAPI_FUNC(PyObject *) PyNumber_InPlaceRshift(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000611
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100612/* Returns the result of bitwise and of o1 and o2, possibly in-place, or NULL
613 on failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000614
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100615 This is the equivalent of the Python expression: o1 &= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100616PyAPI_FUNC(PyObject *) PyNumber_InPlaceAnd(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000617
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100618/* Returns the bitwise exclusive or of o1 by o2, possibly in-place, or NULL
619 on failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000620
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100621 This is the equivalent of the Python expression: o1 ^= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100622PyAPI_FUNC(PyObject *) PyNumber_InPlaceXor(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000623
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100624/* Returns the result of bitwise or of o1 and o2, possibly in-place,
625 or NULL on failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000626
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100627 This is the equivalent of the Python expression: o1 |= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100628PyAPI_FUNC(PyObject *) PyNumber_InPlaceOr(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000629
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100630/* Returns the integer n converted to a string with a base, with a base
631 marker of 0b, 0o or 0x prefixed if applicable.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000632
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100633 If n is not an int object, it is converted with PyNumber_Index first. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100634PyAPI_FUNC(PyObject *) PyNumber_ToBase(PyObject *n, int base);
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000635
Guido van Rossuma8275371995-07-18 14:07:00 +0000636
Victor Stinner2a358f82016-12-06 16:55:39 +0100637/* === Sequence protocol ================================================ */
Guido van Rossuma8275371995-07-18 14:07:00 +0000638
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100639/* Return 1 if the object provides sequence protocol, and zero
640 otherwise.
641
642 This function always succeeds. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100643PyAPI_FUNC(int) PySequence_Check(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000644
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100645/* Return the size of sequence object o, or -1 on failure. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100646PyAPI_FUNC(Py_ssize_t) PySequence_Size(PyObject *o);
Jeremy Hylton6253f832000-07-12 12:56:19 +0000647
Victor Stinner2a358f82016-12-06 16:55:39 +0100648/* For DLL compatibility */
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +0000649#undef PySequence_Length
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100650PyAPI_FUNC(Py_ssize_t) PySequence_Length(PyObject *o);
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +0000651#define PySequence_Length PySequence_Size
652
653
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100654/* Return the concatenation of o1 and o2 on success, and NULL on failure.
655
656 This is the equivalent of the Python expression: o1 + o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100657PyAPI_FUNC(PyObject *) PySequence_Concat(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000658
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100659/* Return the result of repeating sequence object 'o' 'count' times,
660 or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000661
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100662 This is the equivalent of the Python expression: o * count. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100663PyAPI_FUNC(PyObject *) PySequence_Repeat(PyObject *o, Py_ssize_t count);
Guido van Rossuma8275371995-07-18 14:07:00 +0000664
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100665/* Return the ith element of o, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000666
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100667 This is the equivalent of the Python expression: o[i]. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100668PyAPI_FUNC(PyObject *) PySequence_GetItem(PyObject *o, Py_ssize_t i);
Guido van Rossuma8275371995-07-18 14:07:00 +0000669
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100670/* Return the slice of sequence object o between i1 and i2, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000671
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100672 This is the equivalent of the Python expression: o[i1:i2]. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100673PyAPI_FUNC(PyObject *) PySequence_GetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000674
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100675/* Assign object 'v' to the ith element of the sequence 'o'. Raise an exception
676 and return -1 on failure; return 0 on success.
Guido van Rossuma8275371995-07-18 14:07:00 +0000677
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100678 This is the equivalent of the Python statement o[i] = v. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100679PyAPI_FUNC(int) PySequence_SetItem(PyObject *o, Py_ssize_t i, PyObject *v);
Guido van Rossuma8275371995-07-18 14:07:00 +0000680
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100681/* Delete the 'i'-th element of the sequence 'v'. Returns -1 on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000682
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100683 This is the equivalent of the Python statement: del o[i]. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100684PyAPI_FUNC(int) PySequence_DelItem(PyObject *o, Py_ssize_t i);
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000685
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100686/* Assign the sequence object 'v' to the slice in sequence object 'o',
687 from 'i1' to 'i2'. Returns -1 on failure.
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000688
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100689 This is the equivalent of the Python statement: o[i1:i2] = v. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100690PyAPI_FUNC(int) PySequence_SetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2,
691 PyObject *v);
Guido van Rossuma8275371995-07-18 14:07:00 +0000692
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100693/* Delete the slice in sequence object 'o' from 'i1' to 'i2'.
694 Returns -1 on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000695
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100696 This is the equivalent of the Python statement: del o[i1:i2]. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100697PyAPI_FUNC(int) PySequence_DelSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2);
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000698
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100699/* Returns the sequence 'o' as a tuple on success, and NULL on failure.
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000700
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100701 This is equivalent to the Python expression: tuple(o). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100702PyAPI_FUNC(PyObject *) PySequence_Tuple(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000703
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100704/* Returns the sequence 'o' as a list on success, and NULL on failure.
705 This is equivalent to the Python expression: list(o) */
Victor Stinner2a358f82016-12-06 16:55:39 +0100706PyAPI_FUNC(PyObject *) PySequence_List(PyObject *o);
Guido van Rossumf39fc431997-03-04 18:31:47 +0000707
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100708/* Return the sequence 'o' as a list, unless it's already a tuple or list.
709
710 Use PySequence_Fast_GET_ITEM to access the members of this list, and
711 PySequence_Fast_GET_SIZE to get its length.
712
713 Returns NULL on failure. If the object does not support iteration, raises a
714 TypeError exception with 'm' as the message text. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100715PyAPI_FUNC(PyObject *) PySequence_Fast(PyObject *o, const char* m);
Andrew M. Kuchling74042d62000-06-18 18:43:14 +0000716
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100717/* Return the size of the sequence 'o', assuming that 'o' was returned by
718 PySequence_Fast and is not NULL. */
Tim Peters1fc240e2001-10-26 05:06:50 +0000719#define PySequence_Fast_GET_SIZE(o) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000720 (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
Tim Peters1fc240e2001-10-26 05:06:50 +0000721
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100722/* Return the 'i'-th element of the sequence 'o', assuming that o was returned
723 by PySequence_Fast, and that i is within bounds. */
Andrew M. Kuchling74042d62000-06-18 18:43:14 +0000724#define PySequence_Fast_GET_ITEM(o, i)\
725 (PyList_Check(o) ? PyList_GET_ITEM(o, i) : PyTuple_GET_ITEM(o, i))
Andrew M. Kuchling74042d62000-06-18 18:43:14 +0000726
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100727/* Return a pointer to the underlying item array for
Min ho Kimc4cacc82019-07-31 08:16:13 +1000728 an object returned by PySequence_Fast */
Raymond Hettinger42bec932004-03-12 16:38:17 +0000729#define PySequence_Fast_ITEMS(sf) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000730 (PyList_Check(sf) ? ((PyListObject *)(sf))->ob_item \
731 : ((PyTupleObject *)(sf))->ob_item)
Raymond Hettingerc1e4f9d2004-03-12 08:04:00 +0000732
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100733/* Return the number of occurrences on value on 'o', that is, return
734 the number of keys for which o[key] == value.
735
736 On failure, return -1. This is equivalent to the Python expression:
737 o.count(value). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100738PyAPI_FUNC(Py_ssize_t) PySequence_Count(PyObject *o, PyObject *value);
Guido van Rossuma8275371995-07-18 14:07:00 +0000739
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100740/* Return 1 if 'ob' is in the sequence 'seq'; 0 if 'ob' is not in the sequence
741 'seq'; -1 on error.
Guido van Rossuma8275371995-07-18 14:07:00 +0000742
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100743 Use __contains__ if possible, else _PySequence_IterSearch(). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100744PyAPI_FUNC(int) PySequence_Contains(PyObject *seq, PyObject *ob);
Tim Peterscb8d3682001-05-05 21:05:01 +0000745
Guido van Rossum83684531999-03-17 18:44:39 +0000746/* For DLL-level backwards compatibility */
747#undef PySequence_In
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100748/* Determine if the sequence 'o' contains 'value'. If an item in 'o' is equal
749 to 'value', return 1, otherwise return 0. On error, return -1.
750
751 This is equivalent to the Python expression: value in o. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100752PyAPI_FUNC(int) PySequence_In(PyObject *o, PyObject *value);
Guido van Rossum83684531999-03-17 18:44:39 +0000753
754/* For source-level backwards compatibility */
Guido van Rossumf1536db1998-08-23 22:06:59 +0000755#define PySequence_In PySequence_Contains
Guido van Rossuma8275371995-07-18 14:07:00 +0000756
Guido van Rossuma8275371995-07-18 14:07:00 +0000757
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100758/* Return the first index for which o[i] == value.
759 On error, return -1.
760
761 This is equivalent to the Python expression: o.index(value). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100762PyAPI_FUNC(Py_ssize_t) PySequence_Index(PyObject *o, PyObject *value);
Guido van Rossuma8275371995-07-18 14:07:00 +0000763
Victor Stinner2a358f82016-12-06 16:55:39 +0100764
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100765/* --- In-place versions of some of the above Sequence functions --- */
Guido van Rossuma8275371995-07-18 14:07:00 +0000766
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100767/* Append sequence 'o2' to sequence 'o1', in-place when possible. Return the
768 resulting object, which could be 'o1', or NULL on failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000769
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100770 This is the equivalent of the Python expression: o1 += o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100771PyAPI_FUNC(PyObject *) PySequence_InPlaceConcat(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000772
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100773/* Repeat sequence 'o' by 'count', in-place when possible. Return the resulting
774 object, which could be 'o', or NULL on failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000775
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100776 This is the equivalent of the Python expression: o1 *= count. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100777PyAPI_FUNC(PyObject *) PySequence_InPlaceRepeat(PyObject *o, Py_ssize_t count);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000778
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000779
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100780/* === Mapping protocol ================================================= */
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000781
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100782/* Return 1 if the object provides mapping protocol, and 0 otherwise.
Guido van Rossuma8275371995-07-18 14:07:00 +0000783
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100784 This function always succeeds. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100785PyAPI_FUNC(int) PyMapping_Check(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000786
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100787/* Returns the number of keys in mapping object 'o' on success, and -1 on
Serhiy Storchakaf5b11832018-05-22 11:02:44 +0300788 failure. This is equivalent to the Python expression: len(o). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100789PyAPI_FUNC(Py_ssize_t) PyMapping_Size(PyObject *o);
Jeremy Hylton6253f832000-07-12 12:56:19 +0000790
Victor Stinner2a358f82016-12-06 16:55:39 +0100791/* For DLL compatibility */
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +0000792#undef PyMapping_Length
Victor Stinner2a358f82016-12-06 16:55:39 +0100793PyAPI_FUNC(Py_ssize_t) PyMapping_Length(PyObject *o);
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +0000794#define PyMapping_Length PyMapping_Size
795
796
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100797/* Implemented as a macro:
Guido van Rossuma25e5e91996-09-06 13:48:38 +0000798
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100799 int PyMapping_DelItemString(PyObject *o, const char *key);
Guido van Rossuma8275371995-07-18 14:07:00 +0000800
Serhiy Storchakaf5b11832018-05-22 11:02:44 +0300801 Remove the mapping for the string 'key' from the mapping 'o'. Returns -1 on
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100802 failure.
803
804 This is equivalent to the Python statement: del o[key]. */
Jeremy Hylton7c7ee5f2001-11-28 16:20:07 +0000805#define PyMapping_DelItemString(O,K) PyObject_DelItemString((O),(K))
Guido van Rossuma25e5e91996-09-06 13:48:38 +0000806
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100807/* Implemented as a macro:
Guido van Rossuma8275371995-07-18 14:07:00 +0000808
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100809 int PyMapping_DelItem(PyObject *o, PyObject *key);
Guido van Rossuma8275371995-07-18 14:07:00 +0000810
Serhiy Storchakaf5b11832018-05-22 11:02:44 +0300811 Remove the mapping for the object 'key' from the mapping object 'o'.
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100812 Returns -1 on failure.
813
814 This is equivalent to the Python statement: del o[key]. */
Jeremy Hylton7c7ee5f2001-11-28 16:20:07 +0000815#define PyMapping_DelItem(O,K) PyObject_DelItem((O),(K))
Guido van Rossuma8275371995-07-18 14:07:00 +0000816
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100817/* On success, return 1 if the mapping object 'o' has the key 'key',
818 and 0 otherwise.
819
820 This is equivalent to the Python expression: key in o.
821
822 This function always succeeds. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100823PyAPI_FUNC(int) PyMapping_HasKeyString(PyObject *o, const char *key);
Guido van Rossuma8275371995-07-18 14:07:00 +0000824
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100825/* Return 1 if the mapping object has the key 'key', and 0 otherwise.
Guido van Rossuma8275371995-07-18 14:07:00 +0000826
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100827 This is equivalent to the Python expression: key in o.
Guido van Rossuma8275371995-07-18 14:07:00 +0000828
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100829 This function always succeeds. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100830PyAPI_FUNC(int) PyMapping_HasKey(PyObject *o, PyObject *key);
Guido van Rossuma8275371995-07-18 14:07:00 +0000831
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100832/* On success, return a list or tuple of the keys in mapping object 'o'.
833 On failure, return NULL. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100834PyAPI_FUNC(PyObject *) PyMapping_Keys(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000835
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100836/* On success, return a list or tuple of the values in mapping object 'o'.
837 On failure, return NULL. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100838PyAPI_FUNC(PyObject *) PyMapping_Values(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000839
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100840/* On success, return a list or tuple of the items in mapping object 'o',
841 where each item is a tuple containing a key-value pair. On failure, return
842 NULL. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100843PyAPI_FUNC(PyObject *) PyMapping_Items(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000844
Serhiy Storchakaf5b11832018-05-22 11:02:44 +0300845/* Return element of 'o' corresponding to the string 'key' or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000846
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100847 This is the equivalent of the Python expression: o[key]. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100848PyAPI_FUNC(PyObject *) PyMapping_GetItemString(PyObject *o,
849 const char *key);
Guido van Rossuma8275371995-07-18 14:07:00 +0000850
Serhiy Storchakaf5b11832018-05-22 11:02:44 +0300851/* Map the string 'key' to the value 'v' in the mapping 'o'.
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100852 Returns -1 on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000853
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100854 This is the equivalent of the Python statement: o[key]=v. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100855PyAPI_FUNC(int) PyMapping_SetItemString(PyObject *o, const char *key,
856 PyObject *value);
Guido van Rossuma8275371995-07-18 14:07:00 +0000857
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100858/* isinstance(object, typeorclass) */
Mark Hammond91a681d2002-08-12 07:21:58 +0000859PyAPI_FUNC(int) PyObject_IsInstance(PyObject *object, PyObject *typeorclass);
Guido van Rossum823649d2001-03-21 18:40:58 +0000860
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100861/* issubclass(object, typeorclass) */
Mark Hammond91a681d2002-08-12 07:21:58 +0000862PyAPI_FUNC(int) PyObject_IsSubclass(PyObject *object, PyObject *typeorclass);
Guido van Rossum823649d2001-03-21 18:40:58 +0000863
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000864#ifndef Py_LIMITED_API
Victor Stinner40602832018-11-26 22:42:04 +0100865# define Py_CPYTHON_ABSTRACTOBJECT_H
866# include "cpython/abstract.h"
867# undef Py_CPYTHON_ABSTRACTOBJECT_H
868#endif
Antoine Pitrouf68c2a72010-09-01 12:58:21 +0000869
Guido van Rossum8ca687a1995-09-18 21:20:02 +0000870#ifdef __cplusplus
871}
872#endif
Guido van Rossuma8275371995-07-18 14:07:00 +0000873#endif /* Py_ABSTRACTOBJECT_H */