blob: 03e2f024a1ac5a2f6119a14451dff92b7e9589fc [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
141# ifndef Py_LIMITED_API
142# define _PyObject_CallMethodId _PyObject_CallMethodId_SizeT
143# endif /* !Py_LIMITED_API */
144#endif
145
Guido van Rossuma8275371995-07-18 14:07:00 +0000146
Victor Stinner2a358f82016-12-06 16:55:39 +0100147/* Call a callable Python object 'callable' with arguments given by the
148 tuple 'args' and keywords arguments given by the dictionary 'kwargs'.
Tim Peters6d6c1a32001-08-02 04:15:00 +0000149
Victor Stinner2a358f82016-12-06 16:55:39 +0100150 'args' must not be *NULL*, use an empty tuple if no arguments are
151 needed. If no named arguments are needed, 'kwargs' can be NULL.
Victor Stinner2d0eb652016-12-06 16:27:24 +0100152
Victor Stinner2a358f82016-12-06 16:55:39 +0100153 This is the equivalent of the Python expression:
154 callable(*args, **kwargs). */
155PyAPI_FUNC(PyObject *) PyObject_Call(PyObject *callable,
156 PyObject *args, PyObject *kwargs);
157
Victor Stinner4a7cc882015-03-06 23:35:27 +0100158#ifndef Py_LIMITED_API
Victor Stinner2a358f82016-12-06 16:55:39 +0100159PyAPI_FUNC(PyObject*) _PyStack_AsTuple(
160 PyObject **stack,
161 Py_ssize_t nargs);
Victor Stinner9be7e7b2016-08-19 16:11:43 +0200162
Victor Stinner69de71b2017-01-16 23:50:53 +0100163PyAPI_FUNC(PyObject*) _PyStack_AsTupleSlice(
164 PyObject **stack,
165 Py_ssize_t nargs,
166 Py_ssize_t start,
167 Py_ssize_t end);
168
Victor Stinnerc3858bd2017-01-24 15:05:30 +0100169/* Convert keyword arguments from the FASTCALL (stack: C array, kwnames: tuple)
170 format to a Python dictionary ("kwargs" dict).
Victor Stinner57f91ac2016-09-12 13:37:07 +0200171
Victor Stinnerc3858bd2017-01-24 15:05:30 +0100172 The type of kwnames keys is not checked. The final function getting
173 arguments is reponsible to check if all keys are strings, for example using
174 PyArg_ParseTupleAndKeywords() or PyArg_ValidateKeywordArguments().
175
176 Duplicate keys are merged using the last value. If duplicate keys must raise
177 an exception, the caller is responsible to implement an explicit keys on
178 kwnames. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100179PyAPI_FUNC(PyObject *) _PyStack_AsDict(
180 PyObject **values,
181 PyObject *kwnames);
Victor Stinnerae8b69c2016-09-09 14:07:44 -0700182
Victor Stinner998c2092017-01-17 01:57:29 +0100183/* Convert (args, nargs, kwargs: dict) into a (stack, nargs, kwnames: tuple).
Victor Stinnera9efb2f2016-09-09 17:40:22 -0700184
Victor Stinner998c2092017-01-17 01:57:29 +0100185 Return 0 on success, raise an exception and return -1 on error.
186
187 Write the new stack into *p_stack. If *p_stack is differen than args, it
188 must be released by PyMem_Free().
Victor Stinnera9efb2f2016-09-09 17:40:22 -0700189
Victor Stinner2a358f82016-12-06 16:55:39 +0100190 The stack uses borrowed references.
Victor Stinnera9efb2f2016-09-09 17:40:22 -0700191
Victor Stinner2a358f82016-12-06 16:55:39 +0100192 The type of keyword keys is not checked, these checks should be done
Victor Stinner3e1fad62017-01-17 01:29:01 +0100193 later (ex: _PyArg_ParseStackAndKeywords). */
Victor Stinner998c2092017-01-17 01:57:29 +0100194PyAPI_FUNC(int) _PyStack_UnpackDict(
Victor Stinner2a358f82016-12-06 16:55:39 +0100195 PyObject **args,
196 Py_ssize_t nargs,
197 PyObject *kwargs,
Victor Stinner998c2092017-01-17 01:57:29 +0100198 PyObject ***p_stack,
Victor Stinner35ecebe2017-01-18 10:31:46 +0100199 PyObject **p_kwnames);
Victor Stinnera9efb2f2016-09-09 17:40:22 -0700200
Victor Stinnerbc08ab42016-12-15 12:40:53 +0100201/* Suggested size (number of positional arguments) for arrays of PyObject*
202 allocated on a C stack to avoid allocating memory on the heap memory. Such
203 array is used to pass positional arguments to call functions of the
204 _PyObject_FastCall() family.
205
206 The size is chosen to not abuse the C stack and so limit the risk of stack
207 overflow. The size is also chosen to allow using the small stack for most
208 function calls of the Python standard library. On 64-bit CPU, it allocates
209 40 bytes on the stack. */
210#define _PY_FASTCALL_SMALL_STACK 5
211
Victor Stinner2a358f82016-12-06 16:55:39 +0100212/* Call the callable object 'callable' with the "fast call" calling convention:
213 args is a C array for positional arguments (nargs is the number of
214 positional arguments), kwargs is a dictionary for keyword arguments.
Victor Stinner9be7e7b2016-08-19 16:11:43 +0200215
Victor Stinner2a358f82016-12-06 16:55:39 +0100216 If nargs is equal to zero, args can be NULL. kwargs can be NULL.
217 nargs must be greater or equal to zero.
Victor Stinner9be7e7b2016-08-19 16:11:43 +0200218
Victor Stinner2a358f82016-12-06 16:55:39 +0100219 Return the result on success. Raise an exception on return NULL on
220 error. */
221PyAPI_FUNC(PyObject *) _PyObject_FastCallDict(
222 PyObject *callable,
223 PyObject **args,
224 Py_ssize_t nargs,
225 PyObject *kwargs);
Victor Stinner559bb6a2016-08-22 22:48:54 +0200226
Victor Stinner2a358f82016-12-06 16:55:39 +0100227/* Call the callable object 'callable' with the "fast call" calling convention:
228 args is a C array for positional arguments followed by values of
229 keyword arguments. Keys of keyword arguments are stored as a tuple
230 of strings in kwnames. nargs is the number of positional parameters at
231 the beginning of stack. The size of kwnames gives the number of keyword
232 values in the stack after positional arguments.
Victor Stinnerd8735722016-09-09 12:36:44 -0700233
Victor Stinner2a358f82016-12-06 16:55:39 +0100234 kwnames must only contains str strings, no subclass, and all keys must
235 be unique.
Victor Stinnerd8735722016-09-09 12:36:44 -0700236
Victor Stinner2a358f82016-12-06 16:55:39 +0100237 If nargs is equal to zero and there is no keyword argument (kwnames is
238 NULL or its size is zero), args can be NULL.
Victor Stinner57f91ac2016-09-12 13:37:07 +0200239
Victor Stinner2a358f82016-12-06 16:55:39 +0100240 Return the result on success. Raise an exception and return NULL on
241 error. */
242PyAPI_FUNC(PyObject *) _PyObject_FastCallKeywords(
243 PyObject *callable,
244 PyObject **args,
245 Py_ssize_t nargs,
246 PyObject *kwnames);
Victor Stinnerd8735722016-09-09 12:36:44 -0700247
Victor Stinner559bb6a2016-08-22 22:48:54 +0200248#define _PyObject_FastCall(func, args, nargs) \
249 _PyObject_FastCallDict((func), (args), (nargs), NULL)
250
251#define _PyObject_CallNoArg(func) \
Victor Stinner7bfb42d2016-12-05 17:04:32 +0100252 _PyObject_FastCallDict((func), NULL, 0, NULL)
Victor Stinner9be7e7b2016-08-19 16:11:43 +0200253
Victor Stinner2a358f82016-12-06 16:55:39 +0100254PyAPI_FUNC(PyObject *) _PyObject_Call_Prepend(
255 PyObject *callable,
256 PyObject *obj,
257 PyObject *args,
258 PyObject *kwargs);
Victor Stinner3f1057a2016-08-25 01:04:14 +0200259
Victor Stinner516b9812017-02-09 22:53:47 +0100260PyAPI_FUNC(PyObject *) _PyObject_FastCall_Prepend(
261 PyObject *callable,
262 PyObject *obj,
263 PyObject **args,
264 Py_ssize_t nargs);
265
Victor Stinner2a358f82016-12-06 16:55:39 +0100266PyAPI_FUNC(PyObject *) _Py_CheckFunctionResult(PyObject *callable,
267 PyObject *result,
268 const char *where);
Victor Stinner9be7e7b2016-08-19 16:11:43 +0200269#endif /* Py_LIMITED_API */
Victor Stinner4a7cc882015-03-06 23:35:27 +0100270
Victor Stinner2d0eb652016-12-06 16:27:24 +0100271
Victor Stinner2a358f82016-12-06 16:55:39 +0100272/* Call a callable Python object 'callable', with arguments given by the
273 tuple 'args'. If no arguments are needed, then 'args' can be *NULL*.
Victor Stinner2d0eb652016-12-06 16:27:24 +0100274
Victor Stinner2a358f82016-12-06 16:55:39 +0100275 Returns the result of the call on success, or *NULL* on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000276
Victor Stinner2a358f82016-12-06 16:55:39 +0100277 This is the equivalent of the Python expression:
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100278 callable(*args). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100279PyAPI_FUNC(PyObject *) PyObject_CallObject(PyObject *callable,
280 PyObject *args);
Guido van Rossuma8275371995-07-18 14:07:00 +0000281
Victor Stinner2a358f82016-12-06 16:55:39 +0100282/* Call a callable Python object, callable, with a variable number of C
283 arguments. The C arguments are described using a mkvalue-style format
284 string.
Victor Stinner2d0eb652016-12-06 16:27:24 +0100285
Victor Stinner2a358f82016-12-06 16:55:39 +0100286 The format may be NULL, indicating that no arguments are provided.
Victor Stinner2d0eb652016-12-06 16:27:24 +0100287
Victor Stinner2a358f82016-12-06 16:55:39 +0100288 Returns the result of the call on success, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000289
Victor Stinner2a358f82016-12-06 16:55:39 +0100290 This is the equivalent of the Python expression:
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100291 callable(arg1, arg2, ...). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100292PyAPI_FUNC(PyObject *) PyObject_CallFunction(PyObject *callable,
293 const char *format, ...);
Guido van Rossuma8275371995-07-18 14:07:00 +0000294
Victor Stinner2a358f82016-12-06 16:55:39 +0100295/* Call the method named 'name' of object 'obj' with a variable number of
296 C arguments. The C arguments are described by a mkvalue format string.
Guido van Rossuma8275371995-07-18 14:07:00 +0000297
Victor Stinner2a358f82016-12-06 16:55:39 +0100298 The format can be NULL, indicating that no arguments are provided.
Victor Stinner2d0eb652016-12-06 16:27:24 +0100299
Victor Stinner2a358f82016-12-06 16:55:39 +0100300 Returns the result of the call on success, or NULL on failure.
301
302 This is the equivalent of the Python expression:
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100303 obj.name(arg1, arg2, ...). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100304PyAPI_FUNC(PyObject *) PyObject_CallMethod(PyObject *obj,
305 const char *name,
306 const char *format, ...);
Guido van Rossuma8275371995-07-18 14:07:00 +0000307
Serhiy Storchaka9fab79b2016-09-11 11:03:14 +0300308#ifndef Py_LIMITED_API
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100309/* Like PyObject_CallMethod(), but expect a _Py_Identifier*
310 as the method name. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100311PyAPI_FUNC(PyObject *) _PyObject_CallMethodId(PyObject *obj,
312 _Py_Identifier *name,
313 const char *format, ...);
Serhiy Storchaka9fab79b2016-09-11 11:03:14 +0300314#endif /* !Py_LIMITED_API */
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200315
Victor Stinner2a358f82016-12-06 16:55:39 +0100316PyAPI_FUNC(PyObject *) _PyObject_CallFunction_SizeT(PyObject *callable,
317 const char *format,
318 ...);
319
320PyAPI_FUNC(PyObject *) _PyObject_CallMethod_SizeT(PyObject *obj,
321 const char *name,
322 const char *format,
323 ...);
324
Serhiy Storchaka9fab79b2016-09-11 11:03:14 +0300325#ifndef Py_LIMITED_API
Victor Stinner2a358f82016-12-06 16:55:39 +0100326PyAPI_FUNC(PyObject *) _PyObject_CallMethodId_SizeT(PyObject *obj,
327 _Py_Identifier *name,
328 const char *format,
329 ...);
Serhiy Storchaka9fab79b2016-09-11 11:03:14 +0300330#endif /* !Py_LIMITED_API */
Guido van Rossuma8275371995-07-18 14:07:00 +0000331
Victor Stinner2a358f82016-12-06 16:55:39 +0100332/* Call a callable Python object 'callable' with a variable number of C
333 arguments. The C arguments are provided as PyObject* values, terminated
334 by a NULL.
Victor Stinner2d0eb652016-12-06 16:27:24 +0100335
Victor Stinner2a358f82016-12-06 16:55:39 +0100336 Returns the result of the call on success, or NULL on failure.
Victor Stinner2d0eb652016-12-06 16:27:24 +0100337
Victor Stinner2a358f82016-12-06 16:55:39 +0100338 This is the equivalent of the Python expression:
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100339 callable(arg1, arg2, ...). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100340PyAPI_FUNC(PyObject *) PyObject_CallFunctionObjArgs(PyObject *callable,
341 ...);
Fred Drakeb421b8c2001-10-26 16:21:32 +0000342
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100343/* Call the method named 'name' of object 'obj' with a variable number of
344 C arguments. The C arguments are provided as PyObject* values, terminated
345 by NULL.
346
347 Returns the result of the call on success, or NULL on failure.
348
349 This is the equivalent of the Python expression: obj.name(*args). */
Guido van Rossuma8275371995-07-18 14:07:00 +0000350
Victor Stinner2a358f82016-12-06 16:55:39 +0100351PyAPI_FUNC(PyObject *) PyObject_CallMethodObjArgs(
352 PyObject *obj,
353 PyObject *name,
354 ...);
355
Victor Stinner2d0eb652016-12-06 16:27:24 +0100356#ifndef Py_LIMITED_API
Victor Stinner2a358f82016-12-06 16:55:39 +0100357PyAPI_FUNC(PyObject *) _PyObject_CallMethodIdObjArgs(
358 PyObject *obj,
359 struct _Py_Identifier *name,
360 ...);
Victor Stinner2d0eb652016-12-06 16:27:24 +0100361#endif /* !Py_LIMITED_API */
362
363
Victor Stinner2a358f82016-12-06 16:55:39 +0100364/* Implemented elsewhere:
Guido van Rossuma8275371995-07-18 14:07:00 +0000365
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100366 long PyObject_Hash(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000367
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100368 Compute and return the hash, hash_value, of an object, o. On
369 failure, return -1.
370
371 This is the equivalent of the Python expression: hash(o). */
Guido van Rossuma8275371995-07-18 14:07:00 +0000372
373
Victor Stinner2a358f82016-12-06 16:55:39 +0100374/* Implemented elsewhere:
Guido van Rossuma8275371995-07-18 14:07:00 +0000375
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100376 int PyObject_IsTrue(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000377
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100378 Returns 1 if the object, o, is considered to be true, 0 if o is
379 considered to be false and -1 on failure.
380
381 This is equivalent to the Python expression: not not o. */
382
Guido van Rossuma8275371995-07-18 14:07:00 +0000383
Victor Stinner2a358f82016-12-06 16:55:39 +0100384/* Implemented elsewhere:
Guido van Rossumc3d3f961998-04-09 17:53:59 +0000385
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100386 int PyObject_Not(PyObject *o);
Guido van Rossumc3d3f961998-04-09 17:53:59 +0000387
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100388 Returns 0 if the object, o, is considered to be true, 1 if o is
389 considered to be false and -1 on failure.
Guido van Rossumc3d3f961998-04-09 17:53:59 +0000390
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100391 This is equivalent to the Python expression: not o. */
392
393
394/* Get the type of an object.
395
396 On success, returns a type object corresponding to the object type of object
397 'o'. On failure, returns NULL.
398
399 This is equivalent to the Python expression: type(o) */
Victor Stinner2a358f82016-12-06 16:55:39 +0100400PyAPI_FUNC(PyObject *) PyObject_Type(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000401
Guido van Rossuma8275371995-07-18 14:07:00 +0000402
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100403/* Return the size of object 'o'. If the object 'o' provides both sequence and
404 mapping protocols, the sequence size is returned.
405
406 On error, -1 is returned.
407
408 This is the equivalent to the Python expression: len(o) */
Victor Stinner2a358f82016-12-06 16:55:39 +0100409PyAPI_FUNC(Py_ssize_t) PyObject_Size(PyObject *o);
Jeremy Hylton6253f832000-07-12 12:56:19 +0000410
Guido van Rossuma8275371995-07-18 14:07:00 +0000411
Victor Stinner2a358f82016-12-06 16:55:39 +0100412/* For DLL compatibility */
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +0000413#undef PyObject_Length
Victor Stinner2a358f82016-12-06 16:55:39 +0100414PyAPI_FUNC(Py_ssize_t) PyObject_Length(PyObject *o);
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +0000415#define PyObject_Length PyObject_Size
416
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100417
Armin Ronacher74b38b12012-10-07 10:29:32 +0200418#ifndef Py_LIMITED_API
Victor Stinner2a358f82016-12-06 16:55:39 +0100419PyAPI_FUNC(int) _PyObject_HasLen(PyObject *o);
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100420
421/* Guess the size of object 'o' using len(o) or o.__length_hint__().
422 If neither of those return a non-negative value, then return the default
423 value. If one of the calls fails, this function returns -1. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100424PyAPI_FUNC(Py_ssize_t) PyObject_LengthHint(PyObject *o, Py_ssize_t);
Armin Ronacher74b38b12012-10-07 10:29:32 +0200425#endif
Raymond Hettinger6b27cda2005-09-24 21:23:05 +0000426
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100427/* Return element of 'o' corresponding to the object 'key'. Return NULL
428 on failure.
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +0000429
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100430 This is the equivalent of the Python expression: o[key] */
Victor Stinner2a358f82016-12-06 16:55:39 +0100431PyAPI_FUNC(PyObject *) PyObject_GetItem(PyObject *o, PyObject *key);
Guido van Rossuma8275371995-07-18 14:07:00 +0000432
Guido van Rossuma8275371995-07-18 14:07:00 +0000433
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100434/* Map the object 'key' to the value 'v' into 'o'.
435
436 Raise an exception and return -1 on failure; return 0 on success.
437
438 This is the equivalent of the Python statement: o[key]=v. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100439PyAPI_FUNC(int) PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v);
Guido van Rossuma8275371995-07-18 14:07:00 +0000440
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100441/* Remove the mapping for object, key, from the object 'o'.
442 Returns -1 on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000443
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100444 This is equivalent to the Python statement: del o[key]. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100445PyAPI_FUNC(int) PyObject_DelItemString(PyObject *o, const char *key);
Martin v. Löwisb0d71d02002-01-05 10:50:30 +0000446
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100447/* Delete the mapping for key from object 'o'. Returns -1 on failure.
Martin v. Löwisb0d71d02002-01-05 10:50:30 +0000448
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100449 This is the equivalent of the Python statement: del o[key]. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100450PyAPI_FUNC(int) PyObject_DelItem(PyObject *o, PyObject *key);
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000451
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000452
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100453/* === Old Buffer API ============================================ */
454
455/* FIXME: usage of these should all be replaced in Python itself
Victor Stinner2a358f82016-12-06 16:55:39 +0100456 but for backwards compatibility we will implement them.
457 Their usage without a corresponding "unlock" mechanism
458 may create issues (but they would already be there). */
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000459
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100460/* Takes an arbitrary object which must support the (character, single segment)
461 buffer interface and returns a pointer to a read-only memory location
462 useable as character based input for subsequent processing.
463
464 Return 0 on success. buffer and buffer_len are only set in case no error
465 occurs. Otherwise, -1 is returned and an exception set. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100466PyAPI_FUNC(int) PyObject_AsCharBuffer(PyObject *obj,
467 const char **buffer,
468 Py_ssize_t *buffer_len)
469 Py_DEPRECATED(3.0);
Guido van Rossumfd9eed32000-03-10 22:35:06 +0000470
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100471/* Checks whether an arbitrary object supports the (character, single segment)
472 buffer interface.
Guido van Rossumfd9eed32000-03-10 22:35:06 +0000473
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100474 Returns 1 on success, 0 on failure. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100475PyAPI_FUNC(int) PyObject_CheckReadBuffer(PyObject *obj)
476 Py_DEPRECATED(3.0);
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000477
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100478/* Same as PyObject_AsCharBuffer() except that this API expects (readable,
479 single segment) buffer interface and returns a pointer to a read-only memory
480 location which can contain arbitrary data.
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000481
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100482 0 is returned on success. buffer and buffer_len are only set in case no
483 error occurs. Otherwise, -1 is returned and an exception set. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100484PyAPI_FUNC(int) PyObject_AsReadBuffer(PyObject *obj,
485 const void **buffer,
486 Py_ssize_t *buffer_len)
487 Py_DEPRECATED(3.0);
Guido van Rossumfd9eed32000-03-10 22:35:06 +0000488
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100489/* Takes an arbitrary object which must support the (writable, single segment)
490 buffer interface and returns a pointer to a writable memory location in
491 buffer of size 'buffer_len'.
Guido van Rossumfd9eed32000-03-10 22:35:06 +0000492
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100493 Return 0 on success. buffer and buffer_len are only set in case no error
494 occurs. Otherwise, -1 is returned and an exception set. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100495PyAPI_FUNC(int) PyObject_AsWriteBuffer(PyObject *obj,
496 void **buffer,
497 Py_ssize_t *buffer_len)
498 Py_DEPRECATED(3.0);
Guido van Rossumfd9eed32000-03-10 22:35:06 +0000499
Guido van Rossumfd9eed32000-03-10 22:35:06 +0000500
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100501/* === New Buffer API ============================================ */
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000502
Martin v. Löwisc83bc3c2011-01-06 19:15:47 +0000503#ifndef Py_LIMITED_API
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100504
505/* Return 1 if the getbuffer function is available, otherwise return 0. */
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000506#define PyObject_CheckBuffer(obj) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000507 (((obj)->ob_type->tp_as_buffer != NULL) && \
508 ((obj)->ob_type->tp_as_buffer->bf_getbuffer != NULL))
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000509
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100510/* This is a C-API version of the getbuffer function call. It checks
511 to make sure object has the required function pointer and issues the
512 call.
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000513
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100514 Returns -1 and raises an error on failure and returns 0 on success. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100515PyAPI_FUNC(int) PyObject_GetBuffer(PyObject *obj, Py_buffer *view,
516 int flags);
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000517
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100518/* Get the memory area pointed to by the indices for the buffer given.
519 Note that view->ndim is the assumed size of indices. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100520PyAPI_FUNC(void *) PyBuffer_GetPointer(Py_buffer *view, Py_ssize_t *indices);
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000521
Victor Stinner2a358f82016-12-06 16:55:39 +0100522/* Return the implied itemsize of the data-format area from a
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100523 struct-style description. */
524PyAPI_FUNC(int) PyBuffer_SizeFromFormat(const char *);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000525
Victor Stinner2a358f82016-12-06 16:55:39 +0100526/* Implementation in memoryobject.c */
527PyAPI_FUNC(int) PyBuffer_ToContiguous(void *buf, Py_buffer *view,
528 Py_ssize_t len, char order);
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000529
Victor Stinner2a358f82016-12-06 16:55:39 +0100530PyAPI_FUNC(int) PyBuffer_FromContiguous(Py_buffer *view, void *buf,
531 Py_ssize_t len, char order);
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000532
Victor Stinner2a358f82016-12-06 16:55:39 +0100533/* Copy len bytes of data from the contiguous chunk of memory
534 pointed to by buf into the buffer exported by obj. Return
535 0 on success and return -1 and raise a PyBuffer_Error on
536 error (i.e. the object does not have a buffer interface or
537 it is not working).
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000538
Victor Stinner2a358f82016-12-06 16:55:39 +0100539 If fort is 'F', then if the object is multi-dimensional,
540 then the data will be copied into the array in
541 Fortran-style (first dimension varies the fastest). If
542 fort is 'C', then the data will be copied into the array
543 in C-style (last dimension varies the fastest). If fort
544 is 'A', then it does not matter and the copy will be made
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100545 in whatever way is more efficient. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100546PyAPI_FUNC(int) PyObject_CopyData(PyObject *dest, PyObject *src);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000547
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100548/* Copy the data from the src buffer to the buffer of destination. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100549PyAPI_FUNC(int) PyBuffer_IsContiguous(const Py_buffer *view, char fort);
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000550
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100551/*Fill the strides array with byte-strides of a contiguous
552 (Fortran-style if fort is 'F' or C-style otherwise)
553 array of the given shape with the given number of bytes
554 per element. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100555PyAPI_FUNC(void) PyBuffer_FillContiguousStrides(int ndims,
556 Py_ssize_t *shape,
557 Py_ssize_t *strides,
558 int itemsize,
559 char fort);
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000560
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100561/* Fills in a buffer-info structure correctly for an exporter
562 that can only share a contiguous chunk of memory of
563 "unsigned bytes" of the given length.
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000564
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100565 Returns 0 on success and -1 (with raising an error) on error. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100566PyAPI_FUNC(int) PyBuffer_FillInfo(Py_buffer *view, PyObject *o, void *buf,
567 Py_ssize_t len, int readonly,
568 int flags);
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000569
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100570/* Releases a Py_buffer obtained from getbuffer ParseTuple's "s*". */
Victor Stinner2a358f82016-12-06 16:55:39 +0100571PyAPI_FUNC(void) PyBuffer_Release(Py_buffer *view);
Martin v. Löwis423be952008-08-13 15:53:07 +0000572
Martin v. Löwisc83bc3c2011-01-06 19:15:47 +0000573#endif /* Py_LIMITED_API */
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000574
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100575/* Takes an arbitrary object and returns the result of calling
576 obj.__format__(format_spec). */
577PyAPI_FUNC(PyObject *) PyObject_Format(PyObject *obj,
Victor Stinner2a358f82016-12-06 16:55:39 +0100578 PyObject *format_spec);
Eric Smith8fd3eba2008-02-17 19:48:00 +0000579
Guido van Rossum213c7a62001-04-23 14:08:49 +0000580
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100581/* ==== Iterators ================================================ */
582
583/* Takes an object and returns an iterator for it.
584 This is typically a new iterator but if the argument is an iterator, this
585 returns itself. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100586PyAPI_FUNC(PyObject *) PyObject_GetIter(PyObject *);
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000587
Guido van Rossum213c7a62001-04-23 14:08:49 +0000588#define PyIter_Check(obj) \
Amaury Forgeot d'Arcf343e012009-01-12 23:58:21 +0000589 ((obj)->ob_type->tp_iternext != NULL && \
590 (obj)->ob_type->tp_iternext != &_PyObject_NextNotImplemented)
Guido van Rossum213c7a62001-04-23 14:08:49 +0000591
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100592/* Takes an iterator object and calls its tp_iternext slot,
593 returning the next value.
594
595 If the iterator is exhausted, this returns NULL without setting an
596 exception.
597
598 NULL with an exception means an error occurred. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100599PyAPI_FUNC(PyObject *) PyIter_Next(PyObject *);
Guido van Rossum213c7a62001-04-23 14:08:49 +0000600
Guido van Rossuma8275371995-07-18 14:07:00 +0000601
Victor Stinner2a358f82016-12-06 16:55:39 +0100602/* === Number Protocol ================================================== */
Guido van Rossuma8275371995-07-18 14:07:00 +0000603
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100604/* Returns 1 if the object 'o' provides numeric protocols, and 0 otherwise.
605
606 This function always succeeds. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100607PyAPI_FUNC(int) PyNumber_Check(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000608
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100609/* Returns the result of adding o1 and o2, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000610
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100611 This is the equivalent of the Python expression: o1 + o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100612PyAPI_FUNC(PyObject *) PyNumber_Add(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000613
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100614/* Returns the result of subtracting o2 from o1, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000615
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100616 This is the equivalent of the Python expression: o1 - o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100617PyAPI_FUNC(PyObject *) PyNumber_Subtract(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000618
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100619/* Returns the result of multiplying o1 and o2, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +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_Multiply(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000623
Serhiy Storchaka34d0ac82016-12-27 14:57:39 +0200624#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100625/* This is the equivalent of the Python expression: o1 @ o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100626PyAPI_FUNC(PyObject *) PyNumber_MatrixMultiply(PyObject *o1, PyObject *o2);
Serhiy Storchaka34d0ac82016-12-27 14:57:39 +0200627#endif
Benjamin Petersond51374e2014-04-09 23:55:56 -0400628
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100629/* Returns the result of dividing o1 by o2 giving an integral result,
630 or NULL on failure.
Guido van Rossum4668b002001-08-08 05:00:18 +0000631
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100632 This is the equivalent of the Python expression: o1 // o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100633PyAPI_FUNC(PyObject *) PyNumber_FloorDivide(PyObject *o1, PyObject *o2);
Guido van Rossum4668b002001-08-08 05:00:18 +0000634
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100635/* Returns the result of dividing o1 by o2 giving a float result, or NULL on
636 failure.
Guido van Rossum4668b002001-08-08 05:00:18 +0000637
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100638 This is the equivalent of the Python expression: o1 / o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100639PyAPI_FUNC(PyObject *) PyNumber_TrueDivide(PyObject *o1, PyObject *o2);
Guido van Rossum4668b002001-08-08 05:00:18 +0000640
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100641/* Returns the remainder of dividing o1 by o2, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000642
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100643 This is the equivalent of the Python expression: o1 % o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100644PyAPI_FUNC(PyObject *) PyNumber_Remainder(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000645
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100646/* See the built-in function divmod.
Guido van Rossuma8275371995-07-18 14:07:00 +0000647
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100648 Returns NULL on failure.
649
650 This is the equivalent of the Python expression: divmod(o1, o2). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100651PyAPI_FUNC(PyObject *) PyNumber_Divmod(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000652
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100653/* See the built-in function pow. Returns NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000654
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100655 This is the equivalent of the Python expression: pow(o1, o2, o3),
656 where o3 is optional. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100657PyAPI_FUNC(PyObject *) PyNumber_Power(PyObject *o1, PyObject *o2,
658 PyObject *o3);
Guido van Rossuma8275371995-07-18 14:07:00 +0000659
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100660/* Returns the negation of o on success, 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. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100663PyAPI_FUNC(PyObject *) PyNumber_Negative(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000664
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100665/* Returns the positive of o on success, 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. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100668PyAPI_FUNC(PyObject *) PyNumber_Positive(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000669
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100670/* Returns the absolute value of 'o', 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: abs(o). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100673PyAPI_FUNC(PyObject *) PyNumber_Absolute(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000674
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100675/* Returns the bitwise negation of 'o' on success, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000676
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100677 This is the equivalent of the Python expression: ~o. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100678PyAPI_FUNC(PyObject *) PyNumber_Invert(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000679
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100680/* Returns the result of left shifting o1 by o2 on success, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000681
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100682 This is the equivalent of the Python expression: o1 << o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100683PyAPI_FUNC(PyObject *) PyNumber_Lshift(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000684
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100685/* Returns the result of right shifting o1 by o2 on success, or NULL on
686 failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000687
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100688 This is the equivalent of the Python expression: o1 >> o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100689PyAPI_FUNC(PyObject *) PyNumber_Rshift(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000690
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100691/* Returns the result of bitwise and of o1 and o2 on success, or NULL on
692 failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000693
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100694 This is the equivalent of the Python expression: o1 & o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100695PyAPI_FUNC(PyObject *) PyNumber_And(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000696
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100697/* Returns the bitwise exclusive or of o1 by o2 on success, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000698
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100699 This is the equivalent of the Python expression: o1 ^ o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100700PyAPI_FUNC(PyObject *) PyNumber_Xor(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000701
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100702/* Returns the result of bitwise or on o1 and o2 on success, or NULL on
703 failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000704
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100705 This is the equivalent of the Python expression: o1 | o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100706PyAPI_FUNC(PyObject *) PyNumber_Or(PyObject *o1, PyObject *o2);
707
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100708#define PyIndex_Check(obj) \
709 ((obj)->ob_type->tp_as_number != NULL && \
710 (obj)->ob_type->tp_as_number->nb_index != NULL)
Guido van Rossuma8275371995-07-18 14:07:00 +0000711
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100712/* Returns the object 'o' converted to a Python int, or NULL with an exception
713 raised on failure. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100714PyAPI_FUNC(PyObject *) PyNumber_Index(PyObject *o);
Guido van Rossum38fff8c2006-03-07 18:50:55 +0000715
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100716/* Returns the object 'o' converted to Py_ssize_t by going through
717 PyNumber_Index() first.
Guido van Rossum38fff8c2006-03-07 18:50:55 +0000718
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100719 If an overflow error occurs while converting the int to Py_ssize_t, then the
720 second argument 'exc' is the error-type to return. If it is NULL, then the
721 overflow error is cleared and the value is clipped. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100722PyAPI_FUNC(Py_ssize_t) PyNumber_AsSsize_t(PyObject *o, PyObject *exc);
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000723
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100724/* Returns the object 'o' converted to an integer object on success, or NULL
725 on failure.
Guido van Rossum38fff8c2006-03-07 18:50:55 +0000726
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100727 This is the equivalent of the Python expression: int(o). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100728PyAPI_FUNC(PyObject *) PyNumber_Long(PyObject *o);
Mark Dickinsond7467682009-01-10 22:14:33 +0000729
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100730/* Returns the object 'o' converted to a float object on success, or NULL
731 on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000732
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100733 This is the equivalent of the Python expression: float(o). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100734PyAPI_FUNC(PyObject *) PyNumber_Float(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000735
Victor Stinner2a358f82016-12-06 16:55:39 +0100736
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100737/* --- In-place variants of (some of) the above number protocol functions -- */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000738
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100739/* Returns the result of adding o2 to o1, possibly in-place, or NULL
740 on failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000741
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100742 This is the equivalent of the Python expression: o1 += o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100743PyAPI_FUNC(PyObject *) PyNumber_InPlaceAdd(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000744
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100745/* Returns the result of subtracting o2 from o1, possibly in-place or
746 NULL on failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000747
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100748 This is the equivalent of the Python expression: o1 -= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100749PyAPI_FUNC(PyObject *) PyNumber_InPlaceSubtract(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000750
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100751/* Returns the result of multiplying o1 by o2, possibly in-place, or NULL on
752 failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000753
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100754 This is the equivalent of the Python expression: o1 *= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100755PyAPI_FUNC(PyObject *) PyNumber_InPlaceMultiply(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000756
Serhiy Storchaka34d0ac82016-12-27 14:57:39 +0200757#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100758/* This is the equivalent of the Python expression: o1 @= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100759PyAPI_FUNC(PyObject *) PyNumber_InPlaceMatrixMultiply(PyObject *o1, PyObject *o2);
Serhiy Storchaka34d0ac82016-12-27 14:57:39 +0200760#endif
Benjamin Petersond51374e2014-04-09 23:55:56 -0400761
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100762/* Returns the result of dividing o1 by o2 giving an integral result, possibly
763 in-place, or NULL on failure.
Benjamin Petersond51374e2014-04-09 23:55:56 -0400764
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100765 This is the equivalent of the Python expression: o1 /= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100766PyAPI_FUNC(PyObject *) PyNumber_InPlaceFloorDivide(PyObject *o1,
767 PyObject *o2);
Guido van Rossum4668b002001-08-08 05:00:18 +0000768
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100769/* Returns the result of dividing o1 by o2 giving a float result, possibly
770 in-place, or null on failure.
Guido van Rossum4668b002001-08-08 05:00:18 +0000771
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100772 This is the equivalent of the Python expression: o1 /= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100773PyAPI_FUNC(PyObject *) PyNumber_InPlaceTrueDivide(PyObject *o1,
774 PyObject *o2);
Guido van Rossum4668b002001-08-08 05:00:18 +0000775
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100776/* Returns the remainder of dividing o1 by o2, possibly in-place, or NULL on
777 failure.
Guido van Rossum4668b002001-08-08 05:00:18 +0000778
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100779 This is the equivalent of the Python expression: o1 %= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100780PyAPI_FUNC(PyObject *) PyNumber_InPlaceRemainder(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000781
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100782/* Returns the result of raising o1 to the power of o2, possibly in-place,
783 or NULL on failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000784
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100785 This is the equivalent of the Python expression: o1 **= o2,
786 or o1 = pow(o1, o2, o3) if o3 is present. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100787PyAPI_FUNC(PyObject *) PyNumber_InPlacePower(PyObject *o1, PyObject *o2,
788 PyObject *o3);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000789
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100790/* Returns the result of left shifting o1 by o2, possibly in-place, or NULL
791 on failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000792
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100793 This is the equivalent of the Python expression: o1 <<= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100794PyAPI_FUNC(PyObject *) PyNumber_InPlaceLshift(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000795
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100796/* Returns the result of right shifting o1 by o2, possibly in-place or NULL
797 on failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000798
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100799 This is the equivalent of the Python expression: o1 >>= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100800PyAPI_FUNC(PyObject *) PyNumber_InPlaceRshift(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000801
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100802/* Returns the result of bitwise and of o1 and o2, possibly in-place, or NULL
803 on failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000804
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100805 This is the equivalent of the Python expression: o1 &= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100806PyAPI_FUNC(PyObject *) PyNumber_InPlaceAnd(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000807
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100808/* Returns the bitwise exclusive or of o1 by o2, possibly in-place, or NULL
809 on failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000810
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100811 This is the equivalent of the Python expression: o1 ^= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100812PyAPI_FUNC(PyObject *) PyNumber_InPlaceXor(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000813
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100814/* Returns the result of bitwise or of o1 and o2, possibly in-place,
815 or NULL on failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000816
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100817 This is the equivalent of the Python expression: o1 |= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100818PyAPI_FUNC(PyObject *) PyNumber_InPlaceOr(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000819
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100820/* Returns the integer n converted to a string with a base, with a base
821 marker of 0b, 0o or 0x prefixed if applicable.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000822
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100823 If n is not an int object, it is converted with PyNumber_Index first. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100824PyAPI_FUNC(PyObject *) PyNumber_ToBase(PyObject *n, int base);
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000825
Guido van Rossuma8275371995-07-18 14:07:00 +0000826
Victor Stinner2a358f82016-12-06 16:55:39 +0100827/* === Sequence protocol ================================================ */
Guido van Rossuma8275371995-07-18 14:07:00 +0000828
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100829/* Return 1 if the object provides sequence protocol, and zero
830 otherwise.
831
832 This function always succeeds. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100833PyAPI_FUNC(int) PySequence_Check(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000834
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100835/* Return the size of sequence object o, or -1 on failure. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100836PyAPI_FUNC(Py_ssize_t) PySequence_Size(PyObject *o);
Jeremy Hylton6253f832000-07-12 12:56:19 +0000837
Victor Stinner2a358f82016-12-06 16:55:39 +0100838/* For DLL compatibility */
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +0000839#undef PySequence_Length
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100840PyAPI_FUNC(Py_ssize_t) PySequence_Length(PyObject *o);
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +0000841#define PySequence_Length PySequence_Size
842
843
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100844/* Return the concatenation of o1 and o2 on success, and NULL on failure.
845
846 This is the equivalent of the Python expression: o1 + o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100847PyAPI_FUNC(PyObject *) PySequence_Concat(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000848
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100849/* Return the result of repeating sequence object 'o' 'count' times,
850 or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000851
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100852 This is the equivalent of the Python expression: o * count. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100853PyAPI_FUNC(PyObject *) PySequence_Repeat(PyObject *o, Py_ssize_t count);
Guido van Rossuma8275371995-07-18 14:07:00 +0000854
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100855/* Return the ith element of o, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000856
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100857 This is the equivalent of the Python expression: o[i]. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100858PyAPI_FUNC(PyObject *) PySequence_GetItem(PyObject *o, Py_ssize_t i);
Guido van Rossuma8275371995-07-18 14:07:00 +0000859
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100860/* Return the slice of sequence object o between i1 and i2, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000861
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100862 This is the equivalent of the Python expression: o[i1:i2]. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100863PyAPI_FUNC(PyObject *) PySequence_GetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000864
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100865/* Assign object 'v' to the ith element of the sequence 'o'. Raise an exception
866 and return -1 on failure; return 0 on success.
Guido van Rossuma8275371995-07-18 14:07:00 +0000867
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100868 This is the equivalent of the Python statement o[i] = v. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100869PyAPI_FUNC(int) PySequence_SetItem(PyObject *o, Py_ssize_t i, PyObject *v);
Guido van Rossuma8275371995-07-18 14:07:00 +0000870
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100871/* Delete the 'i'-th element of the sequence 'v'. Returns -1 on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000872
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100873 This is the equivalent of the Python statement: del o[i]. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100874PyAPI_FUNC(int) PySequence_DelItem(PyObject *o, Py_ssize_t i);
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000875
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100876/* Assign the sequence object 'v' to the slice in sequence object 'o',
877 from 'i1' to 'i2'. Returns -1 on failure.
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000878
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100879 This is the equivalent of the Python statement: o[i1:i2] = v. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100880PyAPI_FUNC(int) PySequence_SetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2,
881 PyObject *v);
Guido van Rossuma8275371995-07-18 14:07:00 +0000882
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100883/* Delete the slice in sequence object 'o' from 'i1' to 'i2'.
884 Returns -1 on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000885
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100886 This is the equivalent of the Python statement: del o[i1:i2]. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100887PyAPI_FUNC(int) PySequence_DelSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2);
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000888
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100889/* Returns the sequence 'o' as a tuple on success, and NULL on failure.
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000890
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100891 This is equivalent to the Python expression: tuple(o). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100892PyAPI_FUNC(PyObject *) PySequence_Tuple(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000893
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100894/* Returns the sequence 'o' as a list on success, and NULL on failure.
895 This is equivalent to the Python expression: list(o) */
Victor Stinner2a358f82016-12-06 16:55:39 +0100896PyAPI_FUNC(PyObject *) PySequence_List(PyObject *o);
Guido van Rossumf39fc431997-03-04 18:31:47 +0000897
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100898/* Return the sequence 'o' as a list, unless it's already a tuple or list.
899
900 Use PySequence_Fast_GET_ITEM to access the members of this list, and
901 PySequence_Fast_GET_SIZE to get its length.
902
903 Returns NULL on failure. If the object does not support iteration, raises a
904 TypeError exception with 'm' as the message text. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100905PyAPI_FUNC(PyObject *) PySequence_Fast(PyObject *o, const char* m);
Andrew M. Kuchling74042d62000-06-18 18:43:14 +0000906
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100907/* Return the size of the sequence 'o', assuming that 'o' was returned by
908 PySequence_Fast and is not NULL. */
Tim Peters1fc240e2001-10-26 05:06:50 +0000909#define PySequence_Fast_GET_SIZE(o) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000910 (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
Tim Peters1fc240e2001-10-26 05:06:50 +0000911
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100912/* Return the 'i'-th element of the sequence 'o', assuming that o was returned
913 by PySequence_Fast, and that i is within bounds. */
Andrew M. Kuchling74042d62000-06-18 18:43:14 +0000914#define PySequence_Fast_GET_ITEM(o, i)\
915 (PyList_Check(o) ? PyList_GET_ITEM(o, i) : PyTuple_GET_ITEM(o, i))
Andrew M. Kuchling74042d62000-06-18 18:43:14 +0000916
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100917/* Assume tp_as_sequence and sq_item exist and that 'i' does not
918 need to be corrected for a negative index. */
Martin v. Löwis01f94bd2002-05-08 08:44:21 +0000919#define PySequence_ITEM(o, i)\
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000920 ( Py_TYPE(o)->tp_as_sequence->sq_item(o, i) )
Martin v. Löwis01f94bd2002-05-08 08:44:21 +0000921
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100922/* Return a pointer to the underlying item array for
923 an object retured by PySequence_Fast */
Raymond Hettinger42bec932004-03-12 16:38:17 +0000924#define PySequence_Fast_ITEMS(sf) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000925 (PyList_Check(sf) ? ((PyListObject *)(sf))->ob_item \
926 : ((PyTupleObject *)(sf))->ob_item)
Raymond Hettingerc1e4f9d2004-03-12 08:04:00 +0000927
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100928/* Return the number of occurrences on value on 'o', that is, return
929 the number of keys for which o[key] == value.
930
931 On failure, return -1. This is equivalent to the Python expression:
932 o.count(value). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100933PyAPI_FUNC(Py_ssize_t) PySequence_Count(PyObject *o, PyObject *value);
Guido van Rossuma8275371995-07-18 14:07:00 +0000934
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100935/* Return 1 if 'ob' is in the sequence 'seq'; 0 if 'ob' is not in the sequence
936 'seq'; -1 on error.
Guido van Rossuma8275371995-07-18 14:07:00 +0000937
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100938 Use __contains__ if possible, else _PySequence_IterSearch(). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100939PyAPI_FUNC(int) PySequence_Contains(PyObject *seq, PyObject *ob);
Tim Peterscb8d3682001-05-05 21:05:01 +0000940
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000941#ifndef Py_LIMITED_API
Tim Peters16a77ad2001-09-08 04:00:12 +0000942#define PY_ITERSEARCH_COUNT 1
943#define PY_ITERSEARCH_INDEX 2
944#define PY_ITERSEARCH_CONTAINS 3
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100945
946/* Iterate over seq.
947
948 Result depends on the operation:
949
950 PY_ITERSEARCH_COUNT: return # of times obj appears in seq; -1 if
951 error.
952 PY_ITERSEARCH_INDEX: return 0-based index of first occurrence of
953 obj in seq; set ValueError and return -1 if none found;
954 also return -1 on error.
955 PY_ITERSEARCH_CONTAINS: return 1 if obj in seq, else 0; -1 on
956 error. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100957PyAPI_FUNC(Py_ssize_t) _PySequence_IterSearch(PyObject *seq,
958 PyObject *obj, int operation);
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000959#endif
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100960
Guido van Rossum83684531999-03-17 18:44:39 +0000961
962/* For DLL-level backwards compatibility */
963#undef PySequence_In
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100964/* Determine if the sequence 'o' contains 'value'. If an item in 'o' is equal
965 to 'value', return 1, otherwise return 0. On error, return -1.
966
967 This is equivalent to the Python expression: value in o. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100968PyAPI_FUNC(int) PySequence_In(PyObject *o, PyObject *value);
Guido van Rossum83684531999-03-17 18:44:39 +0000969
970/* For source-level backwards compatibility */
Guido van Rossumf1536db1998-08-23 22:06:59 +0000971#define PySequence_In PySequence_Contains
Guido van Rossuma8275371995-07-18 14:07:00 +0000972
Guido van Rossuma8275371995-07-18 14:07:00 +0000973
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100974/* Return the first index for which o[i] == value.
975 On error, return -1.
976
977 This is equivalent to the Python expression: o.index(value). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100978PyAPI_FUNC(Py_ssize_t) PySequence_Index(PyObject *o, PyObject *value);
Guido van Rossuma8275371995-07-18 14:07:00 +0000979
Victor Stinner2a358f82016-12-06 16:55:39 +0100980
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100981/* --- In-place versions of some of the above Sequence functions --- */
Guido van Rossuma8275371995-07-18 14:07:00 +0000982
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100983/* Append sequence 'o2' to sequence 'o1', in-place when possible. Return the
984 resulting object, which could be 'o1', or NULL on failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000985
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100986 This is the equivalent of the Python expression: o1 += o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100987PyAPI_FUNC(PyObject *) PySequence_InPlaceConcat(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000988
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100989/* Repeat sequence 'o' by 'count', in-place when possible. Return the resulting
990 object, which could be 'o', or NULL on failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000991
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100992 This is the equivalent of the Python expression: o1 *= count. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100993PyAPI_FUNC(PyObject *) PySequence_InPlaceRepeat(PyObject *o, Py_ssize_t count);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000994
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000995
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100996/* === Mapping protocol ================================================= */
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000997
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100998/* Return 1 if the object provides mapping protocol, and 0 otherwise.
Guido van Rossuma8275371995-07-18 14:07:00 +0000999
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001000 This function always succeeds. */
Victor Stinner2a358f82016-12-06 16:55:39 +01001001PyAPI_FUNC(int) PyMapping_Check(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +00001002
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001003/* Returns the number of keys in mapping object 'o' on success, and -1 on
1004 failure. For objects that do not provide sequence protocol, this is
1005 equivalent to the Python expression: len(o). */
Victor Stinner2a358f82016-12-06 16:55:39 +01001006PyAPI_FUNC(Py_ssize_t) PyMapping_Size(PyObject *o);
Jeremy Hylton6253f832000-07-12 12:56:19 +00001007
Victor Stinner2a358f82016-12-06 16:55:39 +01001008/* For DLL compatibility */
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +00001009#undef PyMapping_Length
Victor Stinner2a358f82016-12-06 16:55:39 +01001010PyAPI_FUNC(Py_ssize_t) PyMapping_Length(PyObject *o);
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +00001011#define PyMapping_Length PyMapping_Size
1012
1013
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001014/* Implemented as a macro:
Guido van Rossuma25e5e91996-09-06 13:48:38 +00001015
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001016 int PyMapping_DelItemString(PyObject *o, const char *key);
Guido van Rossuma8275371995-07-18 14:07:00 +00001017
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001018 Remove the mapping for object 'key' from the mapping 'o'. Returns -1 on
1019 failure.
1020
1021 This is equivalent to the Python statement: del o[key]. */
Jeremy Hylton7c7ee5f2001-11-28 16:20:07 +00001022#define PyMapping_DelItemString(O,K) PyObject_DelItemString((O),(K))
Guido van Rossuma25e5e91996-09-06 13:48:38 +00001023
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001024/* Implemented as a macro:
Guido van Rossuma8275371995-07-18 14:07:00 +00001025
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001026 int PyMapping_DelItem(PyObject *o, PyObject *key);
Guido van Rossuma8275371995-07-18 14:07:00 +00001027
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001028 Remove the mapping for object 'key' from the mapping object 'o'.
1029 Returns -1 on failure.
1030
1031 This is equivalent to the Python statement: del o[key]. */
Jeremy Hylton7c7ee5f2001-11-28 16:20:07 +00001032#define PyMapping_DelItem(O,K) PyObject_DelItem((O),(K))
Guido van Rossuma8275371995-07-18 14:07:00 +00001033
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001034/* On success, return 1 if the mapping object 'o' has the key 'key',
1035 and 0 otherwise.
1036
1037 This is equivalent to the Python expression: key in o.
1038
1039 This function always succeeds. */
Victor Stinner2a358f82016-12-06 16:55:39 +01001040PyAPI_FUNC(int) PyMapping_HasKeyString(PyObject *o, const char *key);
Guido van Rossuma8275371995-07-18 14:07:00 +00001041
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001042/* Return 1 if the mapping object has the key 'key', and 0 otherwise.
Guido van Rossuma8275371995-07-18 14:07:00 +00001043
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001044 This is equivalent to the Python expression: key in o.
Guido van Rossuma8275371995-07-18 14:07:00 +00001045
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001046 This function always succeeds. */
Victor Stinner2a358f82016-12-06 16:55:39 +01001047PyAPI_FUNC(int) PyMapping_HasKey(PyObject *o, PyObject *key);
Guido van Rossuma8275371995-07-18 14:07:00 +00001048
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001049/* On success, return a list or tuple of the keys in mapping object 'o'.
1050 On failure, return NULL. */
Victor Stinner2a358f82016-12-06 16:55:39 +01001051PyAPI_FUNC(PyObject *) PyMapping_Keys(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +00001052
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001053/* On success, return a list or tuple of the values in mapping object 'o'.
1054 On failure, return NULL. */
Victor Stinner2a358f82016-12-06 16:55:39 +01001055PyAPI_FUNC(PyObject *) PyMapping_Values(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +00001056
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001057/* On success, return a list or tuple of the items in mapping object 'o',
1058 where each item is a tuple containing a key-value pair. On failure, return
1059 NULL. */
Victor Stinner2a358f82016-12-06 16:55:39 +01001060PyAPI_FUNC(PyObject *) PyMapping_Items(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +00001061
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001062/* Return element of o corresponding to the object, key, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +00001063
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001064 This is the equivalent of the Python expression: o[key]. */
Victor Stinner2a358f82016-12-06 16:55:39 +01001065PyAPI_FUNC(PyObject *) PyMapping_GetItemString(PyObject *o,
1066 const char *key);
Guido van Rossuma8275371995-07-18 14:07:00 +00001067
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001068/* Map the object 'key' to the value 'v' in the mapping 'o'.
1069 Returns -1 on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +00001070
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001071 This is the equivalent of the Python statement: o[key]=v. */
Victor Stinner2a358f82016-12-06 16:55:39 +01001072PyAPI_FUNC(int) PyMapping_SetItemString(PyObject *o, const char *key,
1073 PyObject *value);
Guido van Rossuma8275371995-07-18 14:07:00 +00001074
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001075/* isinstance(object, typeorclass) */
Mark Hammond91a681d2002-08-12 07:21:58 +00001076PyAPI_FUNC(int) PyObject_IsInstance(PyObject *object, PyObject *typeorclass);
Guido van Rossum823649d2001-03-21 18:40:58 +00001077
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001078/* issubclass(object, typeorclass) */
Mark Hammond91a681d2002-08-12 07:21:58 +00001079PyAPI_FUNC(int) PyObject_IsSubclass(PyObject *object, PyObject *typeorclass);
Guido van Rossum823649d2001-03-21 18:40:58 +00001080
1081
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00001082#ifndef Py_LIMITED_API
Antoine Pitrouec569b72008-08-26 22:40:48 +00001083PyAPI_FUNC(int) _PyObject_RealIsInstance(PyObject *inst, PyObject *cls);
1084
1085PyAPI_FUNC(int) _PyObject_RealIsSubclass(PyObject *derived, PyObject *cls);
1086
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001087PyAPI_FUNC(char *const *) _PySequence_BytesToCharpArray(PyObject* self);
1088
1089PyAPI_FUNC(void) _Py_FreeCharPArray(char *const array[]);
Antoine Pitrouec569b72008-08-26 22:40:48 +00001090
Antoine Pitrouf68c2a72010-09-01 12:58:21 +00001091/* For internal use by buffer API functions */
1092PyAPI_FUNC(void) _Py_add_one_to_index_F(int nd, Py_ssize_t *index,
1093 const Py_ssize_t *shape);
1094PyAPI_FUNC(void) _Py_add_one_to_index_C(int nd, Py_ssize_t *index,
1095 const Py_ssize_t *shape);
Serhiy Storchaka9fab79b2016-09-11 11:03:14 +03001096#endif /* !Py_LIMITED_API */
Antoine Pitrouf68c2a72010-09-01 12:58:21 +00001097
1098
Guido van Rossum8ca687a1995-09-18 21:20:02 +00001099#ifdef __cplusplus
1100}
1101#endif
Guido van Rossuma8275371995-07-18 14:07:00 +00001102#endif /* Py_ABSTRACTOBJECT_H */