1 /* Abstract Object Interface (many thanks to Jim Fulton) */
2 
3 #ifndef Py_ABSTRACTOBJECT_H
4 #define Py_ABSTRACTOBJECT_H
5 #ifdef __cplusplus
6 extern "C" {
7 #endif
8 
9 /* === Object Protocol ================================================== */
10 
11 /* Implemented elsewhere:
12 
13    int PyObject_Print(PyObject *o, FILE *fp, int flags);
14 
15    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.
18 
19    (What should be said about Py_Print_RAW?). */
20 
21 
22 /* Implemented elsewhere:
23 
24    int PyObject_HasAttrString(PyObject *o, const char *attr_name);
25 
26    Returns 1 if object 'o' has the attribute attr_name, and 0 otherwise.
27 
28    This is equivalent to the Python expression: hasattr(o,attr_name).
29 
30    This function always succeeds. */
31 
32 
33 /* Implemented elsewhere:
34 
35    PyObject* PyObject_GetAttrString(PyObject *o, const char *attr_name);
36 
37    Retrieve an attributed named attr_name form object o.
38    Returns the attribute value on success, or NULL on failure.
39 
40    This is the equivalent of the Python expression: o.attr_name. */
41 
42 
43 /* Implemented elsewhere:
44 
45    int PyObject_HasAttr(PyObject *o, PyObject *attr_name);
46 
47    Returns 1 if o has the attribute attr_name, and 0 otherwise.
48 
49    This is equivalent to the Python expression: hasattr(o,attr_name).
50 
51    This function always succeeds. */
52 
53 /* Implemented elsewhere:
54 
55    PyObject* PyObject_GetAttr(PyObject *o, PyObject *attr_name);
56 
57    Retrieve an attributed named 'attr_name' form object 'o'.
58    Returns the attribute value on success, or NULL on failure.
59 
60    This is the equivalent of the Python expression: o.attr_name. */
61 
62 
63 /* Implemented elsewhere:
64 
65    int PyObject_SetAttrString(PyObject *o, const char *attr_name, PyObject *v);
66 
67    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.
70 
71    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 #endif
142 
143 
144 #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03090000
145 /* Call a callable Python object without any arguments */
146 PyAPI_FUNC(PyObject *) PyObject_CallNoArgs(PyObject *func);
147 #endif
148 
149 
150 /* Call a callable Python object 'callable' with arguments given by the
151    tuple 'args' and keywords arguments given by the dictionary 'kwargs'.
152 
153    'args' must not be NULL, use an empty tuple if no arguments are
154    needed. If no named arguments are needed, 'kwargs' can be NULL.
155 
156    This is the equivalent of the Python expression:
157    callable(*args, **kwargs). */
158 PyAPI_FUNC(PyObject *) PyObject_Call(PyObject *callable,
159                                      PyObject *args, PyObject *kwargs);
160 
161 
162 /* Call a callable Python object 'callable', with arguments given by the
163    tuple 'args'.  If no arguments are needed, then 'args' can be NULL.
164 
165    Returns the result of the call on success, or NULL on failure.
166 
167    This is the equivalent of the Python expression:
168    callable(*args). */
169 PyAPI_FUNC(PyObject *) PyObject_CallObject(PyObject *callable,
170                                            PyObject *args);
171 
172 /* Call a callable Python object, callable, with a variable number of C
173    arguments. The C arguments are described using a mkvalue-style format
174    string.
175 
176    The format may be NULL, indicating that no arguments are provided.
177 
178    Returns the result of the call on success, or NULL on failure.
179 
180    This is the equivalent of the Python expression:
181    callable(arg1, arg2, ...). */
182 PyAPI_FUNC(PyObject *) PyObject_CallFunction(PyObject *callable,
183                                              const char *format, ...);
184 
185 /* Call the method named 'name' of object 'obj' with a variable number of
186    C arguments.  The C arguments are described by a mkvalue format string.
187 
188    The format can be NULL, indicating that no arguments are provided.
189 
190    Returns the result of the call on success, or NULL on failure.
191 
192    This is the equivalent of the Python expression:
193    obj.name(arg1, arg2, ...). */
194 PyAPI_FUNC(PyObject *) PyObject_CallMethod(PyObject *obj,
195                                            const char *name,
196                                            const char *format, ...);
197 
198 PyAPI_FUNC(PyObject *) _PyObject_CallFunction_SizeT(PyObject *callable,
199                                                     const char *format,
200                                                     ...);
201 
202 PyAPI_FUNC(PyObject *) _PyObject_CallMethod_SizeT(PyObject *obj,
203                                                   const char *name,
204                                                   const char *format,
205                                                   ...);
206 
207 /* Call a callable Python object 'callable' with a variable number of C
208    arguments. The C arguments are provided as PyObject* values, terminated
209    by a NULL.
210 
211    Returns the result of the call on success, or NULL on failure.
212 
213    This is the equivalent of the Python expression:
214    callable(arg1, arg2, ...). */
215 PyAPI_FUNC(PyObject *) PyObject_CallFunctionObjArgs(PyObject *callable,
216                                                     ...);
217 
218 /* Call the method named 'name' of object 'obj' with a variable number of
219    C arguments.  The C arguments are provided as PyObject* values, terminated
220    by NULL.
221 
222    Returns the result of the call on success, or NULL on failure.
223 
224    This is the equivalent of the Python expression: obj.name(*args). */
225 
226 PyAPI_FUNC(PyObject *) PyObject_CallMethodObjArgs(
227     PyObject *obj,
228     PyObject *name,
229     ...);
230 
231 
232 /* Implemented elsewhere:
233 
234    Py_hash_t PyObject_Hash(PyObject *o);
235 
236    Compute and return the hash, hash_value, of an object, o.  On
237    failure, return -1.
238 
239    This is the equivalent of the Python expression: hash(o). */
240 
241 
242 /* Implemented elsewhere:
243 
244    int PyObject_IsTrue(PyObject *o);
245 
246    Returns 1 if the object, o, is considered to be true, 0 if o is
247    considered to be false and -1 on failure.
248 
249    This is equivalent to the Python expression: not not o. */
250 
251 
252 /* Implemented elsewhere:
253 
254    int PyObject_Not(PyObject *o);
255 
256    Returns 0 if the object, o, is considered to be true, 1 if o is
257    considered to be false and -1 on failure.
258 
259    This is equivalent to the Python expression: not o. */
260 
261 
262 /* Get the type of an object.
263 
264    On success, returns a type object corresponding to the object type of object
265    'o'. On failure, returns NULL.
266 
267    This is equivalent to the Python expression: type(o) */
268 PyAPI_FUNC(PyObject *) PyObject_Type(PyObject *o);
269 
270 
271 /* Return the size of object 'o'.  If the object 'o' provides both sequence and
272    mapping protocols, the sequence size is returned.
273 
274    On error, -1 is returned.
275 
276    This is the equivalent to the Python expression: len(o) */
277 PyAPI_FUNC(Py_ssize_t) PyObject_Size(PyObject *o);
278 
279 
280 /* For DLL compatibility */
281 #undef PyObject_Length
282 PyAPI_FUNC(Py_ssize_t) PyObject_Length(PyObject *o);
283 #define PyObject_Length PyObject_Size
284 
285 /* Return element of 'o' corresponding to the object 'key'. Return NULL
286   on failure.
287 
288   This is the equivalent of the Python expression: o[key] */
289 PyAPI_FUNC(PyObject *) PyObject_GetItem(PyObject *o, PyObject *key);
290 
291 
292 /* Map the object 'key' to the value 'v' into 'o'.
293 
294    Raise an exception and return -1 on failure; return 0 on success.
295 
296    This is the equivalent of the Python statement: o[key]=v. */
297 PyAPI_FUNC(int) PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v);
298 
299 /* Remove the mapping for the string 'key' from the object 'o'.
300    Returns -1 on failure.
301 
302    This is equivalent to the Python statement: del o[key]. */
303 PyAPI_FUNC(int) PyObject_DelItemString(PyObject *o, const char *key);
304 
305 /* Delete the mapping for the object 'key' from the object 'o'.
306    Returns -1 on failure.
307 
308    This is the equivalent of the Python statement: del o[key]. */
309 PyAPI_FUNC(int) PyObject_DelItem(PyObject *o, PyObject *key);
310 
311 
312 /* === Old Buffer API ============================================ */
313 
314 /* FIXME:  usage of these should all be replaced in Python itself
315    but for backwards compatibility we will implement them.
316    Their usage without a corresponding "unlock" mechanism
317    may create issues (but they would already be there). */
318 
319 /* Takes an arbitrary object which must support the (character, single segment)
320    buffer interface and returns a pointer to a read-only memory location
321    usable as character based input for subsequent processing.
322 
323    Return 0 on success.  buffer and buffer_len are only set in case no error
324    occurs. Otherwise, -1 is returned and an exception set. */
325 Py_DEPRECATED(3.0)
326 PyAPI_FUNC(int) PyObject_AsCharBuffer(PyObject *obj,
327                                       const char **buffer,
328                                       Py_ssize_t *buffer_len);
329 
330 /* Checks whether an arbitrary object supports the (character, single segment)
331    buffer interface.
332 
333    Returns 1 on success, 0 on failure. */
334 Py_DEPRECATED(3.0) PyAPI_FUNC(int) PyObject_CheckReadBuffer(PyObject *obj);
335 
336 /* Same as PyObject_AsCharBuffer() except that this API expects (readable,
337    single segment) buffer interface and returns a pointer to a read-only memory
338    location which can contain arbitrary data.
339 
340    0 is returned on success.  buffer and buffer_len are only set in case no
341    error occurs.  Otherwise, -1 is returned and an exception set. */
342 Py_DEPRECATED(3.0)
343 PyAPI_FUNC(int) PyObject_AsReadBuffer(PyObject *obj,
344                                       const void **buffer,
345                                       Py_ssize_t *buffer_len);
346 
347 /* Takes an arbitrary object which must support the (writable, single segment)
348    buffer interface and returns a pointer to a writable memory location in
349    buffer of size 'buffer_len'.
350 
351    Return 0 on success.  buffer and buffer_len are only set in case no error
352    occurs. Otherwise, -1 is returned and an exception set. */
353 Py_DEPRECATED(3.0)
354 PyAPI_FUNC(int) PyObject_AsWriteBuffer(PyObject *obj,
355                                        void **buffer,
356                                        Py_ssize_t *buffer_len);
357 
358 
359 /* === New Buffer API ============================================ */
360 
361 /* Takes an arbitrary object and returns the result of calling
362    obj.__format__(format_spec). */
363 PyAPI_FUNC(PyObject *) PyObject_Format(PyObject *obj,
364                                        PyObject *format_spec);
365 
366 
367 /* ==== Iterators ================================================ */
368 
369 /* Takes an object and returns an iterator for it.
370    This is typically a new iterator but if the argument is an iterator, this
371    returns itself. */
372 PyAPI_FUNC(PyObject *) PyObject_GetIter(PyObject *);
373 
374 /* Takes an AsyncIterable object and returns an AsyncIterator for it.
375    This is typically a new iterator but if the argument is an AsyncIterator,
376    this returns itself. */
377 PyAPI_FUNC(PyObject *) PyObject_GetAIter(PyObject *);
378 
379 /* Returns non-zero if the object 'obj' provides iterator protocols, and 0 otherwise.
380 
381    This function always succeeds. */
382 PyAPI_FUNC(int) PyIter_Check(PyObject *);
383 
384 /* Returns non-zero if the object 'obj' provides AsyncIterator protocols, and 0 otherwise.
385 
386    This function always succeeds. */
387 PyAPI_FUNC(int) PyAIter_Check(PyObject *);
388 
389 /* Takes an iterator object and calls its tp_iternext slot,
390    returning the next value.
391 
392    If the iterator is exhausted, this returns NULL without setting an
393    exception.
394 
395    NULL with an exception means an error occurred. */
396 PyAPI_FUNC(PyObject *) PyIter_Next(PyObject *);
397 
398 #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030A0000
399 
400 /* Takes generator, coroutine or iterator object and sends the value into it.
401    Returns:
402    - PYGEN_RETURN (0) if generator has returned.
403      'result' parameter is filled with return value
404    - PYGEN_ERROR (-1) if exception was raised.
405      'result' parameter is NULL
406    - PYGEN_NEXT (1) if generator has yielded.
407      'result' parameter is filled with yielded value. */
408 PyAPI_FUNC(PySendResult) PyIter_Send(PyObject *, PyObject *, PyObject **);
409 #endif
410 
411 
412 /* === Number Protocol ================================================== */
413 
414 /* Returns 1 if the object 'o' provides numeric protocols, and 0 otherwise.
415 
416    This function always succeeds. */
417 PyAPI_FUNC(int) PyNumber_Check(PyObject *o);
418 
419 /* Returns the result of adding o1 and o2, or NULL on failure.
420 
421    This is the equivalent of the Python expression: o1 + o2. */
422 PyAPI_FUNC(PyObject *) PyNumber_Add(PyObject *o1, PyObject *o2);
423 
424 /* Returns the result of subtracting o2 from o1, or NULL on failure.
425 
426    This is the equivalent of the Python expression: o1 - o2. */
427 PyAPI_FUNC(PyObject *) PyNumber_Subtract(PyObject *o1, PyObject *o2);
428 
429 /* Returns the result of multiplying o1 and o2, or NULL on failure.
430 
431    This is the equivalent of the Python expression: o1 * o2. */
432 PyAPI_FUNC(PyObject *) PyNumber_Multiply(PyObject *o1, PyObject *o2);
433 
434 #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
435 /* This is the equivalent of the Python expression: o1 @ o2. */
436 PyAPI_FUNC(PyObject *) PyNumber_MatrixMultiply(PyObject *o1, PyObject *o2);
437 #endif
438 
439 /* Returns the result of dividing o1 by o2 giving an integral result,
440    or NULL on failure.
441 
442    This is the equivalent of the Python expression: o1 // o2. */
443 PyAPI_FUNC(PyObject *) PyNumber_FloorDivide(PyObject *o1, PyObject *o2);
444 
445 /* Returns the result of dividing o1 by o2 giving a float result, or NULL on
446    failure.
447 
448    This is the equivalent of the Python expression: o1 / o2. */
449 PyAPI_FUNC(PyObject *) PyNumber_TrueDivide(PyObject *o1, PyObject *o2);
450 
451 /* Returns the remainder of dividing o1 by o2, or NULL on failure.
452 
453    This is the equivalent of the Python expression: o1 % o2. */
454 PyAPI_FUNC(PyObject *) PyNumber_Remainder(PyObject *o1, PyObject *o2);
455 
456 /* See the built-in function divmod.
457 
458    Returns NULL on failure.
459 
460    This is the equivalent of the Python expression: divmod(o1, o2). */
461 PyAPI_FUNC(PyObject *) PyNumber_Divmod(PyObject *o1, PyObject *o2);
462 
463 /* See the built-in function pow. Returns NULL on failure.
464 
465    This is the equivalent of the Python expression: pow(o1, o2, o3),
466    where o3 is optional. */
467 PyAPI_FUNC(PyObject *) PyNumber_Power(PyObject *o1, PyObject *o2,
468                                       PyObject *o3);
469 
470 /* Returns the negation of o on success, or NULL on failure.
471 
472  This is the equivalent of the Python expression: -o. */
473 PyAPI_FUNC(PyObject *) PyNumber_Negative(PyObject *o);
474 
475 /* Returns the positive of o on success, or NULL on failure.
476 
477    This is the equivalent of the Python expression: +o. */
478 PyAPI_FUNC(PyObject *) PyNumber_Positive(PyObject *o);
479 
480 /* Returns the absolute value of 'o', or NULL on failure.
481 
482    This is the equivalent of the Python expression: abs(o). */
483 PyAPI_FUNC(PyObject *) PyNumber_Absolute(PyObject *o);
484 
485 /* Returns the bitwise negation of 'o' on success, or NULL on failure.
486 
487    This is the equivalent of the Python expression: ~o. */
488 PyAPI_FUNC(PyObject *) PyNumber_Invert(PyObject *o);
489 
490 /* Returns the result of left shifting o1 by o2 on success, or NULL on failure.
491 
492    This is the equivalent of the Python expression: o1 << o2. */
493 PyAPI_FUNC(PyObject *) PyNumber_Lshift(PyObject *o1, PyObject *o2);
494 
495 /* Returns the result of right shifting o1 by o2 on success, or NULL on
496    failure.
497 
498    This is the equivalent of the Python expression: o1 >> o2. */
499 PyAPI_FUNC(PyObject *) PyNumber_Rshift(PyObject *o1, PyObject *o2);
500 
501 /* Returns the result of bitwise and of o1 and o2 on success, or NULL on
502    failure.
503 
504    This is the equivalent of the Python expression: o1 & o2. */
505 PyAPI_FUNC(PyObject *) PyNumber_And(PyObject *o1, PyObject *o2);
506 
507 /* Returns the bitwise exclusive or of o1 by o2 on success, or NULL on failure.
508 
509    This is the equivalent of the Python expression: o1 ^ o2. */
510 PyAPI_FUNC(PyObject *) PyNumber_Xor(PyObject *o1, PyObject *o2);
511 
512 /* Returns the result of bitwise or on o1 and o2 on success, or NULL on
513    failure.
514 
515    This is the equivalent of the Python expression: o1 | o2. */
516 PyAPI_FUNC(PyObject *) PyNumber_Or(PyObject *o1, PyObject *o2);
517 
518 /* Returns 1 if obj is an index integer (has the nb_index slot of the
519    tp_as_number structure filled in), and 0 otherwise. */
520 PyAPI_FUNC(int) PyIndex_Check(PyObject *);
521 
522 /* Returns the object 'o' converted to a Python int, or NULL with an exception
523    raised on failure. */
524 PyAPI_FUNC(PyObject *) PyNumber_Index(PyObject *o);
525 
526 /* Returns the object 'o' converted to Py_ssize_t by going through
527    PyNumber_Index() first.
528 
529    If an overflow error occurs while converting the int to Py_ssize_t, then the
530    second argument 'exc' is the error-type to return.  If it is NULL, then the
531    overflow error is cleared and the value is clipped. */
532 PyAPI_FUNC(Py_ssize_t) PyNumber_AsSsize_t(PyObject *o, PyObject *exc);
533 
534 /* Returns the object 'o' converted to an integer object on success, or NULL
535    on failure.
536 
537    This is the equivalent of the Python expression: int(o). */
538 PyAPI_FUNC(PyObject *) PyNumber_Long(PyObject *o);
539 
540 /* Returns the object 'o' converted to a float object on success, or NULL
541   on failure.
542 
543   This is the equivalent of the Python expression: float(o). */
544 PyAPI_FUNC(PyObject *) PyNumber_Float(PyObject *o);
545 
546 
547 /* --- In-place variants of (some of) the above number protocol functions -- */
548 
549 /* Returns the result of adding o2 to o1, possibly in-place, or NULL
550    on failure.
551 
552    This is the equivalent of the Python expression: o1 += o2. */
553 PyAPI_FUNC(PyObject *) PyNumber_InPlaceAdd(PyObject *o1, PyObject *o2);
554 
555 /* Returns the result of subtracting o2 from o1, possibly in-place or
556    NULL on failure.
557 
558    This is the equivalent of the Python expression: o1 -= o2. */
559 PyAPI_FUNC(PyObject *) PyNumber_InPlaceSubtract(PyObject *o1, PyObject *o2);
560 
561 /* Returns the result of multiplying o1 by o2, possibly in-place, or NULL on
562    failure.
563 
564    This is the equivalent of the Python expression: o1 *= o2. */
565 PyAPI_FUNC(PyObject *) PyNumber_InPlaceMultiply(PyObject *o1, PyObject *o2);
566 
567 #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
568 /* This is the equivalent of the Python expression: o1 @= o2. */
569 PyAPI_FUNC(PyObject *) PyNumber_InPlaceMatrixMultiply(PyObject *o1, PyObject *o2);
570 #endif
571 
572 /* Returns the result of dividing o1 by o2 giving an integral result, possibly
573    in-place, or NULL on failure.
574 
575    This is the equivalent of the Python expression: o1 /= o2. */
576 PyAPI_FUNC(PyObject *) PyNumber_InPlaceFloorDivide(PyObject *o1,
577                                                    PyObject *o2);
578 
579 /* Returns the result of dividing o1 by o2 giving a float result, possibly
580    in-place, or null on failure.
581 
582    This is the equivalent of the Python expression: o1 /= o2. */
583 PyAPI_FUNC(PyObject *) PyNumber_InPlaceTrueDivide(PyObject *o1,
584                                                   PyObject *o2);
585 
586 /* Returns the remainder of dividing o1 by o2, possibly in-place, or NULL on
587    failure.
588 
589    This is the equivalent of the Python expression: o1 %= o2. */
590 PyAPI_FUNC(PyObject *) PyNumber_InPlaceRemainder(PyObject *o1, PyObject *o2);
591 
592 /* Returns the result of raising o1 to the power of o2, possibly in-place,
593    or NULL on failure.
594 
595    This is the equivalent of the Python expression: o1 **= o2,
596    or o1 = pow(o1, o2, o3) if o3 is present. */
597 PyAPI_FUNC(PyObject *) PyNumber_InPlacePower(PyObject *o1, PyObject *o2,
598                                              PyObject *o3);
599 
600 /* Returns the result of left shifting o1 by o2, possibly in-place, or NULL
601    on failure.
602 
603    This is the equivalent of the Python expression: o1 <<= o2. */
604 PyAPI_FUNC(PyObject *) PyNumber_InPlaceLshift(PyObject *o1, PyObject *o2);
605 
606 /* Returns the result of right shifting o1 by o2, possibly in-place or NULL
607    on failure.
608 
609    This is the equivalent of the Python expression: o1 >>= o2. */
610 PyAPI_FUNC(PyObject *) PyNumber_InPlaceRshift(PyObject *o1, PyObject *o2);
611 
612 /* Returns the result of bitwise and of o1 and o2, possibly in-place, or NULL
613    on failure.
614 
615    This is the equivalent of the Python expression: o1 &= o2. */
616 PyAPI_FUNC(PyObject *) PyNumber_InPlaceAnd(PyObject *o1, PyObject *o2);
617 
618 /* Returns the bitwise exclusive or of o1 by o2, possibly in-place, or NULL
619    on failure.
620 
621    This is the equivalent of the Python expression: o1 ^= o2. */
622 PyAPI_FUNC(PyObject *) PyNumber_InPlaceXor(PyObject *o1, PyObject *o2);
623 
624 /* Returns the result of bitwise or of o1 and o2, possibly in-place,
625    or NULL on failure.
626 
627    This is the equivalent of the Python expression: o1 |= o2. */
628 PyAPI_FUNC(PyObject *) PyNumber_InPlaceOr(PyObject *o1, PyObject *o2);
629 
630 /* Returns the integer n converted to a string with a base, with a base
631    marker of 0b, 0o or 0x prefixed if applicable.
632 
633    If n is not an int object, it is converted with PyNumber_Index first. */
634 PyAPI_FUNC(PyObject *) PyNumber_ToBase(PyObject *n, int base);
635 
636 
637 /* === Sequence protocol ================================================ */
638 
639 /* Return 1 if the object provides sequence protocol, and zero
640    otherwise.
641 
642    This function always succeeds. */
643 PyAPI_FUNC(int) PySequence_Check(PyObject *o);
644 
645 /* Return the size of sequence object o, or -1 on failure. */
646 PyAPI_FUNC(Py_ssize_t) PySequence_Size(PyObject *o);
647 
648 /* For DLL compatibility */
649 #undef PySequence_Length
650 PyAPI_FUNC(Py_ssize_t) PySequence_Length(PyObject *o);
651 #define PySequence_Length PySequence_Size
652 
653 
654 /* Return the concatenation of o1 and o2 on success, and NULL on failure.
655 
656    This is the equivalent of the Python expression: o1 + o2. */
657 PyAPI_FUNC(PyObject *) PySequence_Concat(PyObject *o1, PyObject *o2);
658 
659 /* Return the result of repeating sequence object 'o' 'count' times,
660   or NULL on failure.
661 
662   This is the equivalent of the Python expression: o * count. */
663 PyAPI_FUNC(PyObject *) PySequence_Repeat(PyObject *o, Py_ssize_t count);
664 
665 /* Return the ith element of o, or NULL on failure.
666 
667    This is the equivalent of the Python expression: o[i]. */
668 PyAPI_FUNC(PyObject *) PySequence_GetItem(PyObject *o, Py_ssize_t i);
669 
670 /* Return the slice of sequence object o between i1 and i2, or NULL on failure.
671 
672    This is the equivalent of the Python expression: o[i1:i2]. */
673 PyAPI_FUNC(PyObject *) PySequence_GetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2);
674 
675 /* Assign object 'v' to the ith element of the sequence 'o'. Raise an exception
676    and return -1 on failure; return 0 on success.
677 
678    This is the equivalent of the Python statement o[i] = v. */
679 PyAPI_FUNC(int) PySequence_SetItem(PyObject *o, Py_ssize_t i, PyObject *v);
680 
681 /* Delete the 'i'-th element of the sequence 'v'. Returns -1 on failure.
682 
683    This is the equivalent of the Python statement: del o[i]. */
684 PyAPI_FUNC(int) PySequence_DelItem(PyObject *o, Py_ssize_t i);
685 
686 /* Assign the sequence object 'v' to the slice in sequence object 'o',
687    from 'i1' to 'i2'. Returns -1 on failure.
688 
689    This is the equivalent of the Python statement: o[i1:i2] = v. */
690 PyAPI_FUNC(int) PySequence_SetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2,
691                                     PyObject *v);
692 
693 /* Delete the slice in sequence object 'o' from 'i1' to 'i2'.
694    Returns -1 on failure.
695 
696    This is the equivalent of the Python statement: del o[i1:i2]. */
697 PyAPI_FUNC(int) PySequence_DelSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2);
698 
699 /* Returns the sequence 'o' as a tuple on success, and NULL on failure.
700 
701    This is equivalent to the Python expression: tuple(o). */
702 PyAPI_FUNC(PyObject *) PySequence_Tuple(PyObject *o);
703 
704 /* Returns the sequence 'o' as a list on success, and NULL on failure.
705    This is equivalent to the Python expression: list(o) */
706 PyAPI_FUNC(PyObject *) PySequence_List(PyObject *o);
707 
708 /* Return the sequence 'o' as a list, unless it's already a tuple or list.
709 
710    Use PySequence_Fast_GET_ITEM to access the members of this list, and
711    PySequence_Fast_GET_SIZE to get its length.
712 
713    Returns NULL on failure.  If the object does not support iteration, raises a
714    TypeError exception with 'm' as the message text. */
715 PyAPI_FUNC(PyObject *) PySequence_Fast(PyObject *o, const char* m);
716 
717 /* Return the size of the sequence 'o', assuming that 'o' was returned by
718    PySequence_Fast and is not NULL. */
719 #define PySequence_Fast_GET_SIZE(o) \
720     (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
721 
722 /* Return the 'i'-th element of the sequence 'o', assuming that o was returned
723    by PySequence_Fast, and that i is within bounds. */
724 #define PySequence_Fast_GET_ITEM(o, i)\
725      (PyList_Check(o) ? PyList_GET_ITEM(o, i) : PyTuple_GET_ITEM(o, i))
726 
727 /* Return a pointer to the underlying item array for
728    an object returned by PySequence_Fast */
729 #define PySequence_Fast_ITEMS(sf) \
730     (PyList_Check(sf) ? ((PyListObject *)(sf))->ob_item \
731                       : ((PyTupleObject *)(sf))->ob_item)
732 
733 /* Return the number of occurrences on value on 'o', that is, return
734    the number of keys for which o[key] == value.
735 
736    On failure, return -1.  This is equivalent to the Python expression:
737    o.count(value). */
738 PyAPI_FUNC(Py_ssize_t) PySequence_Count(PyObject *o, PyObject *value);
739 
740 /* Return 1 if 'ob' is in the sequence 'seq'; 0 if 'ob' is not in the sequence
741    'seq'; -1 on error.
742 
743    Use __contains__ if possible, else _PySequence_IterSearch(). */
744 PyAPI_FUNC(int) PySequence_Contains(PyObject *seq, PyObject *ob);
745 
746 /* For DLL-level backwards compatibility */
747 #undef PySequence_In
748 /* Determine if the sequence 'o' contains 'value'. If an item in 'o' is equal
749    to 'value', return 1, otherwise return 0. On error, return -1.
750 
751    This is equivalent to the Python expression: value in o. */
752 PyAPI_FUNC(int) PySequence_In(PyObject *o, PyObject *value);
753 
754 /* For source-level backwards compatibility */
755 #define PySequence_In PySequence_Contains
756 
757 
758 /* Return the first index for which o[i] == value.
759    On error, return -1.
760 
761    This is equivalent to the Python expression: o.index(value). */
762 PyAPI_FUNC(Py_ssize_t) PySequence_Index(PyObject *o, PyObject *value);
763 
764 
765 /* --- In-place versions of some of the above Sequence functions --- */
766 
767 /* Append sequence 'o2' to sequence 'o1', in-place when possible. Return the
768    resulting object, which could be 'o1', or NULL on failure.
769 
770   This is the equivalent of the Python expression: o1 += o2. */
771 PyAPI_FUNC(PyObject *) PySequence_InPlaceConcat(PyObject *o1, PyObject *o2);
772 
773 /* Repeat sequence 'o' by 'count', in-place when possible. Return the resulting
774    object, which could be 'o', or NULL on failure.
775 
776    This is the equivalent of the Python expression: o1 *= count.  */
777 PyAPI_FUNC(PyObject *) PySequence_InPlaceRepeat(PyObject *o, Py_ssize_t count);
778 
779 
780 /* === Mapping protocol ================================================= */
781 
782 /* Return 1 if the object provides mapping protocol, and 0 otherwise.
783 
784    This function always succeeds. */
785 PyAPI_FUNC(int) PyMapping_Check(PyObject *o);
786 
787 /* Returns the number of keys in mapping object 'o' on success, and -1 on
788   failure. This is equivalent to the Python expression: len(o). */
789 PyAPI_FUNC(Py_ssize_t) PyMapping_Size(PyObject *o);
790 
791 /* For DLL compatibility */
792 #undef PyMapping_Length
793 PyAPI_FUNC(Py_ssize_t) PyMapping_Length(PyObject *o);
794 #define PyMapping_Length PyMapping_Size
795 
796 
797 /* Implemented as a macro:
798 
799    int PyMapping_DelItemString(PyObject *o, const char *key);
800 
801    Remove the mapping for the string 'key' from the mapping 'o'. Returns -1 on
802    failure.
803 
804    This is equivalent to the Python statement: del o[key]. */
805 #define PyMapping_DelItemString(O,K) PyObject_DelItemString((O),(K))
806 
807 /* Implemented as a macro:
808 
809    int PyMapping_DelItem(PyObject *o, PyObject *key);
810 
811    Remove the mapping for the object 'key' from the mapping object 'o'.
812    Returns -1 on failure.
813 
814    This is equivalent to the Python statement: del o[key]. */
815 #define PyMapping_DelItem(O,K) PyObject_DelItem((O),(K))
816 
817 /* On success, return 1 if the mapping object 'o' has the key 'key',
818    and 0 otherwise.
819 
820    This is equivalent to the Python expression: key in o.
821 
822    This function always succeeds. */
823 PyAPI_FUNC(int) PyMapping_HasKeyString(PyObject *o, const char *key);
824 
825 /* Return 1 if the mapping object has the key 'key', and 0 otherwise.
826 
827    This is equivalent to the Python expression: key in o.
828 
829    This function always succeeds. */
830 PyAPI_FUNC(int) PyMapping_HasKey(PyObject *o, PyObject *key);
831 
832 /* On success, return a list or tuple of the keys in mapping object 'o'.
833    On failure, return NULL. */
834 PyAPI_FUNC(PyObject *) PyMapping_Keys(PyObject *o);
835 
836 /* On success, return a list or tuple of the values in mapping object 'o'.
837    On failure, return NULL. */
838 PyAPI_FUNC(PyObject *) PyMapping_Values(PyObject *o);
839 
840 /* On success, return a list or tuple of the items in mapping object 'o',
841    where each item is a tuple containing a key-value pair. On failure, return
842    NULL. */
843 PyAPI_FUNC(PyObject *) PyMapping_Items(PyObject *o);
844 
845 /* Return element of 'o' corresponding to the string 'key' or NULL on failure.
846 
847    This is the equivalent of the Python expression: o[key]. */
848 PyAPI_FUNC(PyObject *) PyMapping_GetItemString(PyObject *o,
849                                                const char *key);
850 
851 /* Map the string 'key' to the value 'v' in the mapping 'o'.
852    Returns -1 on failure.
853 
854    This is the equivalent of the Python statement: o[key]=v. */
855 PyAPI_FUNC(int) PyMapping_SetItemString(PyObject *o, const char *key,
856                                         PyObject *value);
857 
858 /* isinstance(object, typeorclass) */
859 PyAPI_FUNC(int) PyObject_IsInstance(PyObject *object, PyObject *typeorclass);
860 
861 /* issubclass(object, typeorclass) */
862 PyAPI_FUNC(int) PyObject_IsSubclass(PyObject *object, PyObject *typeorclass);
863 
864 #ifndef Py_LIMITED_API
865 #  define Py_CPYTHON_ABSTRACTOBJECT_H
866 #  include  "cpython/abstract.h"
867 #  undef Py_CPYTHON_ABSTRACTOBJECT_H
868 #endif
869 
870 #ifdef __cplusplus
871 }
872 #endif
873 #endif /* Py_ABSTRACTOBJECT_H */
874