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    useable as character based input for subsequent processing.
322 
323    Return 0 on success.  buffer and buffer_len are only set in case no error
324    occurs. Otherwise, -1 is returned and an exception set. */
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 /* Returns 1 if the object 'obj' provides iterator protocols, and 0 otherwise.
375 
376    This function always succeeds. */
377 PyAPI_FUNC(int) PyIter_Check(PyObject *);
378 
379 /* Takes an iterator object and calls its tp_iternext slot,
380    returning the next value.
381 
382    If the iterator is exhausted, this returns NULL without setting an
383    exception.
384 
385    NULL with an exception means an error occurred. */
386 PyAPI_FUNC(PyObject *) PyIter_Next(PyObject *);
387 
388 
389 /* === Number Protocol ================================================== */
390 
391 /* Returns 1 if the object 'o' provides numeric protocols, and 0 otherwise.
392 
393    This function always succeeds. */
394 PyAPI_FUNC(int) PyNumber_Check(PyObject *o);
395 
396 /* Returns the result of adding o1 and o2, or NULL on failure.
397 
398    This is the equivalent of the Python expression: o1 + o2. */
399 PyAPI_FUNC(PyObject *) PyNumber_Add(PyObject *o1, PyObject *o2);
400 
401 /* Returns the result of subtracting o2 from o1, or NULL on failure.
402 
403    This is the equivalent of the Python expression: o1 - o2. */
404 PyAPI_FUNC(PyObject *) PyNumber_Subtract(PyObject *o1, PyObject *o2);
405 
406 /* Returns the result of multiplying o1 and o2, or NULL on failure.
407 
408    This is the equivalent of the Python expression: o1 * o2. */
409 PyAPI_FUNC(PyObject *) PyNumber_Multiply(PyObject *o1, PyObject *o2);
410 
411 #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
412 /* This is the equivalent of the Python expression: o1 @ o2. */
413 PyAPI_FUNC(PyObject *) PyNumber_MatrixMultiply(PyObject *o1, PyObject *o2);
414 #endif
415 
416 /* Returns the result of dividing o1 by o2 giving an integral result,
417    or NULL on failure.
418 
419    This is the equivalent of the Python expression: o1 // o2. */
420 PyAPI_FUNC(PyObject *) PyNumber_FloorDivide(PyObject *o1, PyObject *o2);
421 
422 /* Returns the result of dividing o1 by o2 giving a float result, or NULL on
423    failure.
424 
425    This is the equivalent of the Python expression: o1 / o2. */
426 PyAPI_FUNC(PyObject *) PyNumber_TrueDivide(PyObject *o1, PyObject *o2);
427 
428 /* Returns the remainder of dividing o1 by o2, or NULL on failure.
429 
430    This is the equivalent of the Python expression: o1 % o2. */
431 PyAPI_FUNC(PyObject *) PyNumber_Remainder(PyObject *o1, PyObject *o2);
432 
433 /* See the built-in function divmod.
434 
435    Returns NULL on failure.
436 
437    This is the equivalent of the Python expression: divmod(o1, o2). */
438 PyAPI_FUNC(PyObject *) PyNumber_Divmod(PyObject *o1, PyObject *o2);
439 
440 /* See the built-in function pow. Returns NULL on failure.
441 
442    This is the equivalent of the Python expression: pow(o1, o2, o3),
443    where o3 is optional. */
444 PyAPI_FUNC(PyObject *) PyNumber_Power(PyObject *o1, PyObject *o2,
445                                       PyObject *o3);
446 
447 /* Returns the negation of o on success, or NULL on failure.
448 
449  This is the equivalent of the Python expression: -o. */
450 PyAPI_FUNC(PyObject *) PyNumber_Negative(PyObject *o);
451 
452 /* Returns the positive of o on success, or NULL on failure.
453 
454    This is the equivalent of the Python expression: +o. */
455 PyAPI_FUNC(PyObject *) PyNumber_Positive(PyObject *o);
456 
457 /* Returns the absolute value of 'o', or NULL on failure.
458 
459    This is the equivalent of the Python expression: abs(o). */
460 PyAPI_FUNC(PyObject *) PyNumber_Absolute(PyObject *o);
461 
462 /* Returns the bitwise negation of 'o' on success, or NULL on failure.
463 
464    This is the equivalent of the Python expression: ~o. */
465 PyAPI_FUNC(PyObject *) PyNumber_Invert(PyObject *o);
466 
467 /* Returns the result of left shifting o1 by o2 on success, or NULL on failure.
468 
469    This is the equivalent of the Python expression: o1 << o2. */
470 PyAPI_FUNC(PyObject *) PyNumber_Lshift(PyObject *o1, PyObject *o2);
471 
472 /* Returns the result of right shifting o1 by o2 on success, or NULL on
473    failure.
474 
475    This is the equivalent of the Python expression: o1 >> o2. */
476 PyAPI_FUNC(PyObject *) PyNumber_Rshift(PyObject *o1, PyObject *o2);
477 
478 /* Returns the result of bitwise and of o1 and o2 on success, or NULL on
479    failure.
480 
481    This is the equivalent of the Python expression: o1 & o2. */
482 PyAPI_FUNC(PyObject *) PyNumber_And(PyObject *o1, PyObject *o2);
483 
484 /* Returns the bitwise exclusive or of o1 by o2 on success, or NULL on failure.
485 
486    This is the equivalent of the Python expression: o1 ^ o2. */
487 PyAPI_FUNC(PyObject *) PyNumber_Xor(PyObject *o1, PyObject *o2);
488 
489 /* Returns the result of bitwise or on o1 and o2 on success, or NULL on
490    failure.
491 
492    This is the equivalent of the Python expression: o1 | o2. */
493 PyAPI_FUNC(PyObject *) PyNumber_Or(PyObject *o1, PyObject *o2);
494 
495 /* Returns 1 if obj is an index integer (has the nb_index slot of the
496    tp_as_number structure filled in), and 0 otherwise. */
497 PyAPI_FUNC(int) PyIndex_Check(PyObject *);
498 
499 /* Returns the object 'o' converted to a Python int, or NULL with an exception
500    raised on failure. */
501 PyAPI_FUNC(PyObject *) PyNumber_Index(PyObject *o);
502 
503 /* Returns the object 'o' converted to Py_ssize_t by going through
504    PyNumber_Index() first.
505 
506    If an overflow error occurs while converting the int to Py_ssize_t, then the
507    second argument 'exc' is the error-type to return.  If it is NULL, then the
508    overflow error is cleared and the value is clipped. */
509 PyAPI_FUNC(Py_ssize_t) PyNumber_AsSsize_t(PyObject *o, PyObject *exc);
510 
511 /* Returns the object 'o' converted to an integer object on success, or NULL
512    on failure.
513 
514    This is the equivalent of the Python expression: int(o). */
515 PyAPI_FUNC(PyObject *) PyNumber_Long(PyObject *o);
516 
517 /* Returns the object 'o' converted to a float object on success, or NULL
518   on failure.
519 
520   This is the equivalent of the Python expression: float(o). */
521 PyAPI_FUNC(PyObject *) PyNumber_Float(PyObject *o);
522 
523 
524 /* --- In-place variants of (some of) the above number protocol functions -- */
525 
526 /* Returns the result of adding o2 to o1, possibly in-place, or NULL
527    on failure.
528 
529    This is the equivalent of the Python expression: o1 += o2. */
530 PyAPI_FUNC(PyObject *) PyNumber_InPlaceAdd(PyObject *o1, PyObject *o2);
531 
532 /* Returns the result of subtracting o2 from o1, possibly in-place or
533    NULL on failure.
534 
535    This is the equivalent of the Python expression: o1 -= o2. */
536 PyAPI_FUNC(PyObject *) PyNumber_InPlaceSubtract(PyObject *o1, PyObject *o2);
537 
538 /* Returns the result of multiplying o1 by o2, possibly in-place, or NULL on
539    failure.
540 
541    This is the equivalent of the Python expression: o1 *= o2. */
542 PyAPI_FUNC(PyObject *) PyNumber_InPlaceMultiply(PyObject *o1, PyObject *o2);
543 
544 #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
545 /* This is the equivalent of the Python expression: o1 @= o2. */
546 PyAPI_FUNC(PyObject *) PyNumber_InPlaceMatrixMultiply(PyObject *o1, PyObject *o2);
547 #endif
548 
549 /* Returns the result of dividing o1 by o2 giving an integral result, possibly
550    in-place, or NULL on failure.
551 
552    This is the equivalent of the Python expression: o1 /= o2. */
553 PyAPI_FUNC(PyObject *) PyNumber_InPlaceFloorDivide(PyObject *o1,
554                                                    PyObject *o2);
555 
556 /* Returns the result of dividing o1 by o2 giving a float result, possibly
557    in-place, or null on failure.
558 
559    This is the equivalent of the Python expression: o1 /= o2. */
560 PyAPI_FUNC(PyObject *) PyNumber_InPlaceTrueDivide(PyObject *o1,
561                                                   PyObject *o2);
562 
563 /* Returns the remainder of dividing o1 by o2, possibly in-place, or NULL on
564    failure.
565 
566    This is the equivalent of the Python expression: o1 %= o2. */
567 PyAPI_FUNC(PyObject *) PyNumber_InPlaceRemainder(PyObject *o1, PyObject *o2);
568 
569 /* Returns the result of raising o1 to the power of o2, possibly in-place,
570    or NULL on failure.
571 
572    This is the equivalent of the Python expression: o1 **= o2,
573    or o1 = pow(o1, o2, o3) if o3 is present. */
574 PyAPI_FUNC(PyObject *) PyNumber_InPlacePower(PyObject *o1, PyObject *o2,
575                                              PyObject *o3);
576 
577 /* Returns the result of left shifting o1 by o2, possibly in-place, or NULL
578    on failure.
579 
580    This is the equivalent of the Python expression: o1 <<= o2. */
581 PyAPI_FUNC(PyObject *) PyNumber_InPlaceLshift(PyObject *o1, PyObject *o2);
582 
583 /* Returns the result of right shifting o1 by o2, possibly in-place or NULL
584    on failure.
585 
586    This is the equivalent of the Python expression: o1 >>= o2. */
587 PyAPI_FUNC(PyObject *) PyNumber_InPlaceRshift(PyObject *o1, PyObject *o2);
588 
589 /* Returns the result of bitwise and of o1 and o2, possibly in-place, or NULL
590    on failure.
591 
592    This is the equivalent of the Python expression: o1 &= o2. */
593 PyAPI_FUNC(PyObject *) PyNumber_InPlaceAnd(PyObject *o1, PyObject *o2);
594 
595 /* Returns the bitwise exclusive or of o1 by o2, possibly in-place, or NULL
596    on failure.
597 
598    This is the equivalent of the Python expression: o1 ^= o2. */
599 PyAPI_FUNC(PyObject *) PyNumber_InPlaceXor(PyObject *o1, PyObject *o2);
600 
601 /* Returns the result of bitwise or of o1 and o2, possibly in-place,
602    or NULL on failure.
603 
604    This is the equivalent of the Python expression: o1 |= o2. */
605 PyAPI_FUNC(PyObject *) PyNumber_InPlaceOr(PyObject *o1, PyObject *o2);
606 
607 /* Returns the integer n converted to a string with a base, with a base
608    marker of 0b, 0o or 0x prefixed if applicable.
609 
610    If n is not an int object, it is converted with PyNumber_Index first. */
611 PyAPI_FUNC(PyObject *) PyNumber_ToBase(PyObject *n, int base);
612 
613 
614 /* === Sequence protocol ================================================ */
615 
616 /* Return 1 if the object provides sequence protocol, and zero
617    otherwise.
618 
619    This function always succeeds. */
620 PyAPI_FUNC(int) PySequence_Check(PyObject *o);
621 
622 /* Return the size of sequence object o, or -1 on failure. */
623 PyAPI_FUNC(Py_ssize_t) PySequence_Size(PyObject *o);
624 
625 /* For DLL compatibility */
626 #undef PySequence_Length
627 PyAPI_FUNC(Py_ssize_t) PySequence_Length(PyObject *o);
628 #define PySequence_Length PySequence_Size
629 
630 
631 /* Return the concatenation of o1 and o2 on success, and NULL on failure.
632 
633    This is the equivalent of the Python expression: o1 + o2. */
634 PyAPI_FUNC(PyObject *) PySequence_Concat(PyObject *o1, PyObject *o2);
635 
636 /* Return the result of repeating sequence object 'o' 'count' times,
637   or NULL on failure.
638 
639   This is the equivalent of the Python expression: o * count. */
640 PyAPI_FUNC(PyObject *) PySequence_Repeat(PyObject *o, Py_ssize_t count);
641 
642 /* Return the ith element of o, or NULL on failure.
643 
644    This is the equivalent of the Python expression: o[i]. */
645 PyAPI_FUNC(PyObject *) PySequence_GetItem(PyObject *o, Py_ssize_t i);
646 
647 /* Return the slice of sequence object o between i1 and i2, or NULL on failure.
648 
649    This is the equivalent of the Python expression: o[i1:i2]. */
650 PyAPI_FUNC(PyObject *) PySequence_GetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2);
651 
652 /* Assign object 'v' to the ith element of the sequence 'o'. Raise an exception
653    and return -1 on failure; return 0 on success.
654 
655    This is the equivalent of the Python statement o[i] = v. */
656 PyAPI_FUNC(int) PySequence_SetItem(PyObject *o, Py_ssize_t i, PyObject *v);
657 
658 /* Delete the 'i'-th element of the sequence 'v'. Returns -1 on failure.
659 
660    This is the equivalent of the Python statement: del o[i]. */
661 PyAPI_FUNC(int) PySequence_DelItem(PyObject *o, Py_ssize_t i);
662 
663 /* Assign the sequence object 'v' to the slice in sequence object 'o',
664    from 'i1' to 'i2'. Returns -1 on failure.
665 
666    This is the equivalent of the Python statement: o[i1:i2] = v. */
667 PyAPI_FUNC(int) PySequence_SetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2,
668                                     PyObject *v);
669 
670 /* Delete the slice in sequence object 'o' from 'i1' to 'i2'.
671    Returns -1 on failure.
672 
673    This is the equivalent of the Python statement: del o[i1:i2]. */
674 PyAPI_FUNC(int) PySequence_DelSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2);
675 
676 /* Returns the sequence 'o' as a tuple on success, and NULL on failure.
677 
678    This is equivalent to the Python expression: tuple(o). */
679 PyAPI_FUNC(PyObject *) PySequence_Tuple(PyObject *o);
680 
681 /* Returns the sequence 'o' as a list on success, and NULL on failure.
682    This is equivalent to the Python expression: list(o) */
683 PyAPI_FUNC(PyObject *) PySequence_List(PyObject *o);
684 
685 /* Return the sequence 'o' as a list, unless it's already a tuple or list.
686 
687    Use PySequence_Fast_GET_ITEM to access the members of this list, and
688    PySequence_Fast_GET_SIZE to get its length.
689 
690    Returns NULL on failure.  If the object does not support iteration, raises a
691    TypeError exception with 'm' as the message text. */
692 PyAPI_FUNC(PyObject *) PySequence_Fast(PyObject *o, const char* m);
693 
694 /* Return the size of the sequence 'o', assuming that 'o' was returned by
695    PySequence_Fast and is not NULL. */
696 #define PySequence_Fast_GET_SIZE(o) \
697     (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
698 
699 /* Return the 'i'-th element of the sequence 'o', assuming that o was returned
700    by PySequence_Fast, and that i is within bounds. */
701 #define PySequence_Fast_GET_ITEM(o, i)\
702      (PyList_Check(o) ? PyList_GET_ITEM(o, i) : PyTuple_GET_ITEM(o, i))
703 
704 /* Return a pointer to the underlying item array for
705    an object returned by PySequence_Fast */
706 #define PySequence_Fast_ITEMS(sf) \
707     (PyList_Check(sf) ? ((PyListObject *)(sf))->ob_item \
708                       : ((PyTupleObject *)(sf))->ob_item)
709 
710 /* Return the number of occurrences on value on 'o', that is, return
711    the number of keys for which o[key] == value.
712 
713    On failure, return -1.  This is equivalent to the Python expression:
714    o.count(value). */
715 PyAPI_FUNC(Py_ssize_t) PySequence_Count(PyObject *o, PyObject *value);
716 
717 /* Return 1 if 'ob' is in the sequence 'seq'; 0 if 'ob' is not in the sequence
718    'seq'; -1 on error.
719 
720    Use __contains__ if possible, else _PySequence_IterSearch(). */
721 PyAPI_FUNC(int) PySequence_Contains(PyObject *seq, PyObject *ob);
722 
723 /* For DLL-level backwards compatibility */
724 #undef PySequence_In
725 /* Determine if the sequence 'o' contains 'value'. If an item in 'o' is equal
726    to 'value', return 1, otherwise return 0. On error, return -1.
727 
728    This is equivalent to the Python expression: value in o. */
729 PyAPI_FUNC(int) PySequence_In(PyObject *o, PyObject *value);
730 
731 /* For source-level backwards compatibility */
732 #define PySequence_In PySequence_Contains
733 
734 
735 /* Return the first index for which o[i] == value.
736    On error, return -1.
737 
738    This is equivalent to the Python expression: o.index(value). */
739 PyAPI_FUNC(Py_ssize_t) PySequence_Index(PyObject *o, PyObject *value);
740 
741 
742 /* --- In-place versions of some of the above Sequence functions --- */
743 
744 /* Append sequence 'o2' to sequence 'o1', in-place when possible. Return the
745    resulting object, which could be 'o1', or NULL on failure.
746 
747   This is the equivalent of the Python expression: o1 += o2. */
748 PyAPI_FUNC(PyObject *) PySequence_InPlaceConcat(PyObject *o1, PyObject *o2);
749 
750 /* Repeat sequence 'o' by 'count', in-place when possible. Return the resulting
751    object, which could be 'o', or NULL on failure.
752 
753    This is the equivalent of the Python expression: o1 *= count.  */
754 PyAPI_FUNC(PyObject *) PySequence_InPlaceRepeat(PyObject *o, Py_ssize_t count);
755 
756 
757 /* === Mapping protocol ================================================= */
758 
759 /* Return 1 if the object provides mapping protocol, and 0 otherwise.
760 
761    This function always succeeds. */
762 PyAPI_FUNC(int) PyMapping_Check(PyObject *o);
763 
764 /* Returns the number of keys in mapping object 'o' on success, and -1 on
765   failure. This is equivalent to the Python expression: len(o). */
766 PyAPI_FUNC(Py_ssize_t) PyMapping_Size(PyObject *o);
767 
768 /* For DLL compatibility */
769 #undef PyMapping_Length
770 PyAPI_FUNC(Py_ssize_t) PyMapping_Length(PyObject *o);
771 #define PyMapping_Length PyMapping_Size
772 
773 
774 /* Implemented as a macro:
775 
776    int PyMapping_DelItemString(PyObject *o, const char *key);
777 
778    Remove the mapping for the string 'key' from the mapping 'o'. Returns -1 on
779    failure.
780 
781    This is equivalent to the Python statement: del o[key]. */
782 #define PyMapping_DelItemString(O,K) PyObject_DelItemString((O),(K))
783 
784 /* Implemented as a macro:
785 
786    int PyMapping_DelItem(PyObject *o, PyObject *key);
787 
788    Remove the mapping for the object 'key' from the mapping object 'o'.
789    Returns -1 on failure.
790 
791    This is equivalent to the Python statement: del o[key]. */
792 #define PyMapping_DelItem(O,K) PyObject_DelItem((O),(K))
793 
794 /* On success, return 1 if the mapping object 'o' has the key 'key',
795    and 0 otherwise.
796 
797    This is equivalent to the Python expression: key in o.
798 
799    This function always succeeds. */
800 PyAPI_FUNC(int) PyMapping_HasKeyString(PyObject *o, const char *key);
801 
802 /* Return 1 if the mapping object has the key 'key', and 0 otherwise.
803 
804    This is equivalent to the Python expression: key in o.
805 
806    This function always succeeds. */
807 PyAPI_FUNC(int) PyMapping_HasKey(PyObject *o, PyObject *key);
808 
809 /* On success, return a list or tuple of the keys in mapping object 'o'.
810    On failure, return NULL. */
811 PyAPI_FUNC(PyObject *) PyMapping_Keys(PyObject *o);
812 
813 /* On success, return a list or tuple of the values in mapping object 'o'.
814    On failure, return NULL. */
815 PyAPI_FUNC(PyObject *) PyMapping_Values(PyObject *o);
816 
817 /* On success, return a list or tuple of the items in mapping object 'o',
818    where each item is a tuple containing a key-value pair. On failure, return
819    NULL. */
820 PyAPI_FUNC(PyObject *) PyMapping_Items(PyObject *o);
821 
822 /* Return element of 'o' corresponding to the string 'key' or NULL on failure.
823 
824    This is the equivalent of the Python expression: o[key]. */
825 PyAPI_FUNC(PyObject *) PyMapping_GetItemString(PyObject *o,
826                                                const char *key);
827 
828 /* Map the string 'key' to the value 'v' in the mapping 'o'.
829    Returns -1 on failure.
830 
831    This is the equivalent of the Python statement: o[key]=v. */
832 PyAPI_FUNC(int) PyMapping_SetItemString(PyObject *o, const char *key,
833                                         PyObject *value);
834 
835 /* isinstance(object, typeorclass) */
836 PyAPI_FUNC(int) PyObject_IsInstance(PyObject *object, PyObject *typeorclass);
837 
838 /* issubclass(object, typeorclass) */
839 PyAPI_FUNC(int) PyObject_IsSubclass(PyObject *object, PyObject *typeorclass);
840 
841 #ifndef Py_LIMITED_API
842 #  define Py_CPYTHON_ABSTRACTOBJECT_H
843 #  include  "cpython/abstract.h"
844 #  undef Py_CPYTHON_ABSTRACTOBJECT_H
845 #endif
846 
847 #ifdef __cplusplus
848 }
849 #endif
850 #endif /* Py_ABSTRACTOBJECT_H */
851