blob: 6647be774a9964297fabf67cf4b8f53a1ecb55a2 [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 Stinner2a358f82016-12-06 16:55:39 +0100169/* Convert keyword arguments from the (stack, kwnames) format to a Python
170 dictionary.
Victor Stinner57f91ac2016-09-12 13:37:07 +0200171
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100172 kwnames must only contains str strings, no subclass, and all keys must be
173 unique. kwnames is not checked, usually these checks are done before or
Victor Stinner3e1fad62017-01-17 01:29:01 +0100174 later calling _PyStack_AsDict(). For example, _PyArg_ParseStackAndKeywords() raises an
Victor Stinner2a358f82016-12-06 16:55:39 +0100175 error if a key is not a string. */
176PyAPI_FUNC(PyObject *) _PyStack_AsDict(
177 PyObject **values,
178 PyObject *kwnames);
Victor Stinnerae8b69c2016-09-09 14:07:44 -0700179
Victor Stinner998c2092017-01-17 01:57:29 +0100180/* Convert (args, nargs, kwargs: dict) into a (stack, nargs, kwnames: tuple).
Victor Stinnera9efb2f2016-09-09 17:40:22 -0700181
Victor Stinner998c2092017-01-17 01:57:29 +0100182 Return 0 on success, raise an exception and return -1 on error.
183
184 Write the new stack into *p_stack. If *p_stack is differen than args, it
185 must be released by PyMem_Free().
Victor Stinnera9efb2f2016-09-09 17:40:22 -0700186
Victor Stinner2a358f82016-12-06 16:55:39 +0100187 The stack uses borrowed references.
Victor Stinnera9efb2f2016-09-09 17:40:22 -0700188
Victor Stinner2a358f82016-12-06 16:55:39 +0100189 The type of keyword keys is not checked, these checks should be done
Victor Stinner3e1fad62017-01-17 01:29:01 +0100190 later (ex: _PyArg_ParseStackAndKeywords). */
Victor Stinner998c2092017-01-17 01:57:29 +0100191PyAPI_FUNC(int) _PyStack_UnpackDict(
Victor Stinner2a358f82016-12-06 16:55:39 +0100192 PyObject **args,
193 Py_ssize_t nargs,
194 PyObject *kwargs,
Victor Stinner998c2092017-01-17 01:57:29 +0100195 PyObject ***p_stack,
Victor Stinner35ecebe2017-01-18 10:31:46 +0100196 PyObject **p_kwnames);
Victor Stinnera9efb2f2016-09-09 17:40:22 -0700197
Victor Stinnerbc08ab42016-12-15 12:40:53 +0100198/* Suggested size (number of positional arguments) for arrays of PyObject*
199 allocated on a C stack to avoid allocating memory on the heap memory. Such
200 array is used to pass positional arguments to call functions of the
201 _PyObject_FastCall() family.
202
203 The size is chosen to not abuse the C stack and so limit the risk of stack
204 overflow. The size is also chosen to allow using the small stack for most
205 function calls of the Python standard library. On 64-bit CPU, it allocates
206 40 bytes on the stack. */
207#define _PY_FASTCALL_SMALL_STACK 5
208
Victor Stinner2a358f82016-12-06 16:55:39 +0100209/* Call the callable object 'callable' with the "fast call" calling convention:
210 args is a C array for positional arguments (nargs is the number of
211 positional arguments), kwargs is a dictionary for keyword arguments.
Victor Stinner9be7e7b2016-08-19 16:11:43 +0200212
Victor Stinner2a358f82016-12-06 16:55:39 +0100213 If nargs is equal to zero, args can be NULL. kwargs can be NULL.
214 nargs must be greater or equal to zero.
Victor Stinner9be7e7b2016-08-19 16:11:43 +0200215
Victor Stinner2a358f82016-12-06 16:55:39 +0100216 Return the result on success. Raise an exception on return NULL on
217 error. */
218PyAPI_FUNC(PyObject *) _PyObject_FastCallDict(
219 PyObject *callable,
220 PyObject **args,
221 Py_ssize_t nargs,
222 PyObject *kwargs);
Victor Stinner559bb6a2016-08-22 22:48:54 +0200223
Victor Stinner2a358f82016-12-06 16:55:39 +0100224/* Call the callable object 'callable' with the "fast call" calling convention:
225 args is a C array for positional arguments followed by values of
226 keyword arguments. Keys of keyword arguments are stored as a tuple
227 of strings in kwnames. nargs is the number of positional parameters at
228 the beginning of stack. The size of kwnames gives the number of keyword
229 values in the stack after positional arguments.
Victor Stinnerd8735722016-09-09 12:36:44 -0700230
Victor Stinner2a358f82016-12-06 16:55:39 +0100231 kwnames must only contains str strings, no subclass, and all keys must
232 be unique.
Victor Stinnerd8735722016-09-09 12:36:44 -0700233
Victor Stinner2a358f82016-12-06 16:55:39 +0100234 If nargs is equal to zero and there is no keyword argument (kwnames is
235 NULL or its size is zero), args can be NULL.
Victor Stinner57f91ac2016-09-12 13:37:07 +0200236
Victor Stinner2a358f82016-12-06 16:55:39 +0100237 Return the result on success. Raise an exception and return NULL on
238 error. */
239PyAPI_FUNC(PyObject *) _PyObject_FastCallKeywords(
240 PyObject *callable,
241 PyObject **args,
242 Py_ssize_t nargs,
243 PyObject *kwnames);
Victor Stinnerd8735722016-09-09 12:36:44 -0700244
Victor Stinner559bb6a2016-08-22 22:48:54 +0200245#define _PyObject_FastCall(func, args, nargs) \
246 _PyObject_FastCallDict((func), (args), (nargs), NULL)
247
248#define _PyObject_CallNoArg(func) \
Victor Stinner7bfb42d2016-12-05 17:04:32 +0100249 _PyObject_FastCallDict((func), NULL, 0, NULL)
Victor Stinner9be7e7b2016-08-19 16:11:43 +0200250
Victor Stinner2a358f82016-12-06 16:55:39 +0100251PyAPI_FUNC(PyObject *) _PyObject_Call_Prepend(
252 PyObject *callable,
253 PyObject *obj,
254 PyObject *args,
255 PyObject *kwargs);
Victor Stinner3f1057a2016-08-25 01:04:14 +0200256
Victor Stinner2a358f82016-12-06 16:55:39 +0100257PyAPI_FUNC(PyObject *) _Py_CheckFunctionResult(PyObject *callable,
258 PyObject *result,
259 const char *where);
Victor Stinner9be7e7b2016-08-19 16:11:43 +0200260#endif /* Py_LIMITED_API */
Victor Stinner4a7cc882015-03-06 23:35:27 +0100261
Victor Stinner2d0eb652016-12-06 16:27:24 +0100262
Victor Stinner2a358f82016-12-06 16:55:39 +0100263/* Call a callable Python object 'callable', with arguments given by the
264 tuple 'args'. If no arguments are needed, then 'args' can be *NULL*.
Victor Stinner2d0eb652016-12-06 16:27:24 +0100265
Victor Stinner2a358f82016-12-06 16:55:39 +0100266 Returns the result of the call on success, or *NULL* on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000267
Victor Stinner2a358f82016-12-06 16:55:39 +0100268 This is the equivalent of the Python expression:
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100269 callable(*args). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100270PyAPI_FUNC(PyObject *) PyObject_CallObject(PyObject *callable,
271 PyObject *args);
Guido van Rossuma8275371995-07-18 14:07:00 +0000272
Victor Stinner2a358f82016-12-06 16:55:39 +0100273/* Call a callable Python object, callable, with a variable number of C
274 arguments. The C arguments are described using a mkvalue-style format
275 string.
Victor Stinner2d0eb652016-12-06 16:27:24 +0100276
Victor Stinner2a358f82016-12-06 16:55:39 +0100277 The format may be NULL, indicating that no arguments are provided.
Victor Stinner2d0eb652016-12-06 16:27:24 +0100278
Victor Stinner2a358f82016-12-06 16:55:39 +0100279 Returns the result of the call on success, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000280
Victor Stinner2a358f82016-12-06 16:55:39 +0100281 This is the equivalent of the Python expression:
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100282 callable(arg1, arg2, ...). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100283PyAPI_FUNC(PyObject *) PyObject_CallFunction(PyObject *callable,
284 const char *format, ...);
Guido van Rossuma8275371995-07-18 14:07:00 +0000285
Victor Stinner2a358f82016-12-06 16:55:39 +0100286/* Call the method named 'name' of object 'obj' with a variable number of
287 C arguments. The C arguments are described by a mkvalue format string.
Guido van Rossuma8275371995-07-18 14:07:00 +0000288
Victor Stinner2a358f82016-12-06 16:55:39 +0100289 The format can be NULL, indicating that no arguments are provided.
Victor Stinner2d0eb652016-12-06 16:27:24 +0100290
Victor Stinner2a358f82016-12-06 16:55:39 +0100291 Returns the result of the call on success, or NULL on failure.
292
293 This is the equivalent of the Python expression:
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100294 obj.name(arg1, arg2, ...). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100295PyAPI_FUNC(PyObject *) PyObject_CallMethod(PyObject *obj,
296 const char *name,
297 const char *format, ...);
Guido van Rossuma8275371995-07-18 14:07:00 +0000298
Serhiy Storchaka9fab79b2016-09-11 11:03:14 +0300299#ifndef Py_LIMITED_API
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100300/* Like PyObject_CallMethod(), but expect a _Py_Identifier*
301 as the method name. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100302PyAPI_FUNC(PyObject *) _PyObject_CallMethodId(PyObject *obj,
303 _Py_Identifier *name,
304 const char *format, ...);
Serhiy Storchaka9fab79b2016-09-11 11:03:14 +0300305#endif /* !Py_LIMITED_API */
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200306
Victor Stinner2a358f82016-12-06 16:55:39 +0100307PyAPI_FUNC(PyObject *) _PyObject_CallFunction_SizeT(PyObject *callable,
308 const char *format,
309 ...);
310
311PyAPI_FUNC(PyObject *) _PyObject_CallMethod_SizeT(PyObject *obj,
312 const char *name,
313 const char *format,
314 ...);
315
Serhiy Storchaka9fab79b2016-09-11 11:03:14 +0300316#ifndef Py_LIMITED_API
Victor Stinner2a358f82016-12-06 16:55:39 +0100317PyAPI_FUNC(PyObject *) _PyObject_CallMethodId_SizeT(PyObject *obj,
318 _Py_Identifier *name,
319 const char *format,
320 ...);
Serhiy Storchaka9fab79b2016-09-11 11:03:14 +0300321#endif /* !Py_LIMITED_API */
Guido van Rossuma8275371995-07-18 14:07:00 +0000322
Victor Stinner2a358f82016-12-06 16:55:39 +0100323/* Call a callable Python object 'callable' with a variable number of C
324 arguments. The C arguments are provided as PyObject* values, terminated
325 by a NULL.
Victor Stinner2d0eb652016-12-06 16:27:24 +0100326
Victor Stinner2a358f82016-12-06 16:55:39 +0100327 Returns the result of the call on success, or NULL on failure.
Victor Stinner2d0eb652016-12-06 16:27:24 +0100328
Victor Stinner2a358f82016-12-06 16:55:39 +0100329 This is the equivalent of the Python expression:
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100330 callable(arg1, arg2, ...). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100331PyAPI_FUNC(PyObject *) PyObject_CallFunctionObjArgs(PyObject *callable,
332 ...);
Fred Drakeb421b8c2001-10-26 16:21:32 +0000333
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100334/* Call the method named 'name' of object 'obj' with a variable number of
335 C arguments. The C arguments are provided as PyObject* values, terminated
336 by NULL.
337
338 Returns the result of the call on success, or NULL on failure.
339
340 This is the equivalent of the Python expression: obj.name(*args). */
Guido van Rossuma8275371995-07-18 14:07:00 +0000341
Victor Stinner2a358f82016-12-06 16:55:39 +0100342PyAPI_FUNC(PyObject *) PyObject_CallMethodObjArgs(
343 PyObject *obj,
344 PyObject *name,
345 ...);
346
Victor Stinner2d0eb652016-12-06 16:27:24 +0100347#ifndef Py_LIMITED_API
Victor Stinner2a358f82016-12-06 16:55:39 +0100348PyAPI_FUNC(PyObject *) _PyObject_CallMethodIdObjArgs(
349 PyObject *obj,
350 struct _Py_Identifier *name,
351 ...);
Victor Stinner2d0eb652016-12-06 16:27:24 +0100352#endif /* !Py_LIMITED_API */
353
354
Victor Stinner2a358f82016-12-06 16:55:39 +0100355/* Implemented elsewhere:
Guido van Rossuma8275371995-07-18 14:07:00 +0000356
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100357 long PyObject_Hash(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000358
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100359 Compute and return the hash, hash_value, of an object, o. On
360 failure, return -1.
361
362 This is the equivalent of the Python expression: hash(o). */
Guido van Rossuma8275371995-07-18 14:07:00 +0000363
364
Victor Stinner2a358f82016-12-06 16:55:39 +0100365/* Implemented elsewhere:
Guido van Rossuma8275371995-07-18 14:07:00 +0000366
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100367 int PyObject_IsTrue(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000368
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100369 Returns 1 if the object, o, is considered to be true, 0 if o is
370 considered to be false and -1 on failure.
371
372 This is equivalent to the Python expression: not not o. */
373
Guido van Rossuma8275371995-07-18 14:07:00 +0000374
Victor Stinner2a358f82016-12-06 16:55:39 +0100375/* Implemented elsewhere:
Guido van Rossumc3d3f961998-04-09 17:53:59 +0000376
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100377 int PyObject_Not(PyObject *o);
Guido van Rossumc3d3f961998-04-09 17:53:59 +0000378
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100379 Returns 0 if the object, o, is considered to be true, 1 if o is
380 considered to be false and -1 on failure.
Guido van Rossumc3d3f961998-04-09 17:53:59 +0000381
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100382 This is equivalent to the Python expression: not o. */
383
384
385/* Get the type of an object.
386
387 On success, returns a type object corresponding to the object type of object
388 'o'. On failure, returns NULL.
389
390 This is equivalent to the Python expression: type(o) */
Victor Stinner2a358f82016-12-06 16:55:39 +0100391PyAPI_FUNC(PyObject *) PyObject_Type(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000392
Guido van Rossuma8275371995-07-18 14:07:00 +0000393
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100394/* Return the size of object 'o'. If the object 'o' provides both sequence and
395 mapping protocols, the sequence size is returned.
396
397 On error, -1 is returned.
398
399 This is the equivalent to the Python expression: len(o) */
Victor Stinner2a358f82016-12-06 16:55:39 +0100400PyAPI_FUNC(Py_ssize_t) PyObject_Size(PyObject *o);
Jeremy Hylton6253f832000-07-12 12:56:19 +0000401
Guido van Rossuma8275371995-07-18 14:07:00 +0000402
Victor Stinner2a358f82016-12-06 16:55:39 +0100403/* For DLL compatibility */
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +0000404#undef PyObject_Length
Victor Stinner2a358f82016-12-06 16:55:39 +0100405PyAPI_FUNC(Py_ssize_t) PyObject_Length(PyObject *o);
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +0000406#define PyObject_Length PyObject_Size
407
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100408
Armin Ronacher74b38b12012-10-07 10:29:32 +0200409#ifndef Py_LIMITED_API
Victor Stinner2a358f82016-12-06 16:55:39 +0100410PyAPI_FUNC(int) _PyObject_HasLen(PyObject *o);
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100411
412/* Guess the size of object 'o' using len(o) or o.__length_hint__().
413 If neither of those return a non-negative value, then return the default
414 value. If one of the calls fails, this function returns -1. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100415PyAPI_FUNC(Py_ssize_t) PyObject_LengthHint(PyObject *o, Py_ssize_t);
Armin Ronacher74b38b12012-10-07 10:29:32 +0200416#endif
Raymond Hettinger6b27cda2005-09-24 21:23:05 +0000417
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100418/* Return element of 'o' corresponding to the object 'key'. Return NULL
419 on failure.
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +0000420
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100421 This is the equivalent of the Python expression: o[key] */
Victor Stinner2a358f82016-12-06 16:55:39 +0100422PyAPI_FUNC(PyObject *) PyObject_GetItem(PyObject *o, PyObject *key);
Guido van Rossuma8275371995-07-18 14:07:00 +0000423
Guido van Rossuma8275371995-07-18 14:07:00 +0000424
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100425/* Map the object 'key' to the value 'v' into 'o'.
426
427 Raise an exception and return -1 on failure; return 0 on success.
428
429 This is the equivalent of the Python statement: o[key]=v. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100430PyAPI_FUNC(int) PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v);
Guido van Rossuma8275371995-07-18 14:07:00 +0000431
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100432/* Remove the mapping for object, key, from the object 'o'.
433 Returns -1 on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000434
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100435 This is equivalent to the Python statement: del o[key]. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100436PyAPI_FUNC(int) PyObject_DelItemString(PyObject *o, const char *key);
Martin v. Löwisb0d71d02002-01-05 10:50:30 +0000437
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100438/* Delete the mapping for key from object 'o'. Returns -1 on failure.
Martin v. Löwisb0d71d02002-01-05 10:50:30 +0000439
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100440 This is the equivalent of the Python statement: del o[key]. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100441PyAPI_FUNC(int) PyObject_DelItem(PyObject *o, PyObject *key);
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000442
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000443
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100444/* === Old Buffer API ============================================ */
445
446/* FIXME: usage of these should all be replaced in Python itself
Victor Stinner2a358f82016-12-06 16:55:39 +0100447 but for backwards compatibility we will implement them.
448 Their usage without a corresponding "unlock" mechanism
449 may create issues (but they would already be there). */
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000450
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100451/* Takes an arbitrary object which must support the (character, single segment)
452 buffer interface and returns a pointer to a read-only memory location
453 useable as character based input for subsequent processing.
454
455 Return 0 on success. buffer and buffer_len are only set in case no error
456 occurs. Otherwise, -1 is returned and an exception set. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100457PyAPI_FUNC(int) PyObject_AsCharBuffer(PyObject *obj,
458 const char **buffer,
459 Py_ssize_t *buffer_len)
460 Py_DEPRECATED(3.0);
Guido van Rossumfd9eed32000-03-10 22:35:06 +0000461
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100462/* Checks whether an arbitrary object supports the (character, single segment)
463 buffer interface.
Guido van Rossumfd9eed32000-03-10 22:35:06 +0000464
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100465 Returns 1 on success, 0 on failure. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100466PyAPI_FUNC(int) PyObject_CheckReadBuffer(PyObject *obj)
467 Py_DEPRECATED(3.0);
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000468
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100469/* Same as PyObject_AsCharBuffer() except that this API expects (readable,
470 single segment) buffer interface and returns a pointer to a read-only memory
471 location which can contain arbitrary data.
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000472
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100473 0 is returned on success. buffer and buffer_len are only set in case no
474 error occurs. Otherwise, -1 is returned and an exception set. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100475PyAPI_FUNC(int) PyObject_AsReadBuffer(PyObject *obj,
476 const void **buffer,
477 Py_ssize_t *buffer_len)
478 Py_DEPRECATED(3.0);
Guido van Rossumfd9eed32000-03-10 22:35:06 +0000479
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100480/* Takes an arbitrary object which must support the (writable, single segment)
481 buffer interface and returns a pointer to a writable memory location in
482 buffer of size 'buffer_len'.
Guido van Rossumfd9eed32000-03-10 22:35:06 +0000483
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100484 Return 0 on success. buffer and buffer_len are only set in case no error
485 occurs. Otherwise, -1 is returned and an exception set. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100486PyAPI_FUNC(int) PyObject_AsWriteBuffer(PyObject *obj,
487 void **buffer,
488 Py_ssize_t *buffer_len)
489 Py_DEPRECATED(3.0);
Guido van Rossumfd9eed32000-03-10 22:35:06 +0000490
Guido van Rossumfd9eed32000-03-10 22:35:06 +0000491
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100492/* === New Buffer API ============================================ */
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000493
Martin v. Löwisc83bc3c2011-01-06 19:15:47 +0000494#ifndef Py_LIMITED_API
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100495
496/* Return 1 if the getbuffer function is available, otherwise return 0. */
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000497#define PyObject_CheckBuffer(obj) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000498 (((obj)->ob_type->tp_as_buffer != NULL) && \
499 ((obj)->ob_type->tp_as_buffer->bf_getbuffer != NULL))
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000500
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100501/* This is a C-API version of the getbuffer function call. It checks
502 to make sure object has the required function pointer and issues the
503 call.
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000504
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100505 Returns -1 and raises an error on failure and returns 0 on success. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100506PyAPI_FUNC(int) PyObject_GetBuffer(PyObject *obj, Py_buffer *view,
507 int flags);
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000508
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100509/* Get the memory area pointed to by the indices for the buffer given.
510 Note that view->ndim is the assumed size of indices. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100511PyAPI_FUNC(void *) PyBuffer_GetPointer(Py_buffer *view, Py_ssize_t *indices);
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000512
Victor Stinner2a358f82016-12-06 16:55:39 +0100513/* Return the implied itemsize of the data-format area from a
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100514 struct-style description. */
515PyAPI_FUNC(int) PyBuffer_SizeFromFormat(const char *);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000516
Victor Stinner2a358f82016-12-06 16:55:39 +0100517/* Implementation in memoryobject.c */
518PyAPI_FUNC(int) PyBuffer_ToContiguous(void *buf, Py_buffer *view,
519 Py_ssize_t len, char order);
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000520
Victor Stinner2a358f82016-12-06 16:55:39 +0100521PyAPI_FUNC(int) PyBuffer_FromContiguous(Py_buffer *view, void *buf,
522 Py_ssize_t len, char order);
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000523
Victor Stinner2a358f82016-12-06 16:55:39 +0100524/* Copy len bytes of data from the contiguous chunk of memory
525 pointed to by buf into the buffer exported by obj. Return
526 0 on success and return -1 and raise a PyBuffer_Error on
527 error (i.e. the object does not have a buffer interface or
528 it is not working).
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000529
Victor Stinner2a358f82016-12-06 16:55:39 +0100530 If fort is 'F', then if the object is multi-dimensional,
531 then the data will be copied into the array in
532 Fortran-style (first dimension varies the fastest). If
533 fort is 'C', then the data will be copied into the array
534 in C-style (last dimension varies the fastest). If fort
535 is 'A', then it does not matter and the copy will be made
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100536 in whatever way is more efficient. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100537PyAPI_FUNC(int) PyObject_CopyData(PyObject *dest, PyObject *src);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000538
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100539/* Copy the data from the src buffer to the buffer of destination. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100540PyAPI_FUNC(int) PyBuffer_IsContiguous(const Py_buffer *view, char fort);
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000541
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100542/*Fill the strides array with byte-strides of a contiguous
543 (Fortran-style if fort is 'F' or C-style otherwise)
544 array of the given shape with the given number of bytes
545 per element. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100546PyAPI_FUNC(void) PyBuffer_FillContiguousStrides(int ndims,
547 Py_ssize_t *shape,
548 Py_ssize_t *strides,
549 int itemsize,
550 char fort);
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000551
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100552/* Fills in a buffer-info structure correctly for an exporter
553 that can only share a contiguous chunk of memory of
554 "unsigned bytes" of the given length.
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000555
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100556 Returns 0 on success and -1 (with raising an error) on error. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100557PyAPI_FUNC(int) PyBuffer_FillInfo(Py_buffer *view, PyObject *o, void *buf,
558 Py_ssize_t len, int readonly,
559 int flags);
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000560
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100561/* Releases a Py_buffer obtained from getbuffer ParseTuple's "s*". */
Victor Stinner2a358f82016-12-06 16:55:39 +0100562PyAPI_FUNC(void) PyBuffer_Release(Py_buffer *view);
Martin v. Löwis423be952008-08-13 15:53:07 +0000563
Martin v. Löwisc83bc3c2011-01-06 19:15:47 +0000564#endif /* Py_LIMITED_API */
Travis E. Oliphantb99f7622007-08-18 11:21:56 +0000565
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100566/* Takes an arbitrary object and returns the result of calling
567 obj.__format__(format_spec). */
568PyAPI_FUNC(PyObject *) PyObject_Format(PyObject *obj,
Victor Stinner2a358f82016-12-06 16:55:39 +0100569 PyObject *format_spec);
Eric Smith8fd3eba2008-02-17 19:48:00 +0000570
Guido van Rossum213c7a62001-04-23 14:08:49 +0000571
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100572/* ==== Iterators ================================================ */
573
574/* Takes an object and returns an iterator for it.
575 This is typically a new iterator but if the argument is an iterator, this
576 returns itself. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100577PyAPI_FUNC(PyObject *) PyObject_GetIter(PyObject *);
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000578
Guido van Rossum213c7a62001-04-23 14:08:49 +0000579#define PyIter_Check(obj) \
Amaury Forgeot d'Arcf343e012009-01-12 23:58:21 +0000580 ((obj)->ob_type->tp_iternext != NULL && \
581 (obj)->ob_type->tp_iternext != &_PyObject_NextNotImplemented)
Guido van Rossum213c7a62001-04-23 14:08:49 +0000582
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100583/* Takes an iterator object and calls its tp_iternext slot,
584 returning the next value.
585
586 If the iterator is exhausted, this returns NULL without setting an
587 exception.
588
589 NULL with an exception means an error occurred. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100590PyAPI_FUNC(PyObject *) PyIter_Next(PyObject *);
Guido van Rossum213c7a62001-04-23 14:08:49 +0000591
Guido van Rossuma8275371995-07-18 14:07:00 +0000592
Victor Stinner2a358f82016-12-06 16:55:39 +0100593/* === Number Protocol ================================================== */
Guido van Rossuma8275371995-07-18 14:07:00 +0000594
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100595/* Returns 1 if the object 'o' provides numeric protocols, and 0 otherwise.
596
597 This function always succeeds. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100598PyAPI_FUNC(int) PyNumber_Check(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000599
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100600/* Returns the result of adding o1 and o2, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000601
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100602 This is the equivalent of the Python expression: o1 + o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100603PyAPI_FUNC(PyObject *) PyNumber_Add(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000604
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100605/* Returns the result of subtracting o2 from o1, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000606
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100607 This is the equivalent of the Python expression: o1 - o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100608PyAPI_FUNC(PyObject *) PyNumber_Subtract(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000609
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100610/* Returns the result of multiplying o1 and o2, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000611
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100612 This is the equivalent of the Python expression: o1 * o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100613PyAPI_FUNC(PyObject *) PyNumber_Multiply(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000614
Serhiy Storchaka34d0ac82016-12-27 14:57:39 +0200615#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
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_MatrixMultiply(PyObject *o1, PyObject *o2);
Serhiy Storchaka34d0ac82016-12-27 14:57:39 +0200618#endif
Benjamin Petersond51374e2014-04-09 23:55:56 -0400619
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100620/* Returns the result of dividing o1 by o2 giving an integral result,
621 or NULL on failure.
Guido van Rossum4668b002001-08-08 05:00:18 +0000622
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100623 This is the equivalent of the Python expression: o1 // o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100624PyAPI_FUNC(PyObject *) PyNumber_FloorDivide(PyObject *o1, PyObject *o2);
Guido van Rossum4668b002001-08-08 05:00:18 +0000625
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100626/* Returns the result of dividing o1 by o2 giving a float result, or NULL on
627 failure.
Guido van Rossum4668b002001-08-08 05:00:18 +0000628
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100629 This is the equivalent of the Python expression: o1 / o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100630PyAPI_FUNC(PyObject *) PyNumber_TrueDivide(PyObject *o1, PyObject *o2);
Guido van Rossum4668b002001-08-08 05:00:18 +0000631
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100632/* Returns the remainder of dividing o1 by o2, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000633
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100634 This is the equivalent of the Python expression: o1 % o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100635PyAPI_FUNC(PyObject *) PyNumber_Remainder(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000636
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100637/* See the built-in function divmod.
Guido van Rossuma8275371995-07-18 14:07:00 +0000638
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100639 Returns NULL on failure.
640
641 This is the equivalent of the Python expression: divmod(o1, o2). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100642PyAPI_FUNC(PyObject *) PyNumber_Divmod(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000643
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100644/* See the built-in function pow. Returns NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000645
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100646 This is the equivalent of the Python expression: pow(o1, o2, o3),
647 where o3 is optional. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100648PyAPI_FUNC(PyObject *) PyNumber_Power(PyObject *o1, PyObject *o2,
649 PyObject *o3);
Guido van Rossuma8275371995-07-18 14:07:00 +0000650
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100651/* Returns the negation of o on success, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000652
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100653 This is the equivalent of the Python expression: -o. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100654PyAPI_FUNC(PyObject *) PyNumber_Negative(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000655
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100656/* Returns the positive of o on success, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000657
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100658 This is the equivalent of the Python expression: +o. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100659PyAPI_FUNC(PyObject *) PyNumber_Positive(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000660
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100661/* Returns the absolute value of 'o', or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000662
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100663 This is the equivalent of the Python expression: abs(o). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100664PyAPI_FUNC(PyObject *) PyNumber_Absolute(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000665
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100666/* Returns the bitwise negation of 'o' on success, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000667
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100668 This is the equivalent of the Python expression: ~o. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100669PyAPI_FUNC(PyObject *) PyNumber_Invert(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000670
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100671/* Returns the result of left shifting o1 by o2 on success, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000672
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100673 This is the equivalent of the Python expression: o1 << o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100674PyAPI_FUNC(PyObject *) PyNumber_Lshift(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000675
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100676/* Returns the result of right shifting o1 by o2 on success, or NULL on
677 failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000678
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100679 This is the equivalent of the Python expression: o1 >> o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100680PyAPI_FUNC(PyObject *) PyNumber_Rshift(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000681
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100682/* Returns the result of bitwise and of o1 and o2 on success, or NULL on
683 failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000684
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100685 This is the equivalent of the Python expression: o1 & o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100686PyAPI_FUNC(PyObject *) PyNumber_And(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000687
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100688/* Returns the bitwise exclusive or of o1 by o2 on success, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000689
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100690 This is the equivalent of the Python expression: o1 ^ o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100691PyAPI_FUNC(PyObject *) PyNumber_Xor(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000692
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100693/* Returns the result of bitwise or on o1 and o2 on success, or NULL on
694 failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000695
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100696 This is the equivalent of the Python expression: o1 | o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100697PyAPI_FUNC(PyObject *) PyNumber_Or(PyObject *o1, PyObject *o2);
698
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100699#define PyIndex_Check(obj) \
700 ((obj)->ob_type->tp_as_number != NULL && \
701 (obj)->ob_type->tp_as_number->nb_index != NULL)
Guido van Rossuma8275371995-07-18 14:07:00 +0000702
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100703/* Returns the object 'o' converted to a Python int, or NULL with an exception
704 raised on failure. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100705PyAPI_FUNC(PyObject *) PyNumber_Index(PyObject *o);
Guido van Rossum38fff8c2006-03-07 18:50:55 +0000706
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100707/* Returns the object 'o' converted to Py_ssize_t by going through
708 PyNumber_Index() first.
Guido van Rossum38fff8c2006-03-07 18:50:55 +0000709
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100710 If an overflow error occurs while converting the int to Py_ssize_t, then the
711 second argument 'exc' is the error-type to return. If it is NULL, then the
712 overflow error is cleared and the value is clipped. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100713PyAPI_FUNC(Py_ssize_t) PyNumber_AsSsize_t(PyObject *o, PyObject *exc);
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000714
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100715/* Returns the object 'o' converted to an integer object on success, or NULL
716 on failure.
Guido van Rossum38fff8c2006-03-07 18:50:55 +0000717
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100718 This is the equivalent of the Python expression: int(o). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100719PyAPI_FUNC(PyObject *) PyNumber_Long(PyObject *o);
Mark Dickinsond7467682009-01-10 22:14:33 +0000720
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100721/* Returns the object 'o' converted to a float object on success, or NULL
722 on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000723
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100724 This is the equivalent of the Python expression: float(o). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100725PyAPI_FUNC(PyObject *) PyNumber_Float(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000726
Victor Stinner2a358f82016-12-06 16:55:39 +0100727
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100728/* --- In-place variants of (some of) the above number protocol functions -- */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000729
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100730/* Returns the result of adding o2 to o1, possibly in-place, or NULL
731 on failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000732
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100733 This is the equivalent of the Python expression: o1 += o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100734PyAPI_FUNC(PyObject *) PyNumber_InPlaceAdd(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000735
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100736/* Returns the result of subtracting o2 from o1, possibly in-place or
737 NULL on failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000738
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100739 This is the equivalent of the Python expression: o1 -= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100740PyAPI_FUNC(PyObject *) PyNumber_InPlaceSubtract(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000741
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100742/* Returns the result of multiplying o1 by o2, possibly in-place, or NULL on
743 failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000744
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100745 This is the equivalent of the Python expression: o1 *= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100746PyAPI_FUNC(PyObject *) PyNumber_InPlaceMultiply(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000747
Serhiy Storchaka34d0ac82016-12-27 14:57:39 +0200748#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100749/* This is the equivalent of the Python expression: o1 @= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100750PyAPI_FUNC(PyObject *) PyNumber_InPlaceMatrixMultiply(PyObject *o1, PyObject *o2);
Serhiy Storchaka34d0ac82016-12-27 14:57:39 +0200751#endif
Benjamin Petersond51374e2014-04-09 23:55:56 -0400752
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100753/* Returns the result of dividing o1 by o2 giving an integral result, possibly
754 in-place, or NULL on failure.
Benjamin Petersond51374e2014-04-09 23:55:56 -0400755
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100756 This is the equivalent of the Python expression: o1 /= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100757PyAPI_FUNC(PyObject *) PyNumber_InPlaceFloorDivide(PyObject *o1,
758 PyObject *o2);
Guido van Rossum4668b002001-08-08 05:00:18 +0000759
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100760/* Returns the result of dividing o1 by o2 giving a float result, possibly
761 in-place, or null on failure.
Guido van Rossum4668b002001-08-08 05:00:18 +0000762
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100763 This is the equivalent of the Python expression: o1 /= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100764PyAPI_FUNC(PyObject *) PyNumber_InPlaceTrueDivide(PyObject *o1,
765 PyObject *o2);
Guido van Rossum4668b002001-08-08 05:00:18 +0000766
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100767/* Returns the remainder of dividing o1 by o2, possibly in-place, or NULL on
768 failure.
Guido van Rossum4668b002001-08-08 05:00:18 +0000769
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100770 This is the equivalent of the Python expression: o1 %= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100771PyAPI_FUNC(PyObject *) PyNumber_InPlaceRemainder(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000772
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100773/* Returns the result of raising o1 to the power of o2, possibly in-place,
774 or NULL on failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000775
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100776 This is the equivalent of the Python expression: o1 **= o2,
777 or o1 = pow(o1, o2, o3) if o3 is present. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100778PyAPI_FUNC(PyObject *) PyNumber_InPlacePower(PyObject *o1, PyObject *o2,
779 PyObject *o3);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000780
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100781/* Returns the result of left shifting o1 by o2, possibly in-place, or NULL
782 on failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000783
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100784 This is the equivalent of the Python expression: o1 <<= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100785PyAPI_FUNC(PyObject *) PyNumber_InPlaceLshift(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000786
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100787/* Returns the result of right shifting o1 by o2, possibly in-place or NULL
788 on failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000789
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100790 This is the equivalent of the Python expression: o1 >>= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100791PyAPI_FUNC(PyObject *) PyNumber_InPlaceRshift(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000792
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100793/* Returns the result of bitwise and of o1 and o2, possibly in-place, or NULL
794 on failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000795
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100796 This is the equivalent of the Python expression: o1 &= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100797PyAPI_FUNC(PyObject *) PyNumber_InPlaceAnd(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000798
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100799/* Returns the bitwise exclusive or of o1 by o2, possibly in-place, or NULL
800 on failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000801
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100802 This is the equivalent of the Python expression: o1 ^= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100803PyAPI_FUNC(PyObject *) PyNumber_InPlaceXor(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000804
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100805/* Returns the result of bitwise or of o1 and o2, possibly in-place,
806 or NULL on failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000807
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100808 This is the equivalent of the Python expression: o1 |= o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100809PyAPI_FUNC(PyObject *) PyNumber_InPlaceOr(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000810
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100811/* Returns the integer n converted to a string with a base, with a base
812 marker of 0b, 0o or 0x prefixed if applicable.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000813
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100814 If n is not an int object, it is converted with PyNumber_Index first. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100815PyAPI_FUNC(PyObject *) PyNumber_ToBase(PyObject *n, int base);
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000816
Guido van Rossuma8275371995-07-18 14:07:00 +0000817
Victor Stinner2a358f82016-12-06 16:55:39 +0100818/* === Sequence protocol ================================================ */
Guido van Rossuma8275371995-07-18 14:07:00 +0000819
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100820/* Return 1 if the object provides sequence protocol, and zero
821 otherwise.
822
823 This function always succeeds. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100824PyAPI_FUNC(int) PySequence_Check(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000825
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100826/* Return the size of sequence object o, or -1 on failure. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100827PyAPI_FUNC(Py_ssize_t) PySequence_Size(PyObject *o);
Jeremy Hylton6253f832000-07-12 12:56:19 +0000828
Victor Stinner2a358f82016-12-06 16:55:39 +0100829/* For DLL compatibility */
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +0000830#undef PySequence_Length
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100831PyAPI_FUNC(Py_ssize_t) PySequence_Length(PyObject *o);
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +0000832#define PySequence_Length PySequence_Size
833
834
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100835/* Return the concatenation of o1 and o2 on success, and NULL on failure.
836
837 This is the equivalent of the Python expression: o1 + o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100838PyAPI_FUNC(PyObject *) PySequence_Concat(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000839
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100840/* Return the result of repeating sequence object 'o' 'count' times,
841 or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000842
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100843 This is the equivalent of the Python expression: o * count. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100844PyAPI_FUNC(PyObject *) PySequence_Repeat(PyObject *o, Py_ssize_t count);
Guido van Rossuma8275371995-07-18 14:07:00 +0000845
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100846/* Return the ith element of o, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000847
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100848 This is the equivalent of the Python expression: o[i]. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100849PyAPI_FUNC(PyObject *) PySequence_GetItem(PyObject *o, Py_ssize_t i);
Guido van Rossuma8275371995-07-18 14:07:00 +0000850
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100851/* Return the slice of sequence object o between i1 and i2, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000852
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100853 This is the equivalent of the Python expression: o[i1:i2]. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100854PyAPI_FUNC(PyObject *) PySequence_GetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000855
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100856/* Assign object 'v' to the ith element of the sequence 'o'. Raise an exception
857 and return -1 on failure; return 0 on success.
Guido van Rossuma8275371995-07-18 14:07:00 +0000858
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100859 This is the equivalent of the Python statement o[i] = v. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100860PyAPI_FUNC(int) PySequence_SetItem(PyObject *o, Py_ssize_t i, PyObject *v);
Guido van Rossuma8275371995-07-18 14:07:00 +0000861
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100862/* Delete the 'i'-th element of the sequence 'v'. Returns -1 on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000863
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100864 This is the equivalent of the Python statement: del o[i]. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100865PyAPI_FUNC(int) PySequence_DelItem(PyObject *o, Py_ssize_t i);
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000866
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100867/* Assign the sequence object 'v' to the slice in sequence object 'o',
868 from 'i1' to 'i2'. Returns -1 on failure.
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000869
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100870 This is the equivalent of the Python statement: o[i1:i2] = v. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100871PyAPI_FUNC(int) PySequence_SetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2,
872 PyObject *v);
Guido van Rossuma8275371995-07-18 14:07:00 +0000873
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100874/* Delete the slice in sequence object 'o' from 'i1' to 'i2'.
875 Returns -1 on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000876
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100877 This is the equivalent of the Python statement: del o[i1:i2]. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100878PyAPI_FUNC(int) PySequence_DelSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2);
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000879
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100880/* Returns the sequence 'o' as a tuple on success, and NULL on failure.
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000881
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100882 This is equivalent to the Python expression: tuple(o). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100883PyAPI_FUNC(PyObject *) PySequence_Tuple(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000884
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100885/* Returns the sequence 'o' as a list on success, and NULL on failure.
886 This is equivalent to the Python expression: list(o) */
Victor Stinner2a358f82016-12-06 16:55:39 +0100887PyAPI_FUNC(PyObject *) PySequence_List(PyObject *o);
Guido van Rossumf39fc431997-03-04 18:31:47 +0000888
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100889/* Return the sequence 'o' as a list, unless it's already a tuple or list.
890
891 Use PySequence_Fast_GET_ITEM to access the members of this list, and
892 PySequence_Fast_GET_SIZE to get its length.
893
894 Returns NULL on failure. If the object does not support iteration, raises a
895 TypeError exception with 'm' as the message text. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100896PyAPI_FUNC(PyObject *) PySequence_Fast(PyObject *o, const char* m);
Andrew M. Kuchling74042d62000-06-18 18:43:14 +0000897
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100898/* Return the size of the sequence 'o', assuming that 'o' was returned by
899 PySequence_Fast and is not NULL. */
Tim Peters1fc240e2001-10-26 05:06:50 +0000900#define PySequence_Fast_GET_SIZE(o) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000901 (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
Tim Peters1fc240e2001-10-26 05:06:50 +0000902
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100903/* Return the 'i'-th element of the sequence 'o', assuming that o was returned
904 by PySequence_Fast, and that i is within bounds. */
Andrew M. Kuchling74042d62000-06-18 18:43:14 +0000905#define PySequence_Fast_GET_ITEM(o, i)\
906 (PyList_Check(o) ? PyList_GET_ITEM(o, i) : PyTuple_GET_ITEM(o, i))
Andrew M. Kuchling74042d62000-06-18 18:43:14 +0000907
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100908/* Assume tp_as_sequence and sq_item exist and that 'i' does not
909 need to be corrected for a negative index. */
Martin v. Löwis01f94bd2002-05-08 08:44:21 +0000910#define PySequence_ITEM(o, i)\
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000911 ( Py_TYPE(o)->tp_as_sequence->sq_item(o, i) )
Martin v. Löwis01f94bd2002-05-08 08:44:21 +0000912
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100913/* Return a pointer to the underlying item array for
914 an object retured by PySequence_Fast */
Raymond Hettinger42bec932004-03-12 16:38:17 +0000915#define PySequence_Fast_ITEMS(sf) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000916 (PyList_Check(sf) ? ((PyListObject *)(sf))->ob_item \
917 : ((PyTupleObject *)(sf))->ob_item)
Raymond Hettingerc1e4f9d2004-03-12 08:04:00 +0000918
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100919/* Return the number of occurrences on value on 'o', that is, return
920 the number of keys for which o[key] == value.
921
922 On failure, return -1. This is equivalent to the Python expression:
923 o.count(value). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100924PyAPI_FUNC(Py_ssize_t) PySequence_Count(PyObject *o, PyObject *value);
Guido van Rossuma8275371995-07-18 14:07:00 +0000925
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100926/* Return 1 if 'ob' is in the sequence 'seq'; 0 if 'ob' is not in the sequence
927 'seq'; -1 on error.
Guido van Rossuma8275371995-07-18 14:07:00 +0000928
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100929 Use __contains__ if possible, else _PySequence_IterSearch(). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100930PyAPI_FUNC(int) PySequence_Contains(PyObject *seq, PyObject *ob);
Tim Peterscb8d3682001-05-05 21:05:01 +0000931
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000932#ifndef Py_LIMITED_API
Tim Peters16a77ad2001-09-08 04:00:12 +0000933#define PY_ITERSEARCH_COUNT 1
934#define PY_ITERSEARCH_INDEX 2
935#define PY_ITERSEARCH_CONTAINS 3
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100936
937/* Iterate over seq.
938
939 Result depends on the operation:
940
941 PY_ITERSEARCH_COUNT: return # of times obj appears in seq; -1 if
942 error.
943 PY_ITERSEARCH_INDEX: return 0-based index of first occurrence of
944 obj in seq; set ValueError and return -1 if none found;
945 also return -1 on error.
946 PY_ITERSEARCH_CONTAINS: return 1 if obj in seq, else 0; -1 on
947 error. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100948PyAPI_FUNC(Py_ssize_t) _PySequence_IterSearch(PyObject *seq,
949 PyObject *obj, int operation);
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000950#endif
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100951
Guido van Rossum83684531999-03-17 18:44:39 +0000952
953/* For DLL-level backwards compatibility */
954#undef PySequence_In
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100955/* Determine if the sequence 'o' contains 'value'. If an item in 'o' is equal
956 to 'value', return 1, otherwise return 0. On error, return -1.
957
958 This is equivalent to the Python expression: value in o. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100959PyAPI_FUNC(int) PySequence_In(PyObject *o, PyObject *value);
Guido van Rossum83684531999-03-17 18:44:39 +0000960
961/* For source-level backwards compatibility */
Guido van Rossumf1536db1998-08-23 22:06:59 +0000962#define PySequence_In PySequence_Contains
Guido van Rossuma8275371995-07-18 14:07:00 +0000963
Guido van Rossuma8275371995-07-18 14:07:00 +0000964
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100965/* Return the first index for which o[i] == value.
966 On error, return -1.
967
968 This is equivalent to the Python expression: o.index(value). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100969PyAPI_FUNC(Py_ssize_t) PySequence_Index(PyObject *o, PyObject *value);
Guido van Rossuma8275371995-07-18 14:07:00 +0000970
Victor Stinner2a358f82016-12-06 16:55:39 +0100971
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100972/* --- In-place versions of some of the above Sequence functions --- */
Guido van Rossuma8275371995-07-18 14:07:00 +0000973
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100974/* Append sequence 'o2' to sequence 'o1', in-place when possible. Return the
975 resulting object, which could be 'o1', or NULL on failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000976
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100977 This is the equivalent of the Python expression: o1 += o2. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100978PyAPI_FUNC(PyObject *) PySequence_InPlaceConcat(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000979
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100980/* Repeat sequence 'o' by 'count', in-place when possible. Return the resulting
981 object, which could be 'o', or NULL on failure.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000982
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100983 This is the equivalent of the Python expression: o1 *= count. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100984PyAPI_FUNC(PyObject *) PySequence_InPlaceRepeat(PyObject *o, Py_ssize_t count);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000985
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000986
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100987/* === Mapping protocol ================================================= */
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000988
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100989/* Return 1 if the object provides mapping protocol, and 0 otherwise.
Guido van Rossuma8275371995-07-18 14:07:00 +0000990
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100991 This function always succeeds. */
Victor Stinner2a358f82016-12-06 16:55:39 +0100992PyAPI_FUNC(int) PyMapping_Check(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000993
Victor Stinner5bef7cd2016-12-15 09:14:25 +0100994/* Returns the number of keys in mapping object 'o' on success, and -1 on
995 failure. For objects that do not provide sequence protocol, this is
996 equivalent to the Python expression: len(o). */
Victor Stinner2a358f82016-12-06 16:55:39 +0100997PyAPI_FUNC(Py_ssize_t) PyMapping_Size(PyObject *o);
Jeremy Hylton6253f832000-07-12 12:56:19 +0000998
Victor Stinner2a358f82016-12-06 16:55:39 +0100999/* For DLL compatibility */
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +00001000#undef PyMapping_Length
Victor Stinner2a358f82016-12-06 16:55:39 +01001001PyAPI_FUNC(Py_ssize_t) PyMapping_Length(PyObject *o);
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +00001002#define PyMapping_Length PyMapping_Size
1003
1004
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001005/* Implemented as a macro:
Guido van Rossuma25e5e91996-09-06 13:48:38 +00001006
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001007 int PyMapping_DelItemString(PyObject *o, const char *key);
Guido van Rossuma8275371995-07-18 14:07:00 +00001008
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001009 Remove the mapping for object 'key' from the mapping 'o'. Returns -1 on
1010 failure.
1011
1012 This is equivalent to the Python statement: del o[key]. */
Jeremy Hylton7c7ee5f2001-11-28 16:20:07 +00001013#define PyMapping_DelItemString(O,K) PyObject_DelItemString((O),(K))
Guido van Rossuma25e5e91996-09-06 13:48:38 +00001014
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001015/* Implemented as a macro:
Guido van Rossuma8275371995-07-18 14:07:00 +00001016
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001017 int PyMapping_DelItem(PyObject *o, PyObject *key);
Guido van Rossuma8275371995-07-18 14:07:00 +00001018
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001019 Remove the mapping for object 'key' from the mapping object 'o'.
1020 Returns -1 on failure.
1021
1022 This is equivalent to the Python statement: del o[key]. */
Jeremy Hylton7c7ee5f2001-11-28 16:20:07 +00001023#define PyMapping_DelItem(O,K) PyObject_DelItem((O),(K))
Guido van Rossuma8275371995-07-18 14:07:00 +00001024
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001025/* On success, return 1 if the mapping object 'o' has the key 'key',
1026 and 0 otherwise.
1027
1028 This is equivalent to the Python expression: key in o.
1029
1030 This function always succeeds. */
Victor Stinner2a358f82016-12-06 16:55:39 +01001031PyAPI_FUNC(int) PyMapping_HasKeyString(PyObject *o, const char *key);
Guido van Rossuma8275371995-07-18 14:07:00 +00001032
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001033/* Return 1 if the mapping object has the key 'key', and 0 otherwise.
Guido van Rossuma8275371995-07-18 14:07:00 +00001034
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001035 This is equivalent to the Python expression: key in o.
Guido van Rossuma8275371995-07-18 14:07:00 +00001036
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001037 This function always succeeds. */
Victor Stinner2a358f82016-12-06 16:55:39 +01001038PyAPI_FUNC(int) PyMapping_HasKey(PyObject *o, PyObject *key);
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 keys in mapping object 'o'.
1041 On failure, return NULL. */
Victor Stinner2a358f82016-12-06 16:55:39 +01001042PyAPI_FUNC(PyObject *) PyMapping_Keys(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +00001043
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001044/* On success, return a list or tuple of the values in mapping object 'o'.
1045 On failure, return NULL. */
Victor Stinner2a358f82016-12-06 16:55:39 +01001046PyAPI_FUNC(PyObject *) PyMapping_Values(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +00001047
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001048/* On success, return a list or tuple of the items in mapping object 'o',
1049 where each item is a tuple containing a key-value pair. On failure, return
1050 NULL. */
Victor Stinner2a358f82016-12-06 16:55:39 +01001051PyAPI_FUNC(PyObject *) PyMapping_Items(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +00001052
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001053/* Return element of o corresponding to the object, key, or NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +00001054
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001055 This is the equivalent of the Python expression: o[key]. */
Victor Stinner2a358f82016-12-06 16:55:39 +01001056PyAPI_FUNC(PyObject *) PyMapping_GetItemString(PyObject *o,
1057 const char *key);
Guido van Rossuma8275371995-07-18 14:07:00 +00001058
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001059/* Map the object 'key' to the value 'v' in the mapping 'o'.
1060 Returns -1 on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +00001061
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001062 This is the equivalent of the Python statement: o[key]=v. */
Victor Stinner2a358f82016-12-06 16:55:39 +01001063PyAPI_FUNC(int) PyMapping_SetItemString(PyObject *o, const char *key,
1064 PyObject *value);
Guido van Rossuma8275371995-07-18 14:07:00 +00001065
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001066/* isinstance(object, typeorclass) */
Mark Hammond91a681d2002-08-12 07:21:58 +00001067PyAPI_FUNC(int) PyObject_IsInstance(PyObject *object, PyObject *typeorclass);
Guido van Rossum823649d2001-03-21 18:40:58 +00001068
Victor Stinner5bef7cd2016-12-15 09:14:25 +01001069/* issubclass(object, typeorclass) */
Mark Hammond91a681d2002-08-12 07:21:58 +00001070PyAPI_FUNC(int) PyObject_IsSubclass(PyObject *object, PyObject *typeorclass);
Guido van Rossum823649d2001-03-21 18:40:58 +00001071
1072
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00001073#ifndef Py_LIMITED_API
Antoine Pitrouec569b72008-08-26 22:40:48 +00001074PyAPI_FUNC(int) _PyObject_RealIsInstance(PyObject *inst, PyObject *cls);
1075
1076PyAPI_FUNC(int) _PyObject_RealIsSubclass(PyObject *derived, PyObject *cls);
1077
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001078PyAPI_FUNC(char *const *) _PySequence_BytesToCharpArray(PyObject* self);
1079
1080PyAPI_FUNC(void) _Py_FreeCharPArray(char *const array[]);
Antoine Pitrouec569b72008-08-26 22:40:48 +00001081
Antoine Pitrouf68c2a72010-09-01 12:58:21 +00001082/* For internal use by buffer API functions */
1083PyAPI_FUNC(void) _Py_add_one_to_index_F(int nd, Py_ssize_t *index,
1084 const Py_ssize_t *shape);
1085PyAPI_FUNC(void) _Py_add_one_to_index_C(int nd, Py_ssize_t *index,
1086 const Py_ssize_t *shape);
Serhiy Storchaka9fab79b2016-09-11 11:03:14 +03001087#endif /* !Py_LIMITED_API */
Antoine Pitrouf68c2a72010-09-01 12:58:21 +00001088
1089
Guido van Rossum8ca687a1995-09-18 21:20:02 +00001090#ifdef __cplusplus
1091}
1092#endif
Guido van Rossuma8275371995-07-18 14:07:00 +00001093#endif /* Py_ABSTRACTOBJECT_H */