• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef Py_ABSTRACTOBJECT_H
2 #define Py_ABSTRACTOBJECT_H
3 #ifdef __cplusplus
4 extern "C" {
5 #endif
6 
7 #ifdef PY_SSIZE_T_CLEAN
8 #define PyObject_CallFunction _PyObject_CallFunction_SizeT
9 #define PyObject_CallMethod _PyObject_CallMethod_SizeT
10 #ifndef Py_LIMITED_API
11 #define _PyObject_CallMethodId _PyObject_CallMethodId_SizeT
12 #endif /* !Py_LIMITED_API */
13 #endif
14 
15 /* Abstract Object Interface (many thanks to Jim Fulton) */
16 
17 /*
18    PROPOSAL: A Generic Python Object Interface for Python C Modules
19 
20 Problem
21 
22   Python modules written in C that must access Python objects must do
23   so through routines whose interfaces are described by a set of
24   include files.  Unfortunately, these routines vary according to the
25   object accessed.  To use these routines, the C programmer must check
26   the type of the object being used and must call a routine based on
27   the object type.  For example, to access an element of a sequence,
28   the programmer must determine whether the sequence is a list or a
29   tuple:
30 
31     if(is_tupleobject(o))
32       e=gettupleitem(o,i)
33     else if(is_listitem(o))
34       e=getlistitem(o,i)
35 
36   If the programmer wants to get an item from another type of object
37   that provides sequence behavior, there is no clear way to do it
38   correctly.
39 
40   The persistent programmer may peruse object.h and find that the
41   _typeobject structure provides a means of invoking up to (currently
42   about) 41 special operators.  So, for example, a routine can get an
43   item from any object that provides sequence behavior. However, to
44   use this mechanism, the programmer must make their code dependent on
45   the current Python implementation.
46 
47   Also, certain semantics, especially memory management semantics, may
48   differ by the type of object being used.  Unfortunately, these
49   semantics are not clearly described in the current include files.
50   An abstract interface providing more consistent semantics is needed.
51 
52 Proposal
53 
54   I propose the creation of a standard interface (with an associated
55   library of routines and/or macros) for generically obtaining the
56   services of Python objects.  This proposal can be viewed as one
57   components of a Python C interface consisting of several components.
58 
59   From the viewpoint of C access to Python services, we have (as
60   suggested by Guido in off-line discussions):
61 
62   - "Very high level layer": two or three functions that let you exec or
63     eval arbitrary Python code given as a string in a module whose name is
64     given, passing C values in and getting C values out using
65     mkvalue/getargs style format strings.  This does not require the user
66     to declare any variables of type "PyObject *".  This should be enough
67     to write a simple application that gets Python code from the user,
68     execs it, and returns the output or errors.  (Error handling must also
69     be part of this API.)
70 
71   - "Abstract objects layer": which is the subject of this proposal.
72     It has many functions operating on objects, and lest you do many
73     things from C that you can also write in Python, without going
74     through the Python parser.
75 
76   - "Concrete objects layer": This is the public type-dependent
77     interface provided by the standard built-in types, such as floats,
78     strings, and lists.  This interface exists and is currently
79     documented by the collection of include files provided with the
80     Python distributions.
81 
82   From the point of view of Python accessing services provided by C
83   modules:
84 
85   - "Python module interface": this interface consist of the basic
86     routines used to define modules and their members.  Most of the
87     current extensions-writing guide deals with this interface.
88 
89   - "Built-in object interface": this is the interface that a new
90     built-in type must provide and the mechanisms and rules that a
91     developer of a new built-in type must use and follow.
92 
93   This proposal is a "first-cut" that is intended to spur
94   discussion. See especially the lists of notes.
95 
96   The Python C object interface will provide four protocols: object,
97   numeric, sequence, and mapping.  Each protocol consists of a
98   collection of related operations.  If an operation that is not
99   provided by a particular type is invoked, then a standard exception,
100   NotImplementedError is raised with an operation name as an argument.
101   In addition, for convenience this interface defines a set of
102   constructors for building objects of built-in types.  This is needed
103   so new objects can be returned from C functions that otherwise treat
104   objects generically.
105 
106 Memory Management
107 
108   For all of the functions described in this proposal, if a function
109   retains a reference to a Python object passed as an argument, then the
110   function will increase the reference count of the object.  It is
111   unnecessary for the caller to increase the reference count of an
112   argument in anticipation of the object's retention.
113 
114   All Python objects returned from functions should be treated as new
115   objects.  Functions that return objects assume that the caller will
116   retain a reference and the reference count of the object has already
117   been incremented to account for this fact.  A caller that does not
118   retain a reference to an object that is returned from a function
119   must decrement the reference count of the object (using
120   DECREF(object)) to prevent memory leaks.
121 
122   Note that the behavior mentioned here is different from the current
123   behavior for some objects (e.g. lists and tuples) when certain
124   type-specific routines are called directly (e.g. setlistitem).  The
125   proposed abstraction layer will provide a consistent memory
126   management interface, correcting for inconsistent behavior for some
127   built-in types.
128 
129 Protocols
130 
131 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/
132 
133 /*  Object Protocol: */
134 
135      /* Implemented elsewhere:
136 
137      int PyObject_Print(PyObject *o, FILE *fp, int flags);
138 
139      Print an object, o, on file, fp.  Returns -1 on
140      error.  The flags argument is used to enable certain printing
141      options. The only option currently supported is Py_Print_RAW.
142 
143      (What should be said about Py_Print_RAW?)
144 
145        */
146 
147      /* Implemented elsewhere:
148 
149      int PyObject_HasAttrString(PyObject *o, const char *attr_name);
150 
151      Returns 1 if o has the attribute attr_name, and 0 otherwise.
152      This is equivalent to the Python expression:
153      hasattr(o,attr_name).
154 
155      This function always succeeds.
156 
157        */
158 
159      /* Implemented elsewhere:
160 
161      PyObject* PyObject_GetAttrString(PyObject *o, const char *attr_name);
162 
163      Retrieve an attributed named attr_name form object o.
164      Returns the attribute value on success, or NULL on failure.
165      This is the equivalent of the Python expression: o.attr_name.
166 
167        */
168 
169      /* Implemented elsewhere:
170 
171      int PyObject_HasAttr(PyObject *o, PyObject *attr_name);
172 
173      Returns 1 if o has the attribute attr_name, and 0 otherwise.
174      This is equivalent to the Python expression:
175      hasattr(o,attr_name).
176 
177      This function always succeeds.
178 
179        */
180 
181      /* Implemented elsewhere:
182 
183      PyObject* PyObject_GetAttr(PyObject *o, PyObject *attr_name);
184 
185      Retrieve an attributed named attr_name form object o.
186      Returns the attribute value on success, or NULL on failure.
187      This is the equivalent of the Python expression: o.attr_name.
188 
189        */
190 
191 
192      /* Implemented elsewhere:
193 
194      int PyObject_SetAttrString(PyObject *o, const char *attr_name, PyObject *v);
195 
196      Set the value of the attribute named attr_name, for object o,
197      to the value v. Raise an exception and return -1 on failure; return 0 on
198      success.  This is the equivalent of the Python statement o.attr_name=v.
199 
200        */
201 
202      /* Implemented elsewhere:
203 
204      int PyObject_SetAttr(PyObject *o, PyObject *attr_name, PyObject *v);
205 
206      Set the value of the attribute named attr_name, for object o,
207      to the value v. Raise an exception and return -1 on failure; return 0 on
208      success.  This is the equivalent of the Python statement o.attr_name=v.
209 
210        */
211 
212      /* implemented as a macro:
213 
214      int PyObject_DelAttrString(PyObject *o, const char *attr_name);
215 
216      Delete attribute named attr_name, for object o. Returns
217      -1 on failure.  This is the equivalent of the Python
218      statement: del o.attr_name.
219 
220        */
221 #define  PyObject_DelAttrString(O,A) PyObject_SetAttrString((O),(A),NULL)
222 
223      /* implemented as a macro:
224 
225      int PyObject_DelAttr(PyObject *o, PyObject *attr_name);
226 
227      Delete attribute named attr_name, for object o. Returns -1
228      on failure.  This is the equivalent of the Python
229      statement: del o.attr_name.
230 
231        */
232 #define  PyObject_DelAttr(O,A) PyObject_SetAttr((O),(A),NULL)
233 
234      /* Implemented elsewhere:
235 
236      PyObject *PyObject_Repr(PyObject *o);
237 
238      Compute the string representation of object, o.  Returns the
239      string representation on success, NULL on failure.  This is
240      the equivalent of the Python expression: repr(o).
241 
242      Called by the repr() built-in function.
243 
244        */
245 
246      /* Implemented elsewhere:
247 
248      PyObject *PyObject_Str(PyObject *o);
249 
250      Compute the string representation of object, o.  Returns the
251      string representation on success, NULL on failure.  This is
252      the equivalent of the Python expression: str(o).)
253 
254      Called by the str() and print() built-in functions.
255 
256        */
257 
258        /* Declared elsewhere
259 
260      PyAPI_FUNC(int) PyCallable_Check(PyObject *o);
261 
262      Determine if the object, o, is callable.  Return 1 if the
263      object is callable and 0 otherwise.
264 
265      This function always succeeds.
266        */
267 
268      PyAPI_FUNC(PyObject *) PyObject_Call(PyObject *callable_object,
269                                           PyObject *args, PyObject *kwargs);
270 
271        /*
272      Call a callable Python object, callable_object, with
273      arguments and keywords arguments.  The 'args' argument can not be
274      NULL.
275        */
276 
277 #ifndef Py_LIMITED_API
278     PyAPI_FUNC(PyObject*) _PyStack_AsTuple(
279         PyObject **stack,
280         Py_ssize_t nargs);
281 
282     /* Convert keyword arguments from the (stack, kwnames) format to a Python
283        dictionary.
284 
285        kwnames must only contains str strings, no subclass, and all keys must
286        be unique. kwnames is not checked, usually these checks are done before or later
287        calling _PyStack_AsDict(). For example, _PyArg_ParseStack() raises an
288        error if a key is not a string. */
289     PyAPI_FUNC(PyObject *) _PyStack_AsDict(
290         PyObject **values,
291         PyObject *kwnames);
292 
293     /* Convert (args, nargs, kwargs) into a (stack, nargs, kwnames).
294 
295        Return a new stack which should be released by PyMem_Free(), or return
296        args unchanged if kwargs is NULL or an empty dictionary.
297 
298        The stack uses borrowed references.
299 
300        The type of keyword keys is not checked, these checks should be done
301        later (ex: _PyArg_ParseStack). */
302     PyAPI_FUNC(PyObject **) _PyStack_UnpackDict(
303         PyObject **args,
304         Py_ssize_t nargs,
305         PyObject *kwargs,
306         PyObject **kwnames,
307         PyObject *func);
308 
309     /* Call the callable object func with the "fast call" calling convention:
310        args is a C array for positional arguments (nargs is the number of
311        positional arguments), kwargs is a dictionary for keyword arguments.
312 
313        If nargs is equal to zero, args can be NULL. kwargs can be NULL.
314        nargs must be greater or equal to zero.
315 
316        Return the result on success. Raise an exception on return NULL on
317        error. */
318     PyAPI_FUNC(PyObject *) _PyObject_FastCallDict(PyObject *func,
319                                                   PyObject **args, Py_ssize_t nargs,
320                                                   PyObject *kwargs);
321 
322     /* Call the callable object func with the "fast call" calling convention:
323        args is a C array for positional arguments followed by values of
324        keyword arguments. Keys of keyword arguments are stored as a tuple
325        of strings in kwnames. nargs is the number of positional parameters at
326        the beginning of stack. The size of kwnames gives the number of keyword
327        values in the stack after positional arguments.
328 
329        kwnames must only contains str strings, no subclass, and all keys must
330        be unique.
331 
332        If nargs is equal to zero and there is no keyword argument (kwnames is
333        NULL or its size is zero), args can be NULL.
334 
335        Return the result on success. Raise an exception and return NULL on
336        error. */
337     PyAPI_FUNC(PyObject *) _PyObject_FastCallKeywords
338        (PyObject *func,
339         PyObject **args,
340         Py_ssize_t nargs,
341         PyObject *kwnames);
342 
343 #define _PyObject_FastCall(func, args, nargs) \
344     _PyObject_FastCallDict((func), (args), (nargs), NULL)
345 
346 #define _PyObject_CallNoArg(func) \
347     _PyObject_FastCall((func), NULL, 0)
348 
349 #define _PyObject_CallArg1(func, arg) \
350     _PyObject_FastCall((func), &(arg), 1)
351 
352     PyAPI_FUNC(PyObject *) _PyObject_Call_Prepend(PyObject *func,
353                                                   PyObject *obj, PyObject *args,
354                                                   PyObject *kwargs);
355 
356      PyAPI_FUNC(PyObject *) _Py_CheckFunctionResult(PyObject *func,
357                                                     PyObject *result,
358                                                     const char *where);
359 #endif   /* Py_LIMITED_API */
360 
361      PyAPI_FUNC(PyObject *) PyObject_CallObject(PyObject *callable_object,
362                                                 PyObject *args);
363 
364        /*
365      Call a callable Python object, callable_object, with
366      arguments given by the tuple, args.  If no arguments are
367      needed, then args may be NULL.  Returns the result of the
368      call on success, or NULL on failure.  This is the equivalent
369      of the Python expression: o(*args).
370        */
371 
372      PyAPI_FUNC(PyObject *) PyObject_CallFunction(PyObject *callable_object,
373                                                   const char *format, ...);
374 
375        /*
376      Call a callable Python object, callable_object, with a
377      variable number of C arguments. The C arguments are described
378      using a mkvalue-style format string. The format may be NULL,
379      indicating that no arguments are provided.  Returns the
380      result of the call on success, or NULL on failure.  This is
381      the equivalent of the Python expression: o(*args).
382        */
383 
384 
385      PyAPI_FUNC(PyObject *) PyObject_CallMethod(PyObject *o,
386                                                 const char *method,
387                                                 const char *format, ...);
388 
389        /*
390      Call the method named m of object o with a variable number of
391      C arguments.  The C arguments are described by a mkvalue
392      format string.  The format may be NULL, indicating that no
393      arguments are provided. Returns the result of the call on
394      success, or NULL on failure.  This is the equivalent of the
395      Python expression: o.method(args).
396        */
397 
398 #ifndef Py_LIMITED_API
399      PyAPI_FUNC(PyObject *) _PyObject_CallMethodId(PyObject *o,
400                                                    _Py_Identifier *method,
401                                                    const char *format, ...);
402 
403        /*
404          Like PyObject_CallMethod, but expect a _Py_Identifier* as the
405          method name.
406        */
407 #endif /* !Py_LIMITED_API */
408 
409      PyAPI_FUNC(PyObject *) _PyObject_CallFunction_SizeT(PyObject *callable,
410                                                          const char *format,
411                                                          ...);
412      PyAPI_FUNC(PyObject *) _PyObject_CallMethod_SizeT(PyObject *o,
413                                                        const char *name,
414                                                        const char *format,
415                                                        ...);
416 #ifndef Py_LIMITED_API
417      PyAPI_FUNC(PyObject *) _PyObject_CallMethodId_SizeT(PyObject *o,
418                                                        _Py_Identifier *name,
419                                                        const char *format,
420                                                        ...);
421 #endif /* !Py_LIMITED_API */
422 
423      PyAPI_FUNC(PyObject *) PyObject_CallFunctionObjArgs(PyObject *callable,
424                                                          ...);
425 
426        /*
427      Call a callable Python object, callable_object, with a
428      variable number of C arguments.  The C arguments are provided
429      as PyObject * values, terminated by a NULL.  Returns the
430      result of the call on success, or NULL on failure.  This is
431      the equivalent of the Python expression: o(*args).
432        */
433 
434 
435      PyAPI_FUNC(PyObject *) PyObject_CallMethodObjArgs(PyObject *o,
436                                                        PyObject *method, ...);
437 #ifndef Py_LIMITED_API
438      PyAPI_FUNC(PyObject *) _PyObject_CallMethodIdObjArgs(PyObject *o,
439                                                struct _Py_Identifier *method,
440                                                ...);
441 #endif /* !Py_LIMITED_API */
442 
443        /*
444      Call the method named m of object o with a variable number of
445      C arguments.  The C arguments are provided as PyObject *
446      values, terminated by NULL.  Returns the result of the call
447      on success, or NULL on failure.  This is the equivalent of
448      the Python expression: o.method(args).
449        */
450 
451 
452      /* Implemented elsewhere:
453 
454      long PyObject_Hash(PyObject *o);
455 
456      Compute and return the hash, hash_value, of an object, o.  On
457      failure, return -1.  This is the equivalent of the Python
458      expression: hash(o).
459        */
460 
461 
462      /* Implemented elsewhere:
463 
464      int PyObject_IsTrue(PyObject *o);
465 
466      Returns 1 if the object, o, is considered to be true, 0 if o is
467      considered to be false and -1 on failure. This is equivalent to the
468      Python expression: not not o
469        */
470 
471      /* Implemented elsewhere:
472 
473      int PyObject_Not(PyObject *o);
474 
475      Returns 0 if the object, o, is considered to be true, 1 if o is
476      considered to be false and -1 on failure. This is equivalent to the
477      Python expression: not o
478        */
479 
480      PyAPI_FUNC(PyObject *) PyObject_Type(PyObject *o);
481 
482        /*
483      On success, returns a type object corresponding to the object
484      type of object o. On failure, returns NULL.  This is
485      equivalent to the Python expression: type(o).
486        */
487 
488      PyAPI_FUNC(Py_ssize_t) PyObject_Size(PyObject *o);
489 
490        /*
491      Return the size of object o.  If the object, o, provides
492      both sequence and mapping protocols, the sequence size is
493      returned. On error, -1 is returned.  This is the equivalent
494      to the Python expression: len(o).
495        */
496 
497        /* For DLL compatibility */
498 #undef PyObject_Length
499      PyAPI_FUNC(Py_ssize_t) PyObject_Length(PyObject *o);
500 #define PyObject_Length PyObject_Size
501 
502 #ifndef Py_LIMITED_API
503      PyAPI_FUNC(int) _PyObject_HasLen(PyObject *o);
504      PyAPI_FUNC(Py_ssize_t) PyObject_LengthHint(PyObject *o, Py_ssize_t);
505 #endif
506 
507        /*
508      Guess the size of object o using len(o) or o.__length_hint__().
509      If neither of those return a non-negative value, then return the
510      default value.  If one of the calls fails, this function returns -1.
511        */
512 
513      PyAPI_FUNC(PyObject *) PyObject_GetItem(PyObject *o, PyObject *key);
514 
515        /*
516      Return element of o corresponding to the object, key, or NULL
517      on failure. This is the equivalent of the Python expression:
518      o[key].
519        */
520 
521      PyAPI_FUNC(int) PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v);
522 
523        /*
524      Map the object key to the value v.  Raise an exception and return -1
525      on failure; return 0 on success.  This is the equivalent of the Python
526      statement o[key]=v.
527        */
528 
529      PyAPI_FUNC(int) PyObject_DelItemString(PyObject *o, const char *key);
530 
531        /*
532      Remove the mapping for object, key, from the object *o.
533      Returns -1 on failure.  This is equivalent to
534      the Python statement: del o[key].
535        */
536 
537      PyAPI_FUNC(int) PyObject_DelItem(PyObject *o, PyObject *key);
538 
539        /*
540      Delete the mapping for key from *o.  Returns -1 on failure.
541      This is the equivalent of the Python statement: del o[key].
542        */
543 
544     /* old buffer API
545        FIXME:  usage of these should all be replaced in Python itself
546        but for backwards compatibility we will implement them.
547        Their usage without a corresponding "unlock" mechanism
548        may create issues (but they would already be there). */
549 
550      PyAPI_FUNC(int) PyObject_AsCharBuffer(PyObject *obj,
551                                            const char **buffer,
552                                            Py_ssize_t *buffer_len);
553 
554        /*
555       Takes an arbitrary object which must support the (character,
556       single segment) buffer interface and returns a pointer to a
557       read-only memory location useable as character based input
558       for subsequent processing.
559 
560       0 is returned on success.  buffer and buffer_len are only
561       set in case no error occurs. Otherwise, -1 is returned and
562       an exception set.
563        */
564 
565      PyAPI_FUNC(int) PyObject_CheckReadBuffer(PyObject *obj);
566 
567       /*
568       Checks whether an arbitrary object supports the (character,
569       single segment) buffer interface.  Returns 1 on success, 0
570       on failure.
571       */
572 
573      PyAPI_FUNC(int) PyObject_AsReadBuffer(PyObject *obj,
574                                            const void **buffer,
575                                            Py_ssize_t *buffer_len);
576 
577        /*
578       Same as PyObject_AsCharBuffer() except that this API expects
579       (readable, single segment) buffer interface and returns a
580       pointer to a read-only memory location which can contain
581       arbitrary data.
582 
583       0 is returned on success.  buffer and buffer_len are only
584       set in case no error occurs.  Otherwise, -1 is returned and
585       an exception set.
586        */
587 
588      PyAPI_FUNC(int) PyObject_AsWriteBuffer(PyObject *obj,
589                                             void **buffer,
590                                             Py_ssize_t *buffer_len);
591 
592        /*
593       Takes an arbitrary object which must support the (writable,
594       single segment) buffer interface and returns a pointer to a
595       writable memory location in buffer of size buffer_len.
596 
597       0 is returned on success.  buffer and buffer_len are only
598       set in case no error occurs. Otherwise, -1 is returned and
599       an exception set.
600        */
601 
602     /* new buffer API */
603 
604 #ifndef Py_LIMITED_API
605 #define PyObject_CheckBuffer(obj) \
606     (((obj)->ob_type->tp_as_buffer != NULL) &&  \
607      ((obj)->ob_type->tp_as_buffer->bf_getbuffer != NULL))
608 
609     /* Return 1 if the getbuffer function is available, otherwise
610        return 0 */
611 
612      PyAPI_FUNC(int) PyObject_GetBuffer(PyObject *obj, Py_buffer *view,
613                                         int flags);
614 
615     /* This is a C-API version of the getbuffer function call.  It checks
616        to make sure object has the required function pointer and issues the
617        call.  Returns -1 and raises an error on failure and returns 0 on
618        success
619     */
620 
621 
622      PyAPI_FUNC(void *) PyBuffer_GetPointer(Py_buffer *view, Py_ssize_t *indices);
623 
624     /* Get the memory area pointed to by the indices for the buffer given.
625        Note that view->ndim is the assumed size of indices
626     */
627 
628      PyAPI_FUNC(int) PyBuffer_SizeFromFormat(const char *);
629 
630     /* Return the implied itemsize of the data-format area from a
631        struct-style description */
632 
633 
634 
635      /* Implementation in memoryobject.c */
636      PyAPI_FUNC(int) PyBuffer_ToContiguous(void *buf, Py_buffer *view,
637                                            Py_ssize_t len, char order);
638 
639      PyAPI_FUNC(int) PyBuffer_FromContiguous(Py_buffer *view, void *buf,
640                                              Py_ssize_t len, char order);
641 
642 
643     /* Copy len bytes of data from the contiguous chunk of memory
644        pointed to by buf into the buffer exported by obj.  Return
645        0 on success and return -1 and raise a PyBuffer_Error on
646        error (i.e. the object does not have a buffer interface or
647        it is not working).
648 
649        If fort is 'F', then if the object is multi-dimensional,
650        then the data will be copied into the array in
651        Fortran-style (first dimension varies the fastest).  If
652        fort is 'C', then the data will be copied into the array
653        in C-style (last dimension varies the fastest).  If fort
654        is 'A', then it does not matter and the copy will be made
655        in whatever way is more efficient.
656 
657     */
658 
659      PyAPI_FUNC(int) PyObject_CopyData(PyObject *dest, PyObject *src);
660 
661     /* Copy the data from the src buffer to the buffer of destination
662      */
663 
664      PyAPI_FUNC(int) PyBuffer_IsContiguous(const Py_buffer *view, char fort);
665 
666 
667      PyAPI_FUNC(void) PyBuffer_FillContiguousStrides(int ndims,
668                                                     Py_ssize_t *shape,
669                                                     Py_ssize_t *strides,
670                                                     int itemsize,
671                                                     char fort);
672 
673     /*  Fill the strides array with byte-strides of a contiguous
674         (Fortran-style if fort is 'F' or C-style otherwise)
675         array of the given shape with the given number of bytes
676         per element.
677     */
678 
679      PyAPI_FUNC(int) PyBuffer_FillInfo(Py_buffer *view, PyObject *o, void *buf,
680                                        Py_ssize_t len, int readonly,
681                                        int flags);
682 
683     /* Fills in a buffer-info structure correctly for an exporter
684        that can only share a contiguous chunk of memory of
685        "unsigned bytes" of the given length. Returns 0 on success
686        and -1 (with raising an error) on error.
687      */
688 
689      PyAPI_FUNC(void) PyBuffer_Release(Py_buffer *view);
690 
691        /* Releases a Py_buffer obtained from getbuffer ParseTuple's s*.
692     */
693 #endif /* Py_LIMITED_API */
694 
695      PyAPI_FUNC(PyObject *) PyObject_Format(PyObject* obj,
696                                             PyObject *format_spec);
697        /*
698      Takes an arbitrary object and returns the result of
699      calling obj.__format__(format_spec).
700        */
701 
702 /* Iterators */
703 
704      PyAPI_FUNC(PyObject *) PyObject_GetIter(PyObject *);
705      /* Takes an object and returns an iterator for it.
706     This is typically a new iterator but if the argument
707     is an iterator, this returns itself. */
708 
709 #define PyIter_Check(obj) \
710     ((obj)->ob_type->tp_iternext != NULL && \
711      (obj)->ob_type->tp_iternext != &_PyObject_NextNotImplemented)
712 
713      PyAPI_FUNC(PyObject *) PyIter_Next(PyObject *);
714      /* Takes an iterator object and calls its tp_iternext slot,
715     returning the next value.  If the iterator is exhausted,
716     this returns NULL without setting an exception.
717     NULL with an exception means an error occurred. */
718 
719 /*  Number Protocol:*/
720 
721      PyAPI_FUNC(int) PyNumber_Check(PyObject *o);
722 
723        /*
724      Returns 1 if the object, o, provides numeric protocols, and
725      false otherwise.
726 
727      This function always succeeds.
728        */
729 
730      PyAPI_FUNC(PyObject *) PyNumber_Add(PyObject *o1, PyObject *o2);
731 
732        /*
733      Returns the result of adding o1 and o2, or null on failure.
734      This is the equivalent of the Python expression: o1+o2.
735        */
736 
737      PyAPI_FUNC(PyObject *) PyNumber_Subtract(PyObject *o1, PyObject *o2);
738 
739        /*
740      Returns the result of subtracting o2 from o1, or null on
741      failure.  This is the equivalent of the Python expression:
742      o1-o2.
743        */
744 
745      PyAPI_FUNC(PyObject *) PyNumber_Multiply(PyObject *o1, PyObject *o2);
746 
747        /*
748      Returns the result of multiplying o1 and o2, or null on
749      failure.  This is the equivalent of the Python expression:
750      o1*o2.
751        */
752 
753 #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
754      PyAPI_FUNC(PyObject *) PyNumber_MatrixMultiply(PyObject *o1, PyObject *o2);
755 
756        /*
757      This is the equivalent of the Python expression: o1 @ o2.
758        */
759 #endif
760 
761      PyAPI_FUNC(PyObject *) PyNumber_FloorDivide(PyObject *o1, PyObject *o2);
762 
763        /*
764      Returns the result of dividing o1 by o2 giving an integral result,
765      or null on failure.
766      This is the equivalent of the Python expression: o1//o2.
767        */
768 
769      PyAPI_FUNC(PyObject *) PyNumber_TrueDivide(PyObject *o1, PyObject *o2);
770 
771        /*
772      Returns the result of dividing o1 by o2 giving a float result,
773      or null on failure.
774      This is the equivalent of the Python expression: o1/o2.
775        */
776 
777      PyAPI_FUNC(PyObject *) PyNumber_Remainder(PyObject *o1, PyObject *o2);
778 
779        /*
780      Returns the remainder of dividing o1 by o2, or null on
781      failure.  This is the equivalent of the Python expression:
782      o1%o2.
783        */
784 
785      PyAPI_FUNC(PyObject *) PyNumber_Divmod(PyObject *o1, PyObject *o2);
786 
787        /*
788      See the built-in function divmod.  Returns NULL on failure.
789      This is the equivalent of the Python expression:
790      divmod(o1,o2).
791        */
792 
793      PyAPI_FUNC(PyObject *) PyNumber_Power(PyObject *o1, PyObject *o2,
794                                            PyObject *o3);
795 
796        /*
797      See the built-in function pow.  Returns NULL on failure.
798      This is the equivalent of the Python expression:
799      pow(o1,o2,o3), where o3 is optional.
800        */
801 
802      PyAPI_FUNC(PyObject *) PyNumber_Negative(PyObject *o);
803 
804        /*
805      Returns the negation of o on success, or null on failure.
806      This is the equivalent of the Python expression: -o.
807        */
808 
809      PyAPI_FUNC(PyObject *) PyNumber_Positive(PyObject *o);
810 
811        /*
812      Returns the (what?) of o on success, or NULL on failure.
813      This is the equivalent of the Python expression: +o.
814        */
815 
816      PyAPI_FUNC(PyObject *) PyNumber_Absolute(PyObject *o);
817 
818        /*
819      Returns the absolute value of o, or null on failure.  This is
820      the equivalent of the Python expression: abs(o).
821        */
822 
823      PyAPI_FUNC(PyObject *) PyNumber_Invert(PyObject *o);
824 
825        /*
826      Returns the bitwise negation of o on success, or NULL on
827      failure.  This is the equivalent of the Python expression:
828      ~o.
829        */
830 
831      PyAPI_FUNC(PyObject *) PyNumber_Lshift(PyObject *o1, PyObject *o2);
832 
833        /*
834      Returns the result of left shifting o1 by o2 on success, or
835      NULL on failure.  This is the equivalent of the Python
836      expression: o1 << o2.
837        */
838 
839      PyAPI_FUNC(PyObject *) PyNumber_Rshift(PyObject *o1, PyObject *o2);
840 
841        /*
842      Returns the result of right shifting o1 by o2 on success, or
843      NULL on failure.  This is the equivalent of the Python
844      expression: o1 >> o2.
845        */
846 
847      PyAPI_FUNC(PyObject *) PyNumber_And(PyObject *o1, PyObject *o2);
848 
849        /*
850      Returns the result of bitwise and of o1 and o2 on success, or
851      NULL on failure. This is the equivalent of the Python
852      expression: o1&o2.
853 
854        */
855 
856      PyAPI_FUNC(PyObject *) PyNumber_Xor(PyObject *o1, PyObject *o2);
857 
858        /*
859      Returns the bitwise exclusive or of o1 by o2 on success, or
860      NULL on failure.  This is the equivalent of the Python
861      expression: o1^o2.
862        */
863 
864      PyAPI_FUNC(PyObject *) PyNumber_Or(PyObject *o1, PyObject *o2);
865 
866        /*
867      Returns the result of bitwise or on o1 and o2 on success, or
868      NULL on failure.  This is the equivalent of the Python
869      expression: o1|o2.
870        */
871 
872 #define PyIndex_Check(obj) \
873    ((obj)->ob_type->tp_as_number != NULL && \
874     (obj)->ob_type->tp_as_number->nb_index != NULL)
875 
876      PyAPI_FUNC(PyObject *) PyNumber_Index(PyObject *o);
877 
878        /*
879      Returns the object converted to a Python int
880      or NULL with an error raised on failure.
881        */
882 
883      PyAPI_FUNC(Py_ssize_t) PyNumber_AsSsize_t(PyObject *o, PyObject *exc);
884 
885        /*
886     Returns the object converted to Py_ssize_t by going through
887     PyNumber_Index first.  If an overflow error occurs while
888     converting the int to Py_ssize_t, then the second argument
889     is the error-type to return.  If it is NULL, then the overflow error
890     is cleared and the value is clipped.
891        */
892 
893      PyAPI_FUNC(PyObject *) PyNumber_Long(PyObject *o);
894 
895        /*
896      Returns the o converted to an integer object on success, or
897      NULL on failure.  This is the equivalent of the Python
898      expression: int(o).
899        */
900 
901      PyAPI_FUNC(PyObject *) PyNumber_Float(PyObject *o);
902 
903        /*
904      Returns the o converted to a float object on success, or NULL
905      on failure.  This is the equivalent of the Python expression:
906      float(o).
907        */
908 
909 /*  In-place variants of (some of) the above number protocol functions */
910 
911      PyAPI_FUNC(PyObject *) PyNumber_InPlaceAdd(PyObject *o1, PyObject *o2);
912 
913        /*
914      Returns the result of adding o2 to o1, possibly in-place, or null
915      on failure.  This is the equivalent of the Python expression:
916      o1 += o2.
917        */
918 
919      PyAPI_FUNC(PyObject *) PyNumber_InPlaceSubtract(PyObject *o1, PyObject *o2);
920 
921        /*
922      Returns the result of subtracting o2 from o1, possibly in-place or
923      null on failure.  This is the equivalent of the Python expression:
924      o1 -= o2.
925        */
926 
927      PyAPI_FUNC(PyObject *) PyNumber_InPlaceMultiply(PyObject *o1, PyObject *o2);
928 
929        /*
930      Returns the result of multiplying o1 by o2, possibly in-place, or
931      null on failure.  This is the equivalent of the Python expression:
932      o1 *= o2.
933        */
934 
935 #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
936      PyAPI_FUNC(PyObject *) PyNumber_InPlaceMatrixMultiply(PyObject *o1, PyObject *o2);
937 
938        /*
939      This is the equivalent of the Python expression: o1 @= o2.
940        */
941 #endif
942 
943      PyAPI_FUNC(PyObject *) PyNumber_InPlaceFloorDivide(PyObject *o1,
944                                                         PyObject *o2);
945 
946        /*
947      Returns the result of dividing o1 by o2 giving an integral result,
948      possibly in-place, or null on failure.
949      This is the equivalent of the Python expression:
950      o1 /= o2.
951        */
952 
953      PyAPI_FUNC(PyObject *) PyNumber_InPlaceTrueDivide(PyObject *o1,
954                                                        PyObject *o2);
955 
956        /*
957      Returns the result of dividing o1 by o2 giving a float result,
958      possibly in-place, or null on failure.
959      This is the equivalent of the Python expression:
960      o1 /= o2.
961        */
962 
963      PyAPI_FUNC(PyObject *) PyNumber_InPlaceRemainder(PyObject *o1, PyObject *o2);
964 
965        /*
966      Returns the remainder of dividing o1 by o2, possibly in-place, or
967      null on failure.  This is the equivalent of the Python expression:
968      o1 %= o2.
969        */
970 
971      PyAPI_FUNC(PyObject *) PyNumber_InPlacePower(PyObject *o1, PyObject *o2,
972                                                   PyObject *o3);
973 
974        /*
975      Returns the result of raising o1 to the power of o2, possibly
976      in-place, or null on failure.  This is the equivalent of the Python
977      expression: o1 **= o2, or pow(o1, o2, o3) if o3 is present.
978        */
979 
980      PyAPI_FUNC(PyObject *) PyNumber_InPlaceLshift(PyObject *o1, PyObject *o2);
981 
982        /*
983      Returns the result of left shifting o1 by o2, possibly in-place, or
984      null on failure.  This is the equivalent of the Python expression:
985      o1 <<= o2.
986        */
987 
988      PyAPI_FUNC(PyObject *) PyNumber_InPlaceRshift(PyObject *o1, PyObject *o2);
989 
990        /*
991      Returns the result of right shifting o1 by o2, possibly in-place or
992      null on failure.  This is the equivalent of the Python expression:
993      o1 >>= o2.
994        */
995 
996      PyAPI_FUNC(PyObject *) PyNumber_InPlaceAnd(PyObject *o1, PyObject *o2);
997 
998        /*
999      Returns the result of bitwise and of o1 and o2, possibly in-place,
1000      or null on failure. This is the equivalent of the Python
1001      expression: o1 &= o2.
1002        */
1003 
1004      PyAPI_FUNC(PyObject *) PyNumber_InPlaceXor(PyObject *o1, PyObject *o2);
1005 
1006        /*
1007      Returns the bitwise exclusive or of o1 by o2, possibly in-place, or
1008      null on failure.  This is the equivalent of the Python expression:
1009      o1 ^= o2.
1010        */
1011 
1012      PyAPI_FUNC(PyObject *) PyNumber_InPlaceOr(PyObject *o1, PyObject *o2);
1013 
1014        /*
1015      Returns the result of bitwise or of o1 and o2, possibly in-place,
1016      or null on failure.  This is the equivalent of the Python
1017      expression: o1 |= o2.
1018        */
1019 
1020      PyAPI_FUNC(PyObject *) PyNumber_ToBase(PyObject *n, int base);
1021 
1022        /*
1023      Returns the integer n converted to a string with a base, with a base
1024      marker of 0b, 0o or 0x prefixed if applicable.
1025      If n is not an int object, it is converted with PyNumber_Index first.
1026        */
1027 
1028 
1029 /*  Sequence protocol:*/
1030 
1031      PyAPI_FUNC(int) PySequence_Check(PyObject *o);
1032 
1033        /*
1034      Return 1 if the object provides sequence protocol, and zero
1035      otherwise.
1036 
1037      This function always succeeds.
1038        */
1039 
1040      PyAPI_FUNC(Py_ssize_t) PySequence_Size(PyObject *o);
1041 
1042        /*
1043      Return the size of sequence object o, or -1 on failure.
1044        */
1045 
1046        /* For DLL compatibility */
1047 #undef PySequence_Length
1048      PyAPI_FUNC(Py_ssize_t) PySequence_Length(PyObject *o);
1049 #define PySequence_Length PySequence_Size
1050 
1051 
1052      PyAPI_FUNC(PyObject *) PySequence_Concat(PyObject *o1, PyObject *o2);
1053 
1054        /*
1055      Return the concatenation of o1 and o2 on success, and NULL on
1056      failure.   This is the equivalent of the Python
1057      expression: o1+o2.
1058        */
1059 
1060      PyAPI_FUNC(PyObject *) PySequence_Repeat(PyObject *o, Py_ssize_t count);
1061 
1062        /*
1063      Return the result of repeating sequence object o count times,
1064      or NULL on failure.  This is the equivalent of the Python
1065      expression: o1*count.
1066        */
1067 
1068      PyAPI_FUNC(PyObject *) PySequence_GetItem(PyObject *o, Py_ssize_t i);
1069 
1070        /*
1071      Return the ith element of o, or NULL on failure. This is the
1072      equivalent of the Python expression: o[i].
1073        */
1074 
1075      PyAPI_FUNC(PyObject *) PySequence_GetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2);
1076 
1077        /*
1078      Return the slice of sequence object o between i1 and i2, or
1079      NULL on failure. This is the equivalent of the Python
1080      expression: o[i1:i2].
1081        */
1082 
1083      PyAPI_FUNC(int) PySequence_SetItem(PyObject *o, Py_ssize_t i, PyObject *v);
1084 
1085        /*
1086      Assign object v to the ith element of o.  Raise an exception and return
1087      -1 on failure; return 0 on success.  This is the equivalent of the
1088      Python statement o[i]=v.
1089        */
1090 
1091      PyAPI_FUNC(int) PySequence_DelItem(PyObject *o, Py_ssize_t i);
1092 
1093        /*
1094      Delete the ith element of object v.  Returns
1095      -1 on failure.  This is the equivalent of the Python
1096      statement: del o[i].
1097        */
1098 
1099      PyAPI_FUNC(int) PySequence_SetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2,
1100                                          PyObject *v);
1101 
1102        /*
1103      Assign the sequence object, v, to the slice in sequence
1104      object, o, from i1 to i2.  Returns -1 on failure. This is the
1105      equivalent of the Python statement: o[i1:i2]=v.
1106        */
1107 
1108      PyAPI_FUNC(int) PySequence_DelSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2);
1109 
1110        /*
1111      Delete the slice in sequence object, o, from i1 to i2.
1112      Returns -1 on failure. This is the equivalent of the Python
1113      statement: del o[i1:i2].
1114        */
1115 
1116      PyAPI_FUNC(PyObject *) PySequence_Tuple(PyObject *o);
1117 
1118        /*
1119      Returns the sequence, o, as a tuple on success, and NULL on failure.
1120      This is equivalent to the Python expression: tuple(o)
1121        */
1122 
1123 
1124      PyAPI_FUNC(PyObject *) PySequence_List(PyObject *o);
1125        /*
1126      Returns the sequence, o, as a list on success, and NULL on failure.
1127      This is equivalent to the Python expression: list(o)
1128        */
1129 
1130      PyAPI_FUNC(PyObject *) PySequence_Fast(PyObject *o, const char* m);
1131        /*
1132      Return the sequence, o, as a list, unless it's already a
1133      tuple or list.  Use PySequence_Fast_GET_ITEM to access the
1134      members of this list, and PySequence_Fast_GET_SIZE to get its length.
1135 
1136      Returns NULL on failure.  If the object does not support iteration,
1137      raises a TypeError exception with m as the message text.
1138        */
1139 
1140 #define PySequence_Fast_GET_SIZE(o) \
1141     (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
1142        /*
1143      Return the size of o, assuming that o was returned by
1144      PySequence_Fast and is not NULL.
1145        */
1146 
1147 #define PySequence_Fast_GET_ITEM(o, i)\
1148      (PyList_Check(o) ? PyList_GET_ITEM(o, i) : PyTuple_GET_ITEM(o, i))
1149        /*
1150      Return the ith element of o, assuming that o was returned by
1151      PySequence_Fast, and that i is within bounds.
1152        */
1153 
1154 #define PySequence_ITEM(o, i)\
1155     ( Py_TYPE(o)->tp_as_sequence->sq_item(o, i) )
1156        /* Assume tp_as_sequence and sq_item exist and that i does not
1157       need to be corrected for a negative index
1158        */
1159 
1160 #define PySequence_Fast_ITEMS(sf) \
1161     (PyList_Check(sf) ? ((PyListObject *)(sf))->ob_item \
1162                       : ((PyTupleObject *)(sf))->ob_item)
1163     /* Return a pointer to the underlying item array for
1164        an object retured by PySequence_Fast */
1165 
1166      PyAPI_FUNC(Py_ssize_t) PySequence_Count(PyObject *o, PyObject *value);
1167 
1168        /*
1169      Return the number of occurrences on value on o, that is,
1170      return the number of keys for which o[key]==value.  On
1171      failure, return -1.  This is equivalent to the Python
1172      expression: o.count(value).
1173        */
1174 
1175      PyAPI_FUNC(int) PySequence_Contains(PyObject *seq, PyObject *ob);
1176        /*
1177      Return -1 if error; 1 if ob in seq; 0 if ob not in seq.
1178      Use __contains__ if possible, else _PySequence_IterSearch().
1179        */
1180 
1181 #ifndef Py_LIMITED_API
1182 #define PY_ITERSEARCH_COUNT    1
1183 #define PY_ITERSEARCH_INDEX    2
1184 #define PY_ITERSEARCH_CONTAINS 3
1185      PyAPI_FUNC(Py_ssize_t) _PySequence_IterSearch(PyObject *seq,
1186                                         PyObject *obj, int operation);
1187 #endif
1188     /*
1189       Iterate over seq.  Result depends on the operation:
1190       PY_ITERSEARCH_COUNT:  return # of times obj appears in seq; -1 if
1191         error.
1192       PY_ITERSEARCH_INDEX:  return 0-based index of first occurrence of
1193         obj in seq; set ValueError and return -1 if none found;
1194         also return -1 on error.
1195       PY_ITERSEARCH_CONTAINS:  return 1 if obj in seq, else 0; -1 on
1196         error.
1197     */
1198 
1199 /* For DLL-level backwards compatibility */
1200 #undef PySequence_In
1201      PyAPI_FUNC(int) PySequence_In(PyObject *o, PyObject *value);
1202 
1203 /* For source-level backwards compatibility */
1204 #define PySequence_In PySequence_Contains
1205 
1206        /*
1207      Determine if o contains value.  If an item in o is equal to
1208      X, return 1, otherwise return 0.  On error, return -1.  This
1209      is equivalent to the Python expression: value in o.
1210        */
1211 
1212      PyAPI_FUNC(Py_ssize_t) PySequence_Index(PyObject *o, PyObject *value);
1213 
1214        /*
1215      Return the first index for which o[i]=value.  On error,
1216      return -1.    This is equivalent to the Python
1217      expression: o.index(value).
1218        */
1219 
1220 /* In-place versions of some of the above Sequence functions. */
1221 
1222      PyAPI_FUNC(PyObject *) PySequence_InPlaceConcat(PyObject *o1, PyObject *o2);
1223 
1224        /*
1225      Append o2 to o1, in-place when possible. Return the resulting
1226      object, which could be o1, or NULL on failure.  This is the
1227      equivalent of the Python expression: o1 += o2.
1228 
1229        */
1230 
1231      PyAPI_FUNC(PyObject *) PySequence_InPlaceRepeat(PyObject *o, Py_ssize_t count);
1232 
1233        /*
1234      Repeat o1 by count, in-place when possible. Return the resulting
1235      object, which could be o1, or NULL on failure.  This is the
1236      equivalent of the Python expression: o1 *= count.
1237 
1238        */
1239 
1240 /*  Mapping protocol:*/
1241 
1242      PyAPI_FUNC(int) PyMapping_Check(PyObject *o);
1243 
1244        /*
1245      Return 1 if the object provides mapping protocol, and zero
1246      otherwise.
1247 
1248      This function always succeeds.
1249        */
1250 
1251      PyAPI_FUNC(Py_ssize_t) PyMapping_Size(PyObject *o);
1252 
1253        /*
1254      Returns the number of keys in object o on success, and -1 on
1255      failure.  For objects that do not provide sequence protocol,
1256      this is equivalent to the Python expression: len(o).
1257        */
1258 
1259        /* For DLL compatibility */
1260 #undef PyMapping_Length
1261      PyAPI_FUNC(Py_ssize_t) PyMapping_Length(PyObject *o);
1262 #define PyMapping_Length PyMapping_Size
1263 
1264 
1265      /* implemented as a macro:
1266 
1267      int PyMapping_DelItemString(PyObject *o, const char *key);
1268 
1269      Remove the mapping for object, key, from the object *o.
1270      Returns -1 on failure.  This is equivalent to
1271      the Python statement: del o[key].
1272        */
1273 #define PyMapping_DelItemString(O,K) PyObject_DelItemString((O),(K))
1274 
1275      /* implemented as a macro:
1276 
1277      int PyMapping_DelItem(PyObject *o, PyObject *key);
1278 
1279      Remove the mapping for object, key, from the object *o.
1280      Returns -1 on failure.  This is equivalent to
1281      the Python statement: del o[key].
1282        */
1283 #define PyMapping_DelItem(O,K) PyObject_DelItem((O),(K))
1284 
1285      PyAPI_FUNC(int) PyMapping_HasKeyString(PyObject *o, const char *key);
1286 
1287        /*
1288      On success, return 1 if the mapping object has the key, key,
1289      and 0 otherwise.  This is equivalent to the Python expression:
1290      key in o.
1291 
1292      This function always succeeds.
1293        */
1294 
1295      PyAPI_FUNC(int) PyMapping_HasKey(PyObject *o, PyObject *key);
1296 
1297        /*
1298      Return 1 if the mapping object has the key, key,
1299      and 0 otherwise.  This is equivalent to the Python expression:
1300      key in o.
1301 
1302      This function always succeeds.
1303 
1304        */
1305 
1306      PyAPI_FUNC(PyObject *) PyMapping_Keys(PyObject *o);
1307 
1308        /*
1309      On success, return a list or tuple of the keys in object o.
1310      On failure, return NULL.
1311        */
1312 
1313      PyAPI_FUNC(PyObject *) PyMapping_Values(PyObject *o);
1314 
1315        /*
1316      On success, return a list or tuple of the values in object o.
1317      On failure, return NULL.
1318        */
1319 
1320      PyAPI_FUNC(PyObject *) PyMapping_Items(PyObject *o);
1321 
1322        /*
1323      On success, return a list or tuple of the items in object o,
1324      where each item is a tuple containing a key-value pair.
1325      On failure, return NULL.
1326 
1327        */
1328 
1329      PyAPI_FUNC(PyObject *) PyMapping_GetItemString(PyObject *o,
1330                                                     const char *key);
1331 
1332        /*
1333      Return element of o corresponding to the object, key, or NULL
1334      on failure. This is the equivalent of the Python expression:
1335      o[key].
1336        */
1337 
1338      PyAPI_FUNC(int) PyMapping_SetItemString(PyObject *o, const char *key,
1339                                             PyObject *value);
1340 
1341        /*
1342      Map the object, key, to the value, v.  Returns
1343      -1 on failure.  This is the equivalent of the Python
1344      statement: o[key]=v.
1345       */
1346 
1347 
1348 PyAPI_FUNC(int) PyObject_IsInstance(PyObject *object, PyObject *typeorclass);
1349       /* isinstance(object, typeorclass) */
1350 
1351 PyAPI_FUNC(int) PyObject_IsSubclass(PyObject *object, PyObject *typeorclass);
1352       /* issubclass(object, typeorclass) */
1353 
1354 
1355 #ifndef Py_LIMITED_API
1356 PyAPI_FUNC(int) _PyObject_RealIsInstance(PyObject *inst, PyObject *cls);
1357 
1358 PyAPI_FUNC(int) _PyObject_RealIsSubclass(PyObject *derived, PyObject *cls);
1359 
1360 PyAPI_FUNC(char *const *) _PySequence_BytesToCharpArray(PyObject* self);
1361 
1362 PyAPI_FUNC(void) _Py_FreeCharPArray(char *const array[]);
1363 
1364 /* For internal use by buffer API functions */
1365 PyAPI_FUNC(void) _Py_add_one_to_index_F(int nd, Py_ssize_t *index,
1366                                         const Py_ssize_t *shape);
1367 PyAPI_FUNC(void) _Py_add_one_to_index_C(int nd, Py_ssize_t *index,
1368                                         const Py_ssize_t *shape);
1369 #endif /* !Py_LIMITED_API */
1370 
1371 
1372 #ifdef __cplusplus
1373 }
1374 #endif
1375 #endif /* Py_ABSTRACTOBJECT_H */
1376