Home | History | Annotate | Download | only in Include
      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