blob: 3ca283aa12a92ee52575dc0fdca30ac88a796779 [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 Stinner2a358f82016-12-06 16:55:39 +0100163/* Convert keyword arguments from the (stack, kwnames) format to a Python
164 dictionary.
Victor Stinner57f91ac2016-09-12 13:37:07 +0200165
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100166 kwnames must only contains str strings, no subclass, and all keys must be
167 unique. kwnames is not checked, usually these checks are done before or
168 later calling _PyStack_AsDict(). For example, _PyArg_ParseStack() raises an
Victor Stinner2a358f82016-12-06 16:55:39 +0100169 error if a key is not a string. */
170PyAPI_FUNC(PyObject *) _PyStack_AsDict(
171 PyObject **values,
172 PyObject *kwnames);
Victor Stinnerae8b69c2016-09-09 14:07:44 -0700173
Victor Stinner2a358f82016-12-06 16:55:39 +0100174/* Convert (args, nargs, kwargs) into a (stack, nargs, kwnames).
Victor Stinnera9efb2f2016-09-09 17:40:22 -0700175
Victor Stinner2a358f82016-12-06 16:55:39 +0100176 Return a new stack which should be released by PyMem_Free(), or return
177 args unchanged if kwargs is NULL or an empty dictionary.
Victor Stinnera9efb2f2016-09-09 17:40:22 -0700178
Victor Stinner2a358f82016-12-06 16:55:39 +0100179 The stack uses borrowed references.
Victor Stinnera9efb2f2016-09-09 17:40:22 -0700180
Victor Stinner2a358f82016-12-06 16:55:39 +0100181 The type of keyword keys is not checked, these checks should be done
182 later (ex: _PyArg_ParseStack). */
183PyAPI_FUNC(PyObject **) _PyStack_UnpackDict(
184 PyObject **args,
185 Py_ssize_t nargs,
186 PyObject *kwargs,
187 PyObject **kwnames,
188 PyObject *func);
Victor Stinnera9efb2f2016-09-09 17:40:22 -0700189
Victor Stinnerbc08ab42016-12-15 12:40:53 +0100190/* Suggested size (number of positional arguments) for arrays of PyObject*
191 allocated on a C stack to avoid allocating memory on the heap memory. Such
192 array is used to pass positional arguments to call functions of the
193 _PyObject_FastCall() family.
194
195 The size is chosen to not abuse the C stack and so limit the risk of stack
196 overflow. The size is also chosen to allow using the small stack for most
197 function calls of the Python standard library. On 64-bit CPU, it allocates
198 40 bytes on the stack. */
199#define _PY_FASTCALL_SMALL_STACK 5
200
Victor Stinner2a358f82016-12-06 16:55:39 +0100201/* Call the callable object 'callable' with the "fast call" calling convention:
202 args is a C array for positional arguments (nargs is the number of
203 positional arguments), kwargs is a dictionary for keyword arguments.
Victor Stinner9be7e7b2016-08-19 16:11:43 +0200204
Victor Stinner2a358f82016-12-06 16:55:39 +0100205 If nargs is equal to zero, args can be NULL. kwargs can be NULL.
206 nargs must be greater or equal to zero.
Victor Stinner9be7e7b2016-08-19 16:11:43 +0200207
Victor Stinner2a358f82016-12-06 16:55:39 +0100208 Return the result on success. Raise an exception on return NULL on
209 error. */
210PyAPI_FUNC(PyObject *) _PyObject_FastCallDict(
211 PyObject *callable,
212 PyObject **args,
213 Py_ssize_t nargs,
214 PyObject *kwargs);
Victor Stinner559bb6a2016-08-22 22:48:54 +0200215
Victor Stinner2a358f82016-12-06 16:55:39 +0100216/* Call the callable object 'callable' with the "fast call" calling convention:
217 args is a C array for positional arguments followed by values of
218 keyword arguments. Keys of keyword arguments are stored as a tuple
219 of strings in kwnames. nargs is the number of positional parameters at
220 the beginning of stack. The size of kwnames gives the number of keyword
221 values in the stack after positional arguments.
Victor Stinnerd8735722016-09-09 12:36:44 -0700222
Victor Stinner2a358f82016-12-06 16:55:39 +0100223 kwnames must only contains str strings, no subclass, and all keys must
224 be unique.
Victor Stinnerd8735722016-09-09 12:36:44 -0700225
Victor Stinner2a358f82016-12-06 16:55:39 +0100226 If nargs is equal to zero and there is no keyword argument (kwnames is
227 NULL or its size is zero), args can be NULL.
Victor Stinner57f91ac2016-09-12 13:37:07 +0200228
Victor Stinner2a358f82016-12-06 16:55:39 +0100229 Return the result on success. Raise an exception and return NULL on
230 error. */
231PyAPI_FUNC(PyObject *) _PyObject_FastCallKeywords(
232 PyObject *callable,
233 PyObject **args,
234 Py_ssize_t nargs,
235 PyObject *kwnames);
Victor Stinnerd8735722016-09-09 12:36:44 -0700236
Victor Stinner559bb6a2016-08-22 22:48:54 +0200237#define _PyObject_FastCall(func, args, nargs) \
238 _PyObject_FastCallDict((func), (args), (nargs), NULL)
239
240#define _PyObject_CallNoArg(func) \
Victor Stinner7bfb42d2016-12-05 17:04:32 +0100241 _PyObject_FastCallDict((func), NULL, 0, NULL)
Victor Stinner9be7e7b2016-08-19 16:11:43 +0200242
Victor Stinner2a358f82016-12-06 16:55:39 +0100243PyAPI_FUNC(PyObject *) _PyObject_Call_Prepend(
244 PyObject *callable,
245 PyObject *obj,
246 PyObject *args,
247 PyObject *kwargs);
Victor Stinner3f1057a2016-08-25 01:04:14 +0200248
Victor Stinner2a358f82016-12-06 16:55:39 +0100249PyAPI_FUNC(PyObject *) _Py_CheckFunctionResult(PyObject *callable,
250 PyObject *result,
251 const char *where);
Victor Stinner9be7e7b2016-08-19 16:11:43 +0200252#endif /* Py_LIMITED_API */
Victor Stinner4a7cc882015-03-06 23:35:27 +0100253
Victor Stinner2d0eb652016-12-06 16:27:24 +0100254
Victor Stinner2a358f82016-12-06 16:55:39 +0100255/* Call a callable Python object 'callable', with arguments given by the
256 tuple 'args'. If no arguments are needed, then 'args' can be *NULL*.
Victor Stinner2d0eb652016-12-06 16:27:24 +0100257
Victor Stinner2a358f82016-12-06 16:55:39 +0100258 Returns the result of the call on success, or *NULL* on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000259
Victor Stinner2a358f82016-12-06 16:55:39 +0100260 This is the equivalent of the Python expression:
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100261 callable(*args). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100262PyAPI_FUNC(PyObject *) PyObject_CallObject(PyObject *callable,
263 PyObject *args);
Guido van Rossuma8275371995-07-18 14:07:00 +0000264
Victor Stinner2a358f82016-12-06 16:55:39 +0100265/* Call a callable Python object, callable, with a variable number of C
266 arguments. The C arguments are described using a mkvalue-style format
267 string.
Victor Stinner2d0eb652016-12-06 16:27:24 +0100268
Victor Stinner2a358f82016-12-06 16:55:39 +0100269 The format may be NULL, indicating that no arguments are provided.
Victor Stinner2d0eb652016-12-06 16:27:24 +0100270
Victor Stinner2a358f82016-12-06 16:55:39 +0100271 Returns the result of the call on success, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000272
Victor Stinner2a358f82016-12-06 16:55:39 +0100273 This is the equivalent of the Python expression:
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100274 callable(arg1, arg2, ...). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100275PyAPI_FUNC(PyObject *) PyObject_CallFunction(PyObject *callable,
276 const char *format, ...);
Guido van Rossuma8275371995-07-18 14:07:00 +0000277
Victor Stinner2a358f82016-12-06 16:55:39 +0100278/* Call the method named 'name' of object 'obj' with a variable number of
279 C arguments. The C arguments are described by a mkvalue format string.
Guido van Rossuma8275371995-07-18 14:07:00 +0000280
Victor Stinner2a358f82016-12-06 16:55:39 +0100281 The format can be NULL, indicating that no arguments are provided.
Victor Stinner2d0eb652016-12-06 16:27:24 +0100282
Victor Stinner2a358f82016-12-06 16:55:39 +0100283 Returns the result of the call on success, or NULL on failure.
284
285 This is the equivalent of the Python expression:
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100286 obj.name(arg1, arg2, ...). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100287PyAPI_FUNC(PyObject *) PyObject_CallMethod(PyObject *obj,
288 const char *name,
289 const char *format, ...);
Guido van Rossuma8275371995-07-18 14:07:00 +0000290
Serhiy Storchaka9fab79b2016-09-11 11:03:14 +0300291#ifndef Py_LIMITED_API
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100292/* Like PyObject_CallMethod(), but expect a _Py_Identifier*
293 as the method name. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100294PyAPI_FUNC(PyObject *) _PyObject_CallMethodId(PyObject *obj,
295 _Py_Identifier *name,
296 const char *format, ...);
Serhiy Storchaka9fab79b2016-09-11 11:03:14 +0300297#endif /* !Py_LIMITED_API */
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200298
Victor Stinner2a358f82016-12-06 16:55:39 +0100299PyAPI_FUNC(PyObject *) _PyObject_CallFunction_SizeT(PyObject *callable,
300 const char *format,
301 ...);
302
303PyAPI_FUNC(PyObject *) _PyObject_CallMethod_SizeT(PyObject *obj,
304 const char *name,
305 const char *format,
306 ...);
307
Serhiy Storchaka9fab79b2016-09-11 11:03:14 +0300308#ifndef Py_LIMITED_API
Victor Stinner2a358f82016-12-06 16:55:39 +0100309PyAPI_FUNC(PyObject *) _PyObject_CallMethodId_SizeT(PyObject *obj,
310 _Py_Identifier *name,
311 const char *format,
312 ...);
Serhiy Storchaka9fab79b2016-09-11 11:03:14 +0300313#endif /* !Py_LIMITED_API */
Guido van Rossuma8275371995-07-18 14:07:00 +0000314
Victor Stinner2a358f82016-12-06 16:55:39 +0100315/* Call a callable Python object 'callable' with a variable number of C
316 arguments. The C arguments are provided as PyObject* values, terminated
317 by a NULL.
Victor Stinner2d0eb652016-12-06 16:27:24 +0100318
Victor Stinner2a358f82016-12-06 16:55:39 +0100319 Returns the result of the call on success, or NULL on failure.
Victor Stinner2d0eb652016-12-06 16:27:24 +0100320
Victor Stinner2a358f82016-12-06 16:55:39 +0100321 This is the equivalent of the Python expression:
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100322 callable(arg1, arg2, ...). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100323PyAPI_FUNC(PyObject *) PyObject_CallFunctionObjArgs(PyObject *callable,
324 ...);
Fred Drakeb421b8c2001-10-26 16:21:32 +0000325
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100326/* Call the method named 'name' of object 'obj' with a variable number of
327 C arguments. The C arguments are provided as PyObject* values, terminated
328 by NULL.
329
330 Returns the result of the call on success, or NULL on failure.
331
332 This is the equivalent of the Python expression: obj.name(*args). */
Guido van Rossuma8275371995-07-18 14:07:00 +0000333
Victor Stinner2a358f82016-12-06 16:55:39 +0100334PyAPI_FUNC(PyObject *) PyObject_CallMethodObjArgs(
335 PyObject *obj,
336 PyObject *name,
337 ...);
338
Victor Stinner2d0eb652016-12-06 16:27:24 +0100339#ifndef Py_LIMITED_API
Victor Stinner2a358f82016-12-06 16:55:39 +0100340PyAPI_FUNC(PyObject *) _PyObject_CallMethodIdObjArgs(
341 PyObject *obj,
342 struct _Py_Identifier *name,
343 ...);
Victor Stinner2d0eb652016-12-06 16:27:24 +0100344#endif /* !Py_LIMITED_API */
345
346
Victor Stinner2a358f82016-12-06 16:55:39 +0100347/* Implemented elsewhere:
Guido van Rossuma8275371995-07-18 14:07:00 +0000348
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100349 long PyObject_Hash(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000350
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100351 Compute and return the hash, hash_value, of an object, o. On
352 failure, return -1.
353
354 This is the equivalent of the Python expression: hash(o). */
Guido van Rossuma8275371995-07-18 14:07:00 +0000355
356
Victor Stinner2a358f82016-12-06 16:55:39 +0100357/* Implemented elsewhere:
Guido van Rossuma8275371995-07-18 14:07:00 +0000358
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100359 int PyObject_IsTrue(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000360
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100361 Returns 1 if the object, o, is considered to be true, 0 if o is
362 considered to be false and -1 on failure.
363
364 This is equivalent to the Python expression: not not o. */
365
Guido van Rossuma8275371995-07-18 14:07:00 +0000366
Victor Stinner2a358f82016-12-06 16:55:39 +0100367/* Implemented elsewhere:
Guido van Rossumc3d3f961998-04-09 17:53:59 +0000368
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100369 int PyObject_Not(PyObject *o);
Guido van Rossumc3d3f961998-04-09 17:53:59 +0000370
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100371 Returns 0 if the object, o, is considered to be true, 1 if o is
372 considered to be false and -1 on failure.
Guido van Rossumc3d3f961998-04-09 17:53:59 +0000373
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100374 This is equivalent to the Python expression: not o. */
375
376
377/* Get the type of an object.
378
379 On success, returns a type object corresponding to the object type of object
380 'o'. On failure, returns NULL.
381
382 This is equivalent to the Python expression: type(o) */
Victor Stinner2a358f82016-12-06 16:55:39 +0100383PyAPI_FUNC(PyObject *) PyObject_Type(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000384
Guido van Rossuma8275371995-07-18 14:07:00 +0000385
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100386/* Return the size of object 'o'. If the object 'o' provides both sequence and
387 mapping protocols, the sequence size is returned.
388
389 On error, -1 is returned.
390
391 This is the equivalent to the Python expression: len(o) */
Victor Stinner2a358f82016-12-06 16:55:39 +0100392PyAPI_FUNC(Py_ssize_t) PyObject_Size(PyObject *o);
Jeremy Hylton6253f832000-07-12 12:56:19 +0000393
Guido van Rossuma8275371995-07-18 14:07:00 +0000394
Victor Stinner2a358f82016-12-06 16:55:39 +0100395/* For DLL compatibility */
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +0000396#undef PyObject_Length
Victor Stinner2a358f82016-12-06 16:55:39 +0100397PyAPI_FUNC(Py_ssize_t) PyObject_Length(PyObject *o);
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +0000398#define PyObject_Length PyObject_Size
399
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100400
Armin Ronacher74b38b12012-10-07 10:29:32 +0200401#ifndef Py_LIMITED_API
Victor Stinner2a358f82016-12-06 16:55:39 +0100402PyAPI_FUNC(int) _PyObject_HasLen(PyObject *o);
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100403
404/* Guess the size of object 'o' using len(o) or o.__length_hint__().
405 If neither of those return a non-negative value, then return the default
406 value. If one of the calls fails, this function returns -1. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100407PyAPI_FUNC(Py_ssize_t) PyObject_LengthHint(PyObject *o, Py_ssize_t);
Armin Ronacher74b38b12012-10-07 10:29:32 +0200408#endif
Raymond Hettinger6b27cda2005-09-24 21:23:05 +0000409
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100410/* Return element of 'o' corresponding to the object 'key'. Return NULL
411 on failure.
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +0000412
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100413 This is the equivalent of the Python expression: o[key] */
Victor Stinner2a358f82016-12-06 16:55:39 +0100414PyAPI_FUNC(PyObject *) PyObject_GetItem(PyObject *o, PyObject *key);
Guido van Rossuma8275371995-07-18 14:07:00 +0000415
Guido van Rossuma8275371995-07-18 14:07:00 +0000416
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100417/* Map the object 'key' to the value 'v' into 'o'.
418
419 Raise an exception and return -1 on failure; return 0 on success.
420
421 This is the equivalent of the Python statement: o[key]=v. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100422PyAPI_FUNC(int) PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v);
Guido van Rossuma8275371995-07-18 14:07:00 +0000423
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100424/* Remove the mapping for object, key, from the object 'o'.
425 Returns -1 on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000426
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100427 This is equivalent to the Python statement: del o[key]. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100428PyAPI_FUNC(int) PyObject_DelItemString(PyObject *o, const char *key);
Martin v. Löwisb0d71d02002-01-05 10:50:30 +0000429
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100430/* Delete the mapping for key from object 'o'. Returns -1 on failure.
Martin v. Löwisb0d71d02002-01-05 10:50:30 +0000431
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100432 This is the equivalent of the Python statement: del o[key]. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100433PyAPI_FUNC(int) PyObject_DelItem(PyObject *o, PyObject *key);
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000434
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000435
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100436/* === Old Buffer API ============================================ */
437
438/* FIXME: usage of these should all be replaced in Python itself
Victor Stinner2a358f82016-12-06 16:55:39 +0100439 but for backwards compatibility we will implement them.
440 Their usage without a corresponding "unlock" mechanism
441 may create issues (but they would already be there). */
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000442
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100443/* Takes an arbitrary object which must support the (character, single segment)
444 buffer interface and returns a pointer to a read-only memory location
445 useable as character based input for subsequent processing.
446
447 Return 0 on success. buffer and buffer_len are only set in case no error
448 occurs. Otherwise, -1 is returned and an exception set. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100449PyAPI_FUNC(int) PyObject_AsCharBuffer(PyObject *obj,
450 const char **buffer,
451 Py_ssize_t *buffer_len)
452 Py_DEPRECATED(3.0);
Guido van Rossumfd9eed32000-03-10 22:35:06 +0000453
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100454/* Checks whether an arbitrary object supports the (character, single segment)
455 buffer interface.
Guido van Rossumfd9eed32000-03-10 22:35:06 +0000456
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100457 Returns 1 on success, 0 on failure. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100458PyAPI_FUNC(int) PyObject_CheckReadBuffer(PyObject *obj)
459 Py_DEPRECATED(3.0);
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000460
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100461/* Same as PyObject_AsCharBuffer() except that this API expects (readable,
462 single segment) buffer interface and returns a pointer to a read-only memory
463 location which can contain arbitrary data.
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000464
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100465 0 is returned on success. buffer and buffer_len are only set in case no
466 error occurs. Otherwise, -1 is returned and an exception set. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100467PyAPI_FUNC(int) PyObject_AsReadBuffer(PyObject *obj,
468 const void **buffer,
469 Py_ssize_t *buffer_len)
470 Py_DEPRECATED(3.0);
Guido van Rossumfd9eed32000-03-10 22:35:06 +0000471
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100472/* Takes an arbitrary object which must support the (writable, single segment)
473 buffer interface and returns a pointer to a writable memory location in
474 buffer of size 'buffer_len'.
Guido van Rossumfd9eed32000-03-10 22:35:06 +0000475
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100476 Return 0 on success. buffer and buffer_len are only set in case no error
477 occurs. Otherwise, -1 is returned and an exception set. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100478PyAPI_FUNC(int) PyObject_AsWriteBuffer(PyObject *obj,
479 void **buffer,
480 Py_ssize_t *buffer_len)
481 Py_DEPRECATED(3.0);
Guido van Rossumfd9eed32000-03-10 22:35:06 +0000482
Guido van Rossumfd9eed32000-03-10 22:35:06 +0000483
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100484/* === New Buffer API ============================================ */
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000485
Martin v. Löwisc83bc3c2011-01-06 19:15:47 +0000486#ifndef Py_LIMITED_API
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100487
488/* Return 1 if the getbuffer function is available, otherwise return 0. */
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000489#define PyObject_CheckBuffer(obj) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000490 (((obj)->ob_type->tp_as_buffer != NULL) && \
491 ((obj)->ob_type->tp_as_buffer->bf_getbuffer != NULL))
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000492
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100493/* This is a C-API version of the getbuffer function call. It checks
494 to make sure object has the required function pointer and issues the
495 call.
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000496
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100497 Returns -1 and raises an error on failure and returns 0 on success. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100498PyAPI_FUNC(int) PyObject_GetBuffer(PyObject *obj, Py_buffer *view,
499 int flags);
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000500
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100501/* Get the memory area pointed to by the indices for the buffer given.
502 Note that view->ndim is the assumed size of indices. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100503PyAPI_FUNC(void *) PyBuffer_GetPointer(Py_buffer *view, Py_ssize_t *indices);
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000504
Victor Stinner2a358f82016-12-06 16:55:39 +0100505/* Return the implied itemsize of the data-format area from a
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100506 struct-style description. */
507PyAPI_FUNC(int) PyBuffer_SizeFromFormat(const char *);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000508
Victor Stinner2a358f82016-12-06 16:55:39 +0100509/* Implementation in memoryobject.c */
510PyAPI_FUNC(int) PyBuffer_ToContiguous(void *buf, Py_buffer *view,
511 Py_ssize_t len, char order);
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000512
Victor Stinner2a358f82016-12-06 16:55:39 +0100513PyAPI_FUNC(int) PyBuffer_FromContiguous(Py_buffer *view, void *buf,
514 Py_ssize_t len, char order);
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000515
Victor Stinner2a358f82016-12-06 16:55:39 +0100516/* Copy len bytes of data from the contiguous chunk of memory
517 pointed to by buf into the buffer exported by obj. Return
518 0 on success and return -1 and raise a PyBuffer_Error on
519 error (i.e. the object does not have a buffer interface or
520 it is not working).
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000521
Victor Stinner2a358f82016-12-06 16:55:39 +0100522 If fort is 'F', then if the object is multi-dimensional,
523 then the data will be copied into the array in
524 Fortran-style (first dimension varies the fastest). If
525 fort is 'C', then the data will be copied into the array
526 in C-style (last dimension varies the fastest). If fort
527 is 'A', then it does not matter and the copy will be made
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100528 in whatever way is more efficient. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100529PyAPI_FUNC(int) PyObject_CopyData(PyObject *dest, PyObject *src);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000530
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100531/* Copy the data from the src buffer to the buffer of destination. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100532PyAPI_FUNC(int) PyBuffer_IsContiguous(const Py_buffer *view, char fort);
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000533
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100534/*Fill the strides array with byte-strides of a contiguous
535 (Fortran-style if fort is 'F' or C-style otherwise)
536 array of the given shape with the given number of bytes
537 per element. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100538PyAPI_FUNC(void) PyBuffer_FillContiguousStrides(int ndims,
539 Py_ssize_t *shape,
540 Py_ssize_t *strides,
541 int itemsize,
542 char fort);
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000543
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100544/* Fills in a buffer-info structure correctly for an exporter
545 that can only share a contiguous chunk of memory of
546 "unsigned bytes" of the given length.
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000547
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100548 Returns 0 on success and -1 (with raising an error) on error. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100549PyAPI_FUNC(int) PyBuffer_FillInfo(Py_buffer *view, PyObject *o, void *buf,
550 Py_ssize_t len, int readonly,
551 int flags);
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000552
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100553/* Releases a Py_buffer obtained from getbuffer ParseTuple's "s*". */
Victor Stinner2a358f82016-12-06 16:55:39 +0100554PyAPI_FUNC(void) PyBuffer_Release(Py_buffer *view);
Martin v. Löwis423be952008-08-13 15:53:07 +0000555
Martin v. Löwisc83bc3c2011-01-06 19:15:47 +0000556#endif /* Py_LIMITED_API */
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000557
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100558/* Takes an arbitrary object and returns the result of calling
559 obj.__format__(format_spec). */
560PyAPI_FUNC(PyObject *) PyObject_Format(PyObject *obj,
Victor Stinner2a358f82016-12-06 16:55:39 +0100561 PyObject *format_spec);
Eric Smith8fd3eba2008-02-17 19:48:00 +0000562
Guido van Rossum213c7a62001-04-23 14:08:49 +0000563
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100564/* ==== Iterators ================================================ */
565
566/* Takes an object and returns an iterator for it.
567 This is typically a new iterator but if the argument is an iterator, this
568 returns itself. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100569PyAPI_FUNC(PyObject *) PyObject_GetIter(PyObject *);
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000570
Guido van Rossum213c7a62001-04-23 14:08:49 +0000571#define PyIter_Check(obj) \
Amaury Forgeot d'Arcf343e012009-01-12 23:58:21 +0000572 ((obj)->ob_type->tp_iternext != NULL && \
573 (obj)->ob_type->tp_iternext != &_PyObject_NextNotImplemented)
Guido van Rossum213c7a62001-04-23 14:08:49 +0000574
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100575/* Takes an iterator object and calls its tp_iternext slot,
576 returning the next value.
577
578 If the iterator is exhausted, this returns NULL without setting an
579 exception.
580
581 NULL with an exception means an error occurred. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100582PyAPI_FUNC(PyObject *) PyIter_Next(PyObject *);
Guido van Rossum213c7a62001-04-23 14:08:49 +0000583
Guido van Rossuma8275371995-07-18 14:07:00 +0000584
Victor Stinner2a358f82016-12-06 16:55:39 +0100585/* === Number Protocol ================================================== */
Guido van Rossuma8275371995-07-18 14:07:00 +0000586
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100587/* Returns 1 if the object 'o' provides numeric protocols, and 0 otherwise.
588
589 This function always succeeds. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100590PyAPI_FUNC(int) PyNumber_Check(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000591
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100592/* Returns the result of adding o1 and o2, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000593
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100594 This is the equivalent of the Python expression: o1 + o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100595PyAPI_FUNC(PyObject *) PyNumber_Add(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000596
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100597/* Returns the result of subtracting o2 from o1, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000598
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100599 This is the equivalent of the Python expression: o1 - o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100600PyAPI_FUNC(PyObject *) PyNumber_Subtract(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000601
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100602/* Returns the result of multiplying o1 and o2, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000603
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100604 This is the equivalent of the Python expression: o1 * o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100605PyAPI_FUNC(PyObject *) PyNumber_Multiply(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000606
Serhiy Storchaka34d0ac82016-12-27 14:57:39 +0200607#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100608/* This is the equivalent of the Python expression: o1 @ o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100609PyAPI_FUNC(PyObject *) PyNumber_MatrixMultiply(PyObject *o1, PyObject *o2);
Serhiy Storchaka34d0ac82016-12-27 14:57:39 +0200610#endif
Benjamin Petersond51374e2014-04-09 23:55:56 -0400611
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100612/* Returns the result of dividing o1 by o2 giving an integral result,
613 or NULL on failure.
Guido van Rossum4668b002001-08-08 05:00:18 +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_FloorDivide(PyObject *o1, PyObject *o2);
Guido van Rossum4668b002001-08-08 05:00:18 +0000617
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100618/* Returns the result of dividing o1 by o2 giving a float result, or NULL on
619 failure.
Guido van Rossum4668b002001-08-08 05:00:18 +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_TrueDivide(PyObject *o1, PyObject *o2);
Guido van Rossum4668b002001-08-08 05:00:18 +0000623
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100624/* Returns the remainder of dividing o1 by o2, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000625
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100626 This is the equivalent of the Python expression: o1 % o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100627PyAPI_FUNC(PyObject *) PyNumber_Remainder(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000628
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100629/* See the built-in function divmod.
Guido van Rossuma8275371995-07-18 14:07:00 +0000630
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100631 Returns NULL on failure.
632
633 This is the equivalent of the Python expression: divmod(o1, o2). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100634PyAPI_FUNC(PyObject *) PyNumber_Divmod(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000635
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100636/* See the built-in function pow. Returns NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000637
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100638 This is the equivalent of the Python expression: pow(o1, o2, o3),
639 where o3 is optional. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100640PyAPI_FUNC(PyObject *) PyNumber_Power(PyObject *o1, PyObject *o2,
641 PyObject *o3);
Guido van Rossuma8275371995-07-18 14:07:00 +0000642
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100643/* Returns the negation of o on success, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000644
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100645 This is the equivalent of the Python expression: -o. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100646PyAPI_FUNC(PyObject *) PyNumber_Negative(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000647
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100648/* Returns the positive of o on success, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000649
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100650 This is the equivalent of the Python expression: +o. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100651PyAPI_FUNC(PyObject *) PyNumber_Positive(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000652
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100653/* Returns the absolute value of 'o', or 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: abs(o). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100656PyAPI_FUNC(PyObject *) PyNumber_Absolute(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000657
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100658/* Returns the bitwise negation of 'o' on success, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000659
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100660 This is the equivalent of the Python expression: ~o. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100661PyAPI_FUNC(PyObject *) PyNumber_Invert(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000662
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100663/* Returns the result of left shifting o1 by o2 on success, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000664
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100665 This is the equivalent of the Python expression: o1 << o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100666PyAPI_FUNC(PyObject *) PyNumber_Lshift(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000667
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100668/* Returns the result of right shifting o1 by o2 on success, or NULL on
669 failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000670
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100671 This is the equivalent of the Python expression: o1 >> o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100672PyAPI_FUNC(PyObject *) PyNumber_Rshift(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000673
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100674/* Returns the result of bitwise and of o1 and o2 on success, or NULL on
675 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: o1 & o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100678PyAPI_FUNC(PyObject *) PyNumber_And(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000679
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100680/* Returns the bitwise exclusive or of 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_Xor(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 bitwise or on o1 and 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_Or(PyObject *o1, PyObject *o2);
690
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100691#define PyIndex_Check(obj) \
692 ((obj)->ob_type->tp_as_number != NULL && \
693 (obj)->ob_type->tp_as_number->nb_index != NULL)
Guido van Rossuma8275371995-07-18 14:07:00 +0000694
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100695/* Returns the object 'o' converted to a Python int, or NULL with an exception
696 raised on failure. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100697PyAPI_FUNC(PyObject *) PyNumber_Index(PyObject *o);
Guido van Rossum38fff8c2006-03-07 18:50:55 +0000698
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100699/* Returns the object 'o' converted to Py_ssize_t by going through
700 PyNumber_Index() first.
Guido van Rossum38fff8c2006-03-07 18:50:55 +0000701
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100702 If an overflow error occurs while converting the int to Py_ssize_t, then the
703 second argument 'exc' is the error-type to return. If it is NULL, then the
704 overflow error is cleared and the value is clipped. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100705PyAPI_FUNC(Py_ssize_t) PyNumber_AsSsize_t(PyObject *o, PyObject *exc);
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000706
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100707/* Returns the object 'o' converted to an integer object on success, or NULL
708 on failure.
Guido van Rossum38fff8c2006-03-07 18:50:55 +0000709
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100710 This is the equivalent of the Python expression: int(o). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100711PyAPI_FUNC(PyObject *) PyNumber_Long(PyObject *o);
Mark Dickinsond7467682009-01-10 22:14:33 +0000712
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100713/* Returns the object 'o' converted to a float object on success, or NULL
714 on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000715
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100716 This is the equivalent of the Python expression: float(o). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100717PyAPI_FUNC(PyObject *) PyNumber_Float(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000718
Victor Stinner2a358f82016-12-06 16:55:39 +0100719
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100720/* --- In-place variants of (some of) the above number protocol functions -- */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000721
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100722/* Returns the result of adding o2 to o1, possibly in-place, or NULL
723 on failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000724
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100725 This is the equivalent of the Python expression: o1 += o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100726PyAPI_FUNC(PyObject *) PyNumber_InPlaceAdd(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000727
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100728/* Returns the result of subtracting o2 from o1, possibly in-place or
729 NULL on failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000730
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100731 This is the equivalent of the Python expression: o1 -= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100732PyAPI_FUNC(PyObject *) PyNumber_InPlaceSubtract(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000733
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100734/* Returns the result of multiplying o1 by o2, possibly in-place, or NULL on
735 failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000736
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100737 This is the equivalent of the Python expression: o1 *= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100738PyAPI_FUNC(PyObject *) PyNumber_InPlaceMultiply(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000739
Serhiy Storchaka34d0ac82016-12-27 14:57:39 +0200740#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100741/* This is the equivalent of the Python expression: o1 @= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100742PyAPI_FUNC(PyObject *) PyNumber_InPlaceMatrixMultiply(PyObject *o1, PyObject *o2);
Serhiy Storchaka34d0ac82016-12-27 14:57:39 +0200743#endif
Benjamin Petersond51374e2014-04-09 23:55:56 -0400744
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100745/* Returns the result of dividing o1 by o2 giving an integral result, possibly
746 in-place, or NULL on failure.
Benjamin Petersond51374e2014-04-09 23:55:56 -0400747
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_InPlaceFloorDivide(PyObject *o1,
750 PyObject *o2);
Guido van Rossum4668b002001-08-08 05:00:18 +0000751
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100752/* Returns the result of dividing o1 by o2 giving a float result, possibly
753 in-place, or null on failure.
Guido van Rossum4668b002001-08-08 05:00:18 +0000754
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100755 This is the equivalent of the Python expression: o1 /= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100756PyAPI_FUNC(PyObject *) PyNumber_InPlaceTrueDivide(PyObject *o1,
757 PyObject *o2);
Guido van Rossum4668b002001-08-08 05:00:18 +0000758
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100759/* Returns the remainder of dividing o1 by o2, possibly in-place, or NULL on
760 failure.
Guido van Rossum4668b002001-08-08 05:00:18 +0000761
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100762 This is the equivalent of the Python expression: o1 %= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100763PyAPI_FUNC(PyObject *) PyNumber_InPlaceRemainder(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000764
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100765/* Returns the result of raising o1 to the power of o2, possibly in-place,
766 or NULL on failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000767
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100768 This is the equivalent of the Python expression: o1 **= o2,
769 or o1 = pow(o1, o2, o3) if o3 is present. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100770PyAPI_FUNC(PyObject *) PyNumber_InPlacePower(PyObject *o1, PyObject *o2,
771 PyObject *o3);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000772
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100773/* Returns the result of left shifting o1 by o2, possibly in-place, or NULL
774 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 <<= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100777PyAPI_FUNC(PyObject *) PyNumber_InPlaceLshift(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000778
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100779/* Returns the result of right shifting o1 by o2, possibly in-place or NULL
780 on failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000781
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100782 This is the equivalent of the Python expression: o1 >>= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100783PyAPI_FUNC(PyObject *) PyNumber_InPlaceRshift(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000784
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100785/* Returns the result of bitwise and of o1 and o2, possibly in-place, or NULL
786 on failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000787
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100788 This is the equivalent of the Python expression: o1 &= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100789PyAPI_FUNC(PyObject *) PyNumber_InPlaceAnd(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000790
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100791/* Returns the bitwise exclusive or of o1 by o2, possibly in-place, or NULL
792 on failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000793
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100794 This is the equivalent of the Python expression: o1 ^= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100795PyAPI_FUNC(PyObject *) PyNumber_InPlaceXor(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000796
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100797/* Returns the result of bitwise or of o1 and o2, possibly in-place,
798 or NULL on failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000799
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100800 This is the equivalent of the Python expression: o1 |= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100801PyAPI_FUNC(PyObject *) PyNumber_InPlaceOr(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000802
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100803/* Returns the integer n converted to a string with a base, with a base
804 marker of 0b, 0o or 0x prefixed if applicable.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000805
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100806 If n is not an int object, it is converted with PyNumber_Index first. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100807PyAPI_FUNC(PyObject *) PyNumber_ToBase(PyObject *n, int base);
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000808
Guido van Rossuma8275371995-07-18 14:07:00 +0000809
Victor Stinner2a358f82016-12-06 16:55:39 +0100810/* === Sequence protocol ================================================ */
Guido van Rossuma8275371995-07-18 14:07:00 +0000811
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100812/* Return 1 if the object provides sequence protocol, and zero
813 otherwise.
814
815 This function always succeeds. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100816PyAPI_FUNC(int) PySequence_Check(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000817
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100818/* Return the size of sequence object o, or -1 on failure. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100819PyAPI_FUNC(Py_ssize_t) PySequence_Size(PyObject *o);
Jeremy Hylton6253f832000-07-12 12:56:19 +0000820
Victor Stinner2a358f82016-12-06 16:55:39 +0100821/* For DLL compatibility */
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +0000822#undef PySequence_Length
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100823PyAPI_FUNC(Py_ssize_t) PySequence_Length(PyObject *o);
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +0000824#define PySequence_Length PySequence_Size
825
826
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100827/* Return the concatenation of o1 and o2 on success, and NULL on failure.
828
829 This is the equivalent of the Python expression: o1 + o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100830PyAPI_FUNC(PyObject *) PySequence_Concat(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000831
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100832/* Return the result of repeating sequence object 'o' 'count' times,
833 or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000834
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100835 This is the equivalent of the Python expression: o * count. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100836PyAPI_FUNC(PyObject *) PySequence_Repeat(PyObject *o, Py_ssize_t count);
Guido van Rossuma8275371995-07-18 14:07:00 +0000837
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100838/* Return the ith element of o, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000839
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100840 This is the equivalent of the Python expression: o[i]. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100841PyAPI_FUNC(PyObject *) PySequence_GetItem(PyObject *o, Py_ssize_t i);
Guido van Rossuma8275371995-07-18 14:07:00 +0000842
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100843/* Return the slice of sequence object o between i1 and i2, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000844
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100845 This is the equivalent of the Python expression: o[i1:i2]. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100846PyAPI_FUNC(PyObject *) PySequence_GetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000847
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100848/* Assign object 'v' to the ith element of the sequence 'o'. Raise an exception
849 and return -1 on failure; return 0 on success.
Guido van Rossuma8275371995-07-18 14:07:00 +0000850
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100851 This is the equivalent of the Python statement o[i] = v. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100852PyAPI_FUNC(int) PySequence_SetItem(PyObject *o, Py_ssize_t i, PyObject *v);
Guido van Rossuma8275371995-07-18 14:07:00 +0000853
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100854/* Delete the 'i'-th element of the sequence 'v'. Returns -1 on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000855
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100856 This is the equivalent of the Python statement: del o[i]. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100857PyAPI_FUNC(int) PySequence_DelItem(PyObject *o, Py_ssize_t i);
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000858
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100859/* Assign the sequence object 'v' to the slice in sequence object 'o',
860 from 'i1' to 'i2'. Returns -1 on failure.
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000861
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100862 This is the equivalent of the Python statement: o[i1:i2] = v. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100863PyAPI_FUNC(int) PySequence_SetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2,
864 PyObject *v);
Guido van Rossuma8275371995-07-18 14:07:00 +0000865
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100866/* Delete the slice in sequence object 'o' from 'i1' to 'i2'.
867 Returns -1 on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000868
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100869 This is the equivalent of the Python statement: del o[i1:i2]. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100870PyAPI_FUNC(int) PySequence_DelSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2);
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000871
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100872/* Returns the sequence 'o' as a tuple on success, and NULL on failure.
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000873
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100874 This is equivalent to the Python expression: tuple(o). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100875PyAPI_FUNC(PyObject *) PySequence_Tuple(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000876
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100877/* Returns the sequence 'o' as a list on success, and NULL on failure.
878 This is equivalent to the Python expression: list(o) */
Victor Stinner2a358f82016-12-06 16:55:39 +0100879PyAPI_FUNC(PyObject *) PySequence_List(PyObject *o);
Guido van Rossumf39fc431997-03-04 18:31:47 +0000880
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100881/* Return the sequence 'o' as a list, unless it's already a tuple or list.
882
883 Use PySequence_Fast_GET_ITEM to access the members of this list, and
884 PySequence_Fast_GET_SIZE to get its length.
885
886 Returns NULL on failure. If the object does not support iteration, raises a
887 TypeError exception with 'm' as the message text. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100888PyAPI_FUNC(PyObject *) PySequence_Fast(PyObject *o, const char* m);
Andrew M. Kuchling74042d62000-06-18 18:43:14 +0000889
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100890/* Return the size of the sequence 'o', assuming that 'o' was returned by
891 PySequence_Fast and is not NULL. */
Tim Peters1fc240e2001-10-26 05:06:50 +0000892#define PySequence_Fast_GET_SIZE(o) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000893 (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
Tim Peters1fc240e2001-10-26 05:06:50 +0000894
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100895/* Return the 'i'-th element of the sequence 'o', assuming that o was returned
896 by PySequence_Fast, and that i is within bounds. */
Andrew M. Kuchling74042d62000-06-18 18:43:14 +0000897#define PySequence_Fast_GET_ITEM(o, i)\
898 (PyList_Check(o) ? PyList_GET_ITEM(o, i) : PyTuple_GET_ITEM(o, i))
Andrew M. Kuchling74042d62000-06-18 18:43:14 +0000899
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100900/* Assume tp_as_sequence and sq_item exist and that 'i' does not
901 need to be corrected for a negative index. */
Martin v. Löwis01f94bd2002-05-08 08:44:21 +0000902#define PySequence_ITEM(o, i)\
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000903 ( Py_TYPE(o)->tp_as_sequence->sq_item(o, i) )
Martin v. Löwis01f94bd2002-05-08 08:44:21 +0000904
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100905/* Return a pointer to the underlying item array for
906 an object retured by PySequence_Fast */
Raymond Hettinger42bec932004-03-12 16:38:17 +0000907#define PySequence_Fast_ITEMS(sf) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000908 (PyList_Check(sf) ? ((PyListObject *)(sf))->ob_item \
909 : ((PyTupleObject *)(sf))->ob_item)
Raymond Hettingerc1e4f9d2004-03-12 08:04:00 +0000910
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100911/* Return the number of occurrences on value on 'o', that is, return
912 the number of keys for which o[key] == value.
913
914 On failure, return -1. This is equivalent to the Python expression:
915 o.count(value). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100916PyAPI_FUNC(Py_ssize_t) PySequence_Count(PyObject *o, PyObject *value);
Guido van Rossuma8275371995-07-18 14:07:00 +0000917
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100918/* Return 1 if 'ob' is in the sequence 'seq'; 0 if 'ob' is not in the sequence
919 'seq'; -1 on error.
Guido van Rossuma8275371995-07-18 14:07:00 +0000920
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100921 Use __contains__ if possible, else _PySequence_IterSearch(). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100922PyAPI_FUNC(int) PySequence_Contains(PyObject *seq, PyObject *ob);
Tim Peterscb8d3682001-05-05 21:05:01 +0000923
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000924#ifndef Py_LIMITED_API
Tim Peters16a77ad2001-09-08 04:00:12 +0000925#define PY_ITERSEARCH_COUNT 1
926#define PY_ITERSEARCH_INDEX 2
927#define PY_ITERSEARCH_CONTAINS 3
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100928
929/* Iterate over seq.
930
931 Result depends on the operation:
932
933 PY_ITERSEARCH_COUNT: return # of times obj appears in seq; -1 if
934 error.
935 PY_ITERSEARCH_INDEX: return 0-based index of first occurrence of
936 obj in seq; set ValueError and return -1 if none found;
937 also return -1 on error.
938 PY_ITERSEARCH_CONTAINS: return 1 if obj in seq, else 0; -1 on
939 error. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100940PyAPI_FUNC(Py_ssize_t) _PySequence_IterSearch(PyObject *seq,
941 PyObject *obj, int operation);
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000942#endif
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100943
Guido van Rossum83684531999-03-17 18:44:39 +0000944
945/* For DLL-level backwards compatibility */
946#undef PySequence_In
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100947/* Determine if the sequence 'o' contains 'value'. If an item in 'o' is equal
948 to 'value', return 1, otherwise return 0. On error, return -1.
949
950 This is equivalent to the Python expression: value in o. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100951PyAPI_FUNC(int) PySequence_In(PyObject *o, PyObject *value);
Guido van Rossum83684531999-03-17 18:44:39 +0000952
953/* For source-level backwards compatibility */
Guido van Rossumf1536db1998-08-23 22:06:59 +0000954#define PySequence_In PySequence_Contains
Guido van Rossuma8275371995-07-18 14:07:00 +0000955
Guido van Rossuma8275371995-07-18 14:07:00 +0000956
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100957/* Return the first index for which o[i] == value.
958 On error, return -1.
959
960 This is equivalent to the Python expression: o.index(value). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100961PyAPI_FUNC(Py_ssize_t) PySequence_Index(PyObject *o, PyObject *value);
Guido van Rossuma8275371995-07-18 14:07:00 +0000962
Victor Stinner2a358f82016-12-06 16:55:39 +0100963
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100964/* --- In-place versions of some of the above Sequence functions --- */
Guido van Rossuma8275371995-07-18 14:07:00 +0000965
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100966/* Append sequence 'o2' to sequence 'o1', in-place when possible. Return the
967 resulting object, which could be 'o1', or NULL on failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000968
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100969 This is the equivalent of the Python expression: o1 += o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100970PyAPI_FUNC(PyObject *) PySequence_InPlaceConcat(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000971
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100972/* Repeat sequence 'o' by 'count', in-place when possible. Return the resulting
973 object, which could be 'o', or NULL on failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000974
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100975 This is the equivalent of the Python expression: o1 *= count. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100976PyAPI_FUNC(PyObject *) PySequence_InPlaceRepeat(PyObject *o, Py_ssize_t count);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000977
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000978
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100979/* === Mapping protocol ================================================= */
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000980
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100981/* Return 1 if the object provides mapping protocol, and 0 otherwise.
Guido van Rossuma8275371995-07-18 14:07:00 +0000982
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100983 This function always succeeds. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100984PyAPI_FUNC(int) PyMapping_Check(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000985
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100986/* Returns the number of keys in mapping object 'o' on success, and -1 on
987 failure. For objects that do not provide sequence protocol, this is
988 equivalent to the Python expression: len(o). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100989PyAPI_FUNC(Py_ssize_t) PyMapping_Size(PyObject *o);
Jeremy Hylton6253f832000-07-12 12:56:19 +0000990
Victor Stinner2a358f82016-12-06 16:55:39 +0100991/* For DLL compatibility */
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +0000992#undef PyMapping_Length
Victor Stinner2a358f82016-12-06 16:55:39 +0100993PyAPI_FUNC(Py_ssize_t) PyMapping_Length(PyObject *o);
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +0000994#define PyMapping_Length PyMapping_Size
995
996
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100997/* Implemented as a macro:
Guido van Rossuma25e5e91996-09-06 13:48:38 +0000998
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100999 int PyMapping_DelItemString(PyObject *o, const char *key);
Guido van Rossuma8275371995-07-18 14:07:00 +00001000
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001001 Remove the mapping for object 'key' from the mapping 'o'. Returns -1 on
1002 failure.
1003
1004 This is equivalent to the Python statement: del o[key]. */
Jeremy Hylton7c7ee5f2001-11-28 16:20:07 +00001005#define PyMapping_DelItemString(O,K) PyObject_DelItemString((O),(K))
Guido van Rossuma25e5e91996-09-06 13:48:38 +00001006
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001007/* Implemented as a macro:
Guido van Rossuma8275371995-07-18 14:07:00 +00001008
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001009 int PyMapping_DelItem(PyObject *o, PyObject *key);
Guido van Rossuma8275371995-07-18 14:07:00 +00001010
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001011 Remove the mapping for object 'key' from the mapping object 'o'.
1012 Returns -1 on failure.
1013
1014 This is equivalent to the Python statement: del o[key]. */
Jeremy Hylton7c7ee5f2001-11-28 16:20:07 +00001015#define PyMapping_DelItem(O,K) PyObject_DelItem((O),(K))
Guido van Rossuma8275371995-07-18 14:07:00 +00001016
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001017/* On success, return 1 if the mapping object 'o' has the key 'key',
1018 and 0 otherwise.
1019
1020 This is equivalent to the Python expression: key in o.
1021
1022 This function always succeeds. */
Victor Stinner2a358f82016-12-06 16:55:39 +01001023PyAPI_FUNC(int) PyMapping_HasKeyString(PyObject *o, const char *key);
Guido van Rossuma8275371995-07-18 14:07:00 +00001024
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001025/* Return 1 if the mapping object has the key 'key', and 0 otherwise.
Guido van Rossuma8275371995-07-18 14:07:00 +00001026
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001027 This is equivalent to the Python expression: key in o.
Guido van Rossuma8275371995-07-18 14:07:00 +00001028
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001029 This function always succeeds. */
Victor Stinner2a358f82016-12-06 16:55:39 +01001030PyAPI_FUNC(int) PyMapping_HasKey(PyObject *o, PyObject *key);
Guido van Rossuma8275371995-07-18 14:07:00 +00001031
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001032/* On success, return a list or tuple of the keys in mapping object 'o'.
1033 On failure, return NULL. */
Victor Stinner2a358f82016-12-06 16:55:39 +01001034PyAPI_FUNC(PyObject *) PyMapping_Keys(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +00001035
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001036/* On success, return a list or tuple of the values in mapping object 'o'.
1037 On failure, return NULL. */
Victor Stinner2a358f82016-12-06 16:55:39 +01001038PyAPI_FUNC(PyObject *) PyMapping_Values(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +00001039
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001040/* On success, return a list or tuple of the items in mapping object 'o',
1041 where each item is a tuple containing a key-value pair. On failure, return
1042 NULL. */
Victor Stinner2a358f82016-12-06 16:55:39 +01001043PyAPI_FUNC(PyObject *) PyMapping_Items(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +00001044
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001045/* Return element of o corresponding to the object, key, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +00001046
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001047 This is the equivalent of the Python expression: o[key]. */
Victor Stinner2a358f82016-12-06 16:55:39 +01001048PyAPI_FUNC(PyObject *) PyMapping_GetItemString(PyObject *o,
1049 const char *key);
Guido van Rossuma8275371995-07-18 14:07:00 +00001050
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001051/* Map the object 'key' to the value 'v' in the mapping 'o'.
1052 Returns -1 on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +00001053
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001054 This is the equivalent of the Python statement: o[key]=v. */
Victor Stinner2a358f82016-12-06 16:55:39 +01001055PyAPI_FUNC(int) PyMapping_SetItemString(PyObject *o, const char *key,
1056 PyObject *value);
Guido van Rossuma8275371995-07-18 14:07:00 +00001057
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001058/* isinstance(object, typeorclass) */
Mark Hammond91a681d2002-08-12 07:21:58 +00001059PyAPI_FUNC(int) PyObject_IsInstance(PyObject *object, PyObject *typeorclass);
Guido van Rossum823649d2001-03-21 18:40:58 +00001060
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001061/* issubclass(object, typeorclass) */
Mark Hammond91a681d2002-08-12 07:21:58 +00001062PyAPI_FUNC(int) PyObject_IsSubclass(PyObject *object, PyObject *typeorclass);
Guido van Rossum823649d2001-03-21 18:40:58 +00001063
1064
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00001065#ifndef Py_LIMITED_API
Antoine Pitrouec569b72008-08-26 22:40:48 +00001066PyAPI_FUNC(int) _PyObject_RealIsInstance(PyObject *inst, PyObject *cls);
1067
1068PyAPI_FUNC(int) _PyObject_RealIsSubclass(PyObject *derived, PyObject *cls);
1069
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001070PyAPI_FUNC(char *const *) _PySequence_BytesToCharpArray(PyObject* self);
1071
1072PyAPI_FUNC(void) _Py_FreeCharPArray(char *const array[]);
Antoine Pitrouec569b72008-08-26 22:40:48 +00001073
Antoine Pitrouf68c2a72010-09-01 12:58:21 +00001074/* For internal use by buffer API functions */
1075PyAPI_FUNC(void) _Py_add_one_to_index_F(int nd, Py_ssize_t *index,
1076 const Py_ssize_t *shape);
1077PyAPI_FUNC(void) _Py_add_one_to_index_C(int nd, Py_ssize_t *index,
1078 const Py_ssize_t *shape);
Serhiy Storchaka9fab79b2016-09-11 11:03:14 +03001079#endif /* !Py_LIMITED_API */
Antoine Pitrouf68c2a72010-09-01 12:58:21 +00001080
1081
Guido van Rossum8ca687a1995-09-18 21:20:02 +00001082#ifdef __cplusplus
1083}
1084#endif
Guido van Rossuma8275371995-07-18 14:07:00 +00001085#endif /* Py_ABSTRACTOBJECT_H */