1 #ifndef Py_ABSTRACTOBJECT_H
2 #define Py_ABSTRACTOBJECT_H
7 #ifdef PY_SSIZE_T_CLEAN
8 #define PyObject_CallFunction _PyObject_CallFunction_SizeT
9 #define PyObject_CallMethod _PyObject_CallMethod_SizeT
12 /* Abstract Object Interface (many thanks to Jim Fulton) */
15 PROPOSAL: A Generic Python Object Interface for Python C Modules
19 Python modules written in C that must access Python objects must do
20 so through routines whose interfaces are described by a set of
21 include files. Unfortunately, these routines vary according to the
22 object accessed. To use these routines, the C programmer must check
23 the type of the object being used and must call a routine based on
24 the object type. For example, to access an element of a sequence,
25 the programmer must determine whether the sequence is a list or a
30 else if(is_listitem(o))
33 If the programmer wants to get an item from another type of object
34 that provides sequence behavior, there is no clear way to do it
37 The persistent programmer may peruse object.h and find that the
38 _typeobject structure provides a means of invoking up to (currently
39 about) 41 special operators. So, for example, a routine can get an
40 item from any object that provides sequence behavior. However, to
41 use this mechanism, the programmer must make their code dependent on
42 the current Python implementation.
44 Also, certain semantics, especially memory management semantics, may
45 differ by the type of object being used. Unfortunately, these
46 semantics are not clearly described in the current include files.
47 An abstract interface providing more consistent semantics is needed.
51 I propose the creation of a standard interface (with an associated
52 library of routines and/or macros) for generically obtaining the
53 services of Python objects. This proposal can be viewed as one
54 components of a Python C interface consisting of several components.
56 From the viewpoint of C access to Python services, we have (as
57 suggested by Guido in off-line discussions):
59 - "Very high level layer": two or three functions that let you exec or
60 eval arbitrary Python code given as a string in a module whose name is
61 given, passing C values in and getting C values out using
62 mkvalue/getargs style format strings. This does not require the user
63 to declare any variables of type "PyObject *". This should be enough
64 to write a simple application that gets Python code from the user,
65 execs it, and returns the output or errors. (Error handling must also
68 - "Abstract objects layer": which is the subject of this proposal.
69 It has many functions operating on objects, and lest you do many
70 things from C that you can also write in Python, without going
71 through the Python parser.
73 - "Concrete objects layer": This is the public type-dependent
74 interface provided by the standard built-in types, such as floats,
75 strings, and lists. This interface exists and is currently
76 documented by the collection of include files provided with the
79 From the point of view of Python accessing services provided by C
82 - "Python module interface": this interface consist of the basic
83 routines used to define modules and their members. Most of the
84 current extensions-writing guide deals with this interface.
86 - "Built-in object interface": this is the interface that a new
87 built-in type must provide and the mechanisms and rules that a
88 developer of a new built-in type must use and follow.
90 This proposal is a "first-cut" that is intended to spur
91 discussion. See especially the lists of notes.
93 The Python C object interface will provide four protocols: object,
94 numeric, sequence, and mapping. Each protocol consists of a
95 collection of related operations. If an operation that is not
96 provided by a particular type is invoked, then a standard exception,
97 NotImplementedError is raised with a operation name as an argument.
98 In addition, for convenience this interface defines a set of
99 constructors for building objects of built-in types. This is needed
100 so new objects can be returned from C functions that otherwise treat
105 For all of the functions described in this proposal, if a function
106 retains a reference to a Python object passed as an argument, then the
107 function will increase the reference count of the object. It is
108 unnecessary for the caller to increase the reference count of an
109 argument in anticipation of the object's retention.
111 All Python objects returned from functions should be treated as new
112 objects. Functions that return objects assume that the caller will
113 retain a reference and the reference count of the object has already
114 been incremented to account for this fact. A caller that does not
115 retain a reference to an object that is returned from a function
116 must decrement the reference count of the object (using
117 DECREF(object)) to prevent memory leaks.
119 Note that the behavior mentioned here is different from the current
120 behavior for some objects (e.g. lists and tuples) when certain
121 type-specific routines are called directly (e.g. setlistitem). The
122 proposed abstraction layer will provide a consistent memory
123 management interface, correcting for inconsistent behavior for some
128 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/
130 /* Object Protocol: */
132 /* Implemented elsewhere:
134 int PyObject_Print(PyObject *o, FILE *fp, int flags);
136 Print an object, o, on file, fp. Returns -1 on
137 error. The flags argument is used to enable certain printing
138 options. The only option currently supported is Py_Print_RAW.
140 (What should be said about Py_Print_RAW?)
144 /* Implemented elsewhere:
146 int PyObject_HasAttrString(PyObject *o, char *attr_name);
148 Returns 1 if o has the attribute attr_name, and 0 otherwise.
149 This is equivalent to the Python expression:
150 hasattr(o,attr_name).
152 This function always succeeds.
156 /* Implemented elsewhere:
158 PyObject* PyObject_GetAttrString(PyObject *o, char *attr_name);
160 Retrieve an attributed named attr_name form object o.
161 Returns the attribute value on success, or NULL on failure.
162 This is the equivalent of the Python expression: o.attr_name.
166 /* Implemented elsewhere:
168 int PyObject_HasAttr(PyObject *o, PyObject *attr_name);
170 Returns 1 if o has the attribute attr_name, and 0 otherwise.
171 This is equivalent to the Python expression:
172 hasattr(o,attr_name).
174 This function always succeeds.
178 /* Implemented elsewhere:
180 PyObject* PyObject_GetAttr(PyObject *o, PyObject *attr_name);
182 Retrieve an attributed named attr_name form object o.
183 Returns the attribute value on success, or NULL on failure.
184 This is the equivalent of the Python expression: o.attr_name.
189 /* Implemented elsewhere:
191 int PyObject_SetAttrString(PyObject *o, char *attr_name, PyObject *v);
193 Set the value of the attribute named attr_name, for object o,
194 to the value, v. Returns -1 on failure. This is
195 the equivalent of the Python statement: o.attr_name=v.
199 /* Implemented elsewhere:
201 int PyObject_SetAttr(PyObject *o, PyObject *attr_name, PyObject *v);
203 Set the value of the attribute named attr_name, for object o,
204 to the value, v. Returns -1 on failure. This is
205 the equivalent of the Python statement: o.attr_name=v.
209 /* implemented as a macro:
211 int PyObject_DelAttrString(PyObject *o, char *attr_name);
213 Delete attribute named attr_name, for object o. Returns
214 -1 on failure. This is the equivalent of the Python
215 statement: del o.attr_name.
218 #define PyObject_DelAttrString(O,A) PyObject_SetAttrString((O),(A),NULL)
220 /* implemented as a macro:
222 int PyObject_DelAttr(PyObject *o, PyObject *attr_name);
224 Delete attribute named attr_name, for object o. Returns -1
225 on failure. This is the equivalent of the Python
226 statement: del o.attr_name.
229 #define PyObject_DelAttr(O,A) PyObject_SetAttr((O),(A),NULL)
231 PyAPI_FUNC(int) PyObject_Cmp(PyObject
*o1
, PyObject
*o2
, int *result
);
234 Compare the values of o1 and o2 using a routine provided by
235 o1, if one exists, otherwise with a routine provided by o2.
236 The result of the comparison is returned in result. Returns
237 -1 on failure. This is the equivalent of the Python
238 statement: result=cmp(o1,o2).
242 /* Implemented elsewhere:
244 int PyObject_Compare(PyObject *o1, PyObject *o2);
246 Compare the values of o1 and o2 using a routine provided by
247 o1, if one exists, otherwise with a routine provided by o2.
248 Returns the result of the comparison on success. On error,
249 the value returned is undefined. This is equivalent to the
250 Python expression: cmp(o1,o2).
254 /* Implemented elsewhere:
256 PyObject *PyObject_Repr(PyObject *o);
258 Compute the string representation of object, o. Returns the
259 string representation on success, NULL on failure. This is
260 the equivalent of the Python expression: repr(o).
262 Called by the repr() built-in function and by reverse quotes.
266 /* Implemented elsewhere:
268 PyObject *PyObject_Str(PyObject *o);
270 Compute the string representation of object, o. Returns the
271 string representation on success, NULL on failure. This is
272 the equivalent of the Python expression: str(o).)
274 Called by the str() built-in function and by the print
279 /* Implemented elsewhere:
281 PyObject *PyObject_Unicode(PyObject *o);
283 Compute the unicode representation of object, o. Returns the
284 unicode representation on success, NULL on failure. This is
285 the equivalent of the Python expression: unistr(o).)
287 Called by the unistr() built-in function.
291 /* Declared elsewhere
293 PyAPI_FUNC(int) PyCallable_Check(PyObject *o);
295 Determine if the object, o, is callable. Return 1 if the
296 object is callable and 0 otherwise.
298 This function always succeeds.
304 PyAPI_FUNC(PyObject
*) PyObject_Call(PyObject
*callable_object
,
305 PyObject
*args
, PyObject
*kw
);
308 Call a callable Python object, callable_object, with
309 arguments and keywords arguments. The 'args' argument can not be
310 NULL, but the 'kw' argument can be NULL.
314 PyAPI_FUNC(PyObject
*) PyObject_CallObject(PyObject
*callable_object
,
318 Call a callable Python object, callable_object, with
319 arguments given by the tuple, args. If no arguments are
320 needed, then args may be NULL. Returns the result of the
321 call on success, or NULL on failure. This is the equivalent
322 of the Python expression: apply(o,args).
326 PyAPI_FUNC(PyObject
*) PyObject_CallFunction(PyObject
*callable_object
,
330 Call a callable Python object, callable_object, with a
331 variable number of C arguments. The C arguments are described
332 using a mkvalue-style format string. The format may be NULL,
333 indicating that no arguments are provided. Returns the
334 result of the call on success, or NULL on failure. This is
335 the equivalent of the Python expression: apply(o,args).
340 PyAPI_FUNC(PyObject
*) PyObject_CallMethod(PyObject
*o
, char *m
,
344 Call the method named m of object o with a variable number of
345 C arguments. The C arguments are described by a mkvalue
346 format string. The format may be NULL, indicating that no
347 arguments are provided. Returns the result of the call on
348 success, or NULL on failure. This is the equivalent of the
349 Python expression: o.method(args).
352 PyAPI_FUNC(PyObject
*) _PyObject_CallFunction_SizeT(PyObject
*callable
,
354 PyAPI_FUNC(PyObject
*) _PyObject_CallMethod_SizeT(PyObject
*o
,
358 PyAPI_FUNC(PyObject
*) PyObject_CallFunctionObjArgs(PyObject
*callable
,
362 Call a callable Python object, callable_object, with a
363 variable number of C arguments. The C arguments are provided
364 as PyObject * values, terminated by a NULL. Returns the
365 result of the call on success, or NULL on failure. This is
366 the equivalent of the Python expression: apply(o,args).
370 PyAPI_FUNC(PyObject
*) PyObject_CallMethodObjArgs(PyObject
*o
,
374 Call the method named m of object o with a variable number of
375 C arguments. The C arguments are provided as PyObject *
376 values, terminated by NULL. Returns the result of the call
377 on success, or NULL on failure. This is the equivalent of
378 the Python expression: o.method(args).
382 /* Implemented elsewhere:
384 long PyObject_Hash(PyObject *o);
386 Compute and return the hash, hash_value, of an object, o. On
387 failure, return -1. This is the equivalent of the Python
393 /* Implemented elsewhere:
395 int PyObject_IsTrue(PyObject *o);
397 Returns 1 if the object, o, is considered to be true, 0 if o is
398 considered to be false and -1 on failure. This is equivalent to the
399 Python expression: not not o
403 /* Implemented elsewhere:
405 int PyObject_Not(PyObject *o);
407 Returns 0 if the object, o, is considered to be true, 1 if o is
408 considered to be false and -1 on failure. This is equivalent to the
409 Python expression: not o
413 PyAPI_FUNC(PyObject
*) PyObject_Type(PyObject
*o
);
416 On success, returns a type object corresponding to the object
417 type of object o. On failure, returns NULL. This is
418 equivalent to the Python expression: type(o).
421 PyAPI_FUNC(Py_ssize_t
) PyObject_Size(PyObject
*o
);
424 Return the size of object o. If the object, o, provides
425 both sequence and mapping protocols, the sequence size is
426 returned. On error, -1 is returned. This is the equivalent
427 to the Python expression: len(o).
431 /* For DLL compatibility */
432 #undef PyObject_Length
433 PyAPI_FUNC(Py_ssize_t
) PyObject_Length(PyObject
*o
);
434 #define PyObject_Length PyObject_Size
436 PyAPI_FUNC(Py_ssize_t
) _PyObject_LengthHint(PyObject
*o
, Py_ssize_t
);
439 Guess the size of object o using len(o) or o.__length_hint__().
440 If neither of those return a non-negative value, then return the
441 default value. If one of the calls fails, this function returns -1.
444 PyAPI_FUNC(PyObject
*) PyObject_GetItem(PyObject
*o
, PyObject
*key
);
447 Return element of o corresponding to the object, key, or NULL
448 on failure. This is the equivalent of the Python expression:
453 PyAPI_FUNC(int) PyObject_SetItem(PyObject
*o
, PyObject
*key
, PyObject
*v
);
456 Map the object, key, to the value, v. Returns
457 -1 on failure. This is the equivalent of the Python
461 PyAPI_FUNC(int) PyObject_DelItemString(PyObject
*o
, char *key
);
464 Remove the mapping for object, key, from the object *o.
465 Returns -1 on failure. This is equivalent to
466 the Python statement: del o[key].
469 PyAPI_FUNC(int) PyObject_DelItem(PyObject
*o
, PyObject
*key
);
472 Delete the mapping for key from *o. Returns -1 on failure.
473 This is the equivalent of the Python statement: del o[key].
476 PyAPI_FUNC(int) PyObject_AsCharBuffer(PyObject
*obj
,
478 Py_ssize_t
*buffer_len
);
481 Takes an arbitrary object which must support the (character,
482 single segment) buffer interface and returns a pointer to a
483 read-only memory location useable as character based input
484 for subsequent processing.
486 0 is returned on success. buffer and buffer_len are only
487 set in case no error occurs. Otherwise, -1 is returned and
492 PyAPI_FUNC(int) PyObject_CheckReadBuffer(PyObject
*obj
);
495 Checks whether an arbitrary object supports the (character,
496 single segment) buffer interface. Returns 1 on success, 0
501 PyAPI_FUNC(int) PyObject_AsReadBuffer(PyObject
*obj
,
503 Py_ssize_t
*buffer_len
);
506 Same as PyObject_AsCharBuffer() except that this API expects
507 (readable, single segment) buffer interface and returns a
508 pointer to a read-only memory location which can contain
511 0 is returned on success. buffer and buffer_len are only
512 set in case no error occurrs. Otherwise, -1 is returned and
517 PyAPI_FUNC(int) PyObject_AsWriteBuffer(PyObject
*obj
,
519 Py_ssize_t
*buffer_len
);
522 Takes an arbitrary object which must support the (writeable,
523 single segment) buffer interface and returns a pointer to a
524 writeable memory location in buffer of size buffer_len.
526 0 is returned on success. buffer and buffer_len are only
527 set in case no error occurrs. Otherwise, -1 is returned and
534 #define PyObject_CheckBuffer(obj) \
535 (((obj)->ob_type->tp_as_buffer != NULL) && \
536 (PyType_HasFeature((obj)->ob_type, Py_TPFLAGS_HAVE_NEWBUFFER)) && \
537 ((obj)->ob_type->tp_as_buffer->bf_getbuffer != NULL))
539 /* Return 1 if the getbuffer function is available, otherwise
542 PyAPI_FUNC(int) PyObject_GetBuffer(PyObject
*obj
, Py_buffer
*view
,
545 /* This is a C-API version of the getbuffer function call. It checks
546 to make sure object has the required function pointer and issues the
547 call. Returns -1 and raises an error on failure and returns 0 on
552 PyAPI_FUNC(void *) PyBuffer_GetPointer(Py_buffer
*view
, Py_ssize_t
*indices
);
554 /* Get the memory area pointed to by the indices for the buffer given.
555 Note that view->ndim is the assumed size of indices
558 PyAPI_FUNC(int) PyBuffer_SizeFromFormat(const char *);
560 /* Return the implied itemsize of the data-format area from a
561 struct-style description */
565 PyAPI_FUNC(int) PyBuffer_ToContiguous(void *buf
, Py_buffer
*view
,
566 Py_ssize_t len
, char fort
);
568 PyAPI_FUNC(int) PyBuffer_FromContiguous(Py_buffer
*view
, void *buf
,
569 Py_ssize_t len
, char fort
);
572 /* Copy len bytes of data from the contiguous chunk of memory
573 pointed to by buf into the buffer exported by obj. Return
574 0 on success and return -1 and raise a PyBuffer_Error on
575 error (i.e. the object does not have a buffer interface or
578 If fort is 'F' and the object is multi-dimensional,
579 then the data will be copied into the array in
580 Fortran-style (first dimension varies the fastest). If
581 fort is 'C', then the data will be copied into the array
582 in C-style (last dimension varies the fastest). If fort
583 is 'A', then it does not matter and the copy will be made
584 in whatever way is more efficient.
588 PyAPI_FUNC(int) PyObject_CopyData(PyObject
*dest
, PyObject
*src
);
590 /* Copy the data from the src buffer to the buffer of destination
593 PyAPI_FUNC(int) PyBuffer_IsContiguous(Py_buffer
*view
, char fort
);
596 PyAPI_FUNC(void) PyBuffer_FillContiguousStrides(int ndims
,
602 /* Fill the strides array with byte-strides of a contiguous
603 (Fortran-style if fort is 'F' or C-style otherwise)
604 array of the given shape with the given number of bytes
608 PyAPI_FUNC(int) PyBuffer_FillInfo(Py_buffer
*view
, PyObject
*o
, void *buf
,
609 Py_ssize_t len
, int readonly
,
612 /* Fills in a buffer-info structure correctly for an exporter
613 that can only share a contiguous chunk of memory of
614 "unsigned bytes" of the given length. Returns 0 on success
615 and -1 (with raising an error) on error.
618 PyAPI_FUNC(void) PyBuffer_Release(Py_buffer
*view
);
620 /* Releases a Py_buffer obtained from getbuffer ParseTuple's s*.
623 PyAPI_FUNC(PyObject
*) PyObject_Format(PyObject
* obj
,
624 PyObject
*format_spec
);
626 Takes an arbitrary object and returns the result of
627 calling obj.__format__(format_spec).
632 PyAPI_FUNC(PyObject
*) PyObject_GetIter(PyObject
*);
633 /* Takes an object and returns an iterator for it.
634 This is typically a new iterator but if the argument
635 is an iterator, this returns itself. */
637 #define PyIter_Check(obj) \
638 (PyType_HasFeature((obj)->ob_type, Py_TPFLAGS_HAVE_ITER) && \
639 (obj)->ob_type->tp_iternext != NULL && \
640 (obj)->ob_type->tp_iternext != &_PyObject_NextNotImplemented)
642 PyAPI_FUNC(PyObject
*) PyIter_Next(PyObject
*);
643 /* Takes an iterator object and calls its tp_iternext slot,
644 returning the next value. If the iterator is exhausted,
645 this returns NULL without setting an exception.
646 NULL with an exception means an error occurred. */
648 /* Number Protocol:*/
650 PyAPI_FUNC(int) PyNumber_Check(PyObject
*o
);
653 Returns 1 if the object, o, provides numeric protocols, and
656 This function always succeeds.
660 PyAPI_FUNC(PyObject
*) PyNumber_Add(PyObject
*o1
, PyObject
*o2
);
663 Returns the result of adding o1 and o2, or null on failure.
664 This is the equivalent of the Python expression: o1+o2.
669 PyAPI_FUNC(PyObject
*) PyNumber_Subtract(PyObject
*o1
, PyObject
*o2
);
672 Returns the result of subtracting o2 from o1, or null on
673 failure. This is the equivalent of the Python expression:
678 PyAPI_FUNC(PyObject
*) PyNumber_Multiply(PyObject
*o1
, PyObject
*o2
);
681 Returns the result of multiplying o1 and o2, or null on
682 failure. This is the equivalent of the Python expression:
688 PyAPI_FUNC(PyObject
*) PyNumber_Divide(PyObject
*o1
, PyObject
*o2
);
691 Returns the result of dividing o1 by o2, or null on failure.
692 This is the equivalent of the Python expression: o1/o2.
697 PyAPI_FUNC(PyObject
*) PyNumber_FloorDivide(PyObject
*o1
, PyObject
*o2
);
700 Returns the result of dividing o1 by o2 giving an integral result,
702 This is the equivalent of the Python expression: o1//o2.
707 PyAPI_FUNC(PyObject
*) PyNumber_TrueDivide(PyObject
*o1
, PyObject
*o2
);
710 Returns the result of dividing o1 by o2 giving a float result,
712 This is the equivalent of the Python expression: o1/o2.
717 PyAPI_FUNC(PyObject
*) PyNumber_Remainder(PyObject
*o1
, PyObject
*o2
);
720 Returns the remainder of dividing o1 by o2, or null on
721 failure. This is the equivalent of the Python expression:
727 PyAPI_FUNC(PyObject
*) PyNumber_Divmod(PyObject
*o1
, PyObject
*o2
);
730 See the built-in function divmod. Returns NULL on failure.
731 This is the equivalent of the Python expression:
737 PyAPI_FUNC(PyObject
*) PyNumber_Power(PyObject
*o1
, PyObject
*o2
,
741 See the built-in function pow. Returns NULL on failure.
742 This is the equivalent of the Python expression:
743 pow(o1,o2,o3), where o3 is optional.
747 PyAPI_FUNC(PyObject
*) PyNumber_Negative(PyObject
*o
);
750 Returns the negation of o on success, or null on failure.
751 This is the equivalent of the Python expression: -o.
755 PyAPI_FUNC(PyObject
*) PyNumber_Positive(PyObject
*o
);
758 Returns the (what?) of o on success, or NULL on failure.
759 This is the equivalent of the Python expression: +o.
763 PyAPI_FUNC(PyObject
*) PyNumber_Absolute(PyObject
*o
);
766 Returns the absolute value of o, or null on failure. This is
767 the equivalent of the Python expression: abs(o).
771 PyAPI_FUNC(PyObject
*) PyNumber_Invert(PyObject
*o
);
774 Returns the bitwise negation of o on success, or NULL on
775 failure. This is the equivalent of the Python expression:
781 PyAPI_FUNC(PyObject
*) PyNumber_Lshift(PyObject
*o1
, PyObject
*o2
);
784 Returns the result of left shifting o1 by o2 on success, or
785 NULL on failure. This is the equivalent of the Python
786 expression: o1 << o2.
791 PyAPI_FUNC(PyObject
*) PyNumber_Rshift(PyObject
*o1
, PyObject
*o2
);
794 Returns the result of right shifting o1 by o2 on success, or
795 NULL on failure. This is the equivalent of the Python
796 expression: o1 >> o2.
800 PyAPI_FUNC(PyObject
*) PyNumber_And(PyObject
*o1
, PyObject
*o2
);
803 Returns the result of bitwise and of o1 and o2 on success, or
804 NULL on failure. This is the equivalent of the Python
810 PyAPI_FUNC(PyObject
*) PyNumber_Xor(PyObject
*o1
, PyObject
*o2
);
813 Returns the bitwise exclusive or of o1 by o2 on success, or
814 NULL on failure. This is the equivalent of the Python
820 PyAPI_FUNC(PyObject
*) PyNumber_Or(PyObject
*o1
, PyObject
*o2
);
823 Returns the result of bitwise or on o1 and o2 on success, or
824 NULL on failure. This is the equivalent of the Python
829 /* Implemented elsewhere:
831 int PyNumber_Coerce(PyObject **p1, PyObject **p2);
833 This function takes the addresses of two variables of type
836 If the objects pointed to by *p1 and *p2 have the same type,
837 increment their reference count and return 0 (success).
838 If the objects can be converted to a common numeric type,
839 replace *p1 and *p2 by their converted value (with 'new'
840 reference counts), and return 0.
841 If no conversion is possible, or if some other error occurs,
842 return -1 (failure) and don't increment the reference counts.
843 The call PyNumber_Coerce(&o1, &o2) is equivalent to the Python
844 statement o1, o2 = coerce(o1, o2).
848 #define PyIndex_Check(obj) \
849 ((obj)->ob_type->tp_as_number != NULL && \
850 PyType_HasFeature((obj)->ob_type, Py_TPFLAGS_HAVE_INDEX) && \
851 (obj)->ob_type->tp_as_number->nb_index != NULL)
853 PyAPI_FUNC(PyObject
*) PyNumber_Index(PyObject
*o
);
856 Returns the object converted to a Python long or int
857 or NULL with an error raised on failure.
860 PyAPI_FUNC(Py_ssize_t
) PyNumber_AsSsize_t(PyObject
*o
, PyObject
*exc
);
863 Returns the Integral instance converted to an int. The
864 instance is expected to be int or long or have an __int__
865 method. Steals integral's reference. error_format will be
866 used to create the TypeError if integral isn't actually an
867 Integral instance. error_format should be a format string
868 that can accept a char* naming integral's type.
871 PyAPI_FUNC(PyObject
*) _PyNumber_ConvertIntegralToInt(
873 const char* error_format
);
876 Returns the object converted to Py_ssize_t by going through
877 PyNumber_Index first. If an overflow error occurs while
878 converting the int-or-long to Py_ssize_t, then the second argument
879 is the error-type to return. If it is NULL, then the overflow error
880 is cleared and the value is clipped.
883 PyAPI_FUNC(PyObject
*) PyNumber_Int(PyObject
*o
);
886 Returns the o converted to an integer object on success, or
887 NULL on failure. This is the equivalent of the Python
892 PyAPI_FUNC(PyObject
*) PyNumber_Long(PyObject
*o
);
895 Returns the o converted to a long integer object on success,
896 or NULL on failure. This is the equivalent of the Python
901 PyAPI_FUNC(PyObject
*) PyNumber_Float(PyObject
*o
);
904 Returns the o converted to a float object on success, or NULL
905 on failure. This is the equivalent of the Python expression:
909 /* In-place variants of (some of) the above number protocol functions */
911 PyAPI_FUNC(PyObject
*) PyNumber_InPlaceAdd(PyObject
*o1
, PyObject
*o2
);
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:
920 PyAPI_FUNC(PyObject
*) PyNumber_InPlaceSubtract(PyObject
*o1
, PyObject
*o2
);
923 Returns the result of subtracting o2 from o1, possibly in-place or
924 null on failure. This is the equivalent of the Python expression:
929 PyAPI_FUNC(PyObject
*) PyNumber_InPlaceMultiply(PyObject
*o1
, PyObject
*o2
);
932 Returns the result of multiplying o1 by o2, possibly in-place, or
933 null on failure. This is the equivalent of the Python expression:
938 PyAPI_FUNC(PyObject
*) PyNumber_InPlaceDivide(PyObject
*o1
, PyObject
*o2
);
941 Returns the result of dividing o1 by o2, possibly in-place, or null
942 on failure. This is the equivalent of the Python expression:
947 PyAPI_FUNC(PyObject
*) PyNumber_InPlaceFloorDivide(PyObject
*o1
,
951 Returns the result of dividing o1 by o2 giving an integral result,
952 possibly in-place, or null on failure.
953 This is the equivalent of the Python expression:
958 PyAPI_FUNC(PyObject
*) PyNumber_InPlaceTrueDivide(PyObject
*o1
,
962 Returns the result of dividing o1 by o2 giving a float result,
963 possibly in-place, or null on failure.
964 This is the equivalent of the Python expression:
969 PyAPI_FUNC(PyObject
*) PyNumber_InPlaceRemainder(PyObject
*o1
, PyObject
*o2
);
972 Returns the remainder of dividing o1 by o2, possibly in-place, or
973 null on failure. This is the equivalent of the Python expression:
978 PyAPI_FUNC(PyObject
*) PyNumber_InPlacePower(PyObject
*o1
, PyObject
*o2
,
982 Returns the result of raising o1 to the power of o2, possibly
983 in-place, or null on failure. This is the equivalent of the Python
984 expression: o1 **= o2, or pow(o1, o2, o3) if o3 is present.
988 PyAPI_FUNC(PyObject
*) PyNumber_InPlaceLshift(PyObject
*o1
, PyObject
*o2
);
991 Returns the result of left shifting o1 by o2, possibly in-place, or
992 null on failure. This is the equivalent of the Python expression:
997 PyAPI_FUNC(PyObject
*) PyNumber_InPlaceRshift(PyObject
*o1
, PyObject
*o2
);
1000 Returns the result of right shifting o1 by o2, possibly in-place or
1001 null on failure. This is the equivalent of the Python expression:
1006 PyAPI_FUNC(PyObject
*) PyNumber_InPlaceAnd(PyObject
*o1
, PyObject
*o2
);
1009 Returns the result of bitwise and of o1 and o2, possibly in-place,
1010 or null on failure. This is the equivalent of the Python
1011 expression: o1 &= o2.
1015 PyAPI_FUNC(PyObject
*) PyNumber_InPlaceXor(PyObject
*o1
, PyObject
*o2
);
1018 Returns the bitwise exclusive or of o1 by o2, possibly in-place, or
1019 null on failure. This is the equivalent of the Python expression:
1024 PyAPI_FUNC(PyObject
*) PyNumber_InPlaceOr(PyObject
*o1
, PyObject
*o2
);
1027 Returns the result of bitwise or of o1 and o2, possibly in-place,
1028 or null on failure. This is the equivalent of the Python
1029 expression: o1 |= o2.
1034 PyAPI_FUNC(PyObject
*) PyNumber_ToBase(PyObject
*n
, int base
);
1037 Returns the integer n converted to a string with a base, with a base
1038 marker of 0b, 0o or 0x prefixed if applicable.
1039 If n is not an int object, it is converted with PyNumber_Index first.
1043 /* Sequence protocol:*/
1045 PyAPI_FUNC(int) PySequence_Check(PyObject
*o
);
1048 Return 1 if the object provides sequence protocol, and zero
1051 This function always succeeds.
1055 PyAPI_FUNC(Py_ssize_t
) PySequence_Size(PyObject
*o
);
1058 Return the size of sequence object o, or -1 on failure.
1062 /* For DLL compatibility */
1063 #undef PySequence_Length
1064 PyAPI_FUNC(Py_ssize_t
) PySequence_Length(PyObject
*o
);
1065 #define PySequence_Length PySequence_Size
1068 PyAPI_FUNC(PyObject
*) PySequence_Concat(PyObject
*o1
, PyObject
*o2
);
1071 Return the concatenation of o1 and o2 on success, and NULL on
1072 failure. This is the equivalent of the Python
1077 PyAPI_FUNC(PyObject
*) PySequence_Repeat(PyObject
*o
, Py_ssize_t count
);
1080 Return the result of repeating sequence object o count times,
1081 or NULL on failure. This is the equivalent of the Python
1082 expression: o1*count.
1086 PyAPI_FUNC(PyObject
*) PySequence_GetItem(PyObject
*o
, Py_ssize_t i
);
1089 Return the ith element of o, or NULL on failure. This is the
1090 equivalent of the Python expression: o[i].
1093 PyAPI_FUNC(PyObject
*) PySequence_GetSlice(PyObject
*o
, Py_ssize_t i1
, Py_ssize_t i2
);
1096 Return the slice of sequence object o between i1 and i2, or
1097 NULL on failure. This is the equivalent of the Python
1098 expression: o[i1:i2].
1102 PyAPI_FUNC(int) PySequence_SetItem(PyObject
*o
, Py_ssize_t i
, PyObject
*v
);
1105 Assign object v to the ith element of o. Returns
1106 -1 on failure. This is the equivalent of the Python
1111 PyAPI_FUNC(int) PySequence_DelItem(PyObject
*o
, Py_ssize_t i
);
1114 Delete the ith element of object v. Returns
1115 -1 on failure. This is the equivalent of the Python
1116 statement: del o[i].
1119 PyAPI_FUNC(int) PySequence_SetSlice(PyObject
*o
, Py_ssize_t i1
, Py_ssize_t i2
,
1123 Assign the sequence object, v, to the slice in sequence
1124 object, o, from i1 to i2. Returns -1 on failure. This is the
1125 equivalent of the Python statement: o[i1:i2]=v.
1128 PyAPI_FUNC(int) PySequence_DelSlice(PyObject
*o
, Py_ssize_t i1
, Py_ssize_t i2
);
1131 Delete the slice in sequence object, o, from i1 to i2.
1132 Returns -1 on failure. This is the equivalent of the Python
1133 statement: del o[i1:i2].
1136 PyAPI_FUNC(PyObject
*) PySequence_Tuple(PyObject
*o
);
1139 Returns the sequence, o, as a tuple on success, and NULL on failure.
1140 This is equivalent to the Python expression: tuple(o)
1144 PyAPI_FUNC(PyObject
*) PySequence_List(PyObject
*o
);
1146 Returns the sequence, o, as a list on success, and NULL on failure.
1147 This is equivalent to the Python expression: list(o)
1150 PyAPI_FUNC(PyObject
*) PySequence_Fast(PyObject
*o
, const char* m
);
1152 Returns the sequence, o, as a tuple, unless it's already a
1153 tuple or list. Use PySequence_Fast_GET_ITEM to access the
1154 members of this list, and PySequence_Fast_GET_SIZE to get its length.
1156 Returns NULL on failure. If the object does not support iteration,
1157 raises a TypeError exception with m as the message text.
1160 #define PySequence_Fast_GET_SIZE(o) \
1161 (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
1163 Return the size of o, assuming that o was returned by
1164 PySequence_Fast and is not NULL.
1167 #define PySequence_Fast_GET_ITEM(o, i)\
1168 (PyList_Check(o) ? PyList_GET_ITEM(o, i) : PyTuple_GET_ITEM(o, i))
1170 Return the ith element of o, assuming that o was returned by
1171 PySequence_Fast, and that i is within bounds.
1174 #define PySequence_ITEM(o, i)\
1175 ( Py_TYPE(o)->tp_as_sequence->sq_item(o, i) )
1176 /* Assume tp_as_sequence and sq_item exist and that i does not
1177 need to be corrected for a negative index
1180 #define PySequence_Fast_ITEMS(sf) \
1181 (PyList_Check(sf) ? ((PyListObject *)(sf))->ob_item \
1182 : ((PyTupleObject *)(sf))->ob_item)
1183 /* Return a pointer to the underlying item array for
1184 an object retured by PySequence_Fast */
1186 PyAPI_FUNC(Py_ssize_t
) PySequence_Count(PyObject
*o
, PyObject
*value
);
1189 Return the number of occurrences on value on o, that is,
1190 return the number of keys for which o[key]==value. On
1191 failure, return -1. This is equivalent to the Python
1192 expression: o.count(value).
1195 PyAPI_FUNC(int) PySequence_Contains(PyObject
*seq
, PyObject
*ob
);
1197 Return -1 if error; 1 if ob in seq; 0 if ob not in seq.
1198 Use __contains__ if possible, else _PySequence_IterSearch().
1201 #define PY_ITERSEARCH_COUNT 1
1202 #define PY_ITERSEARCH_INDEX 2
1203 #define PY_ITERSEARCH_CONTAINS 3
1204 PyAPI_FUNC(Py_ssize_t
) _PySequence_IterSearch(PyObject
*seq
,
1205 PyObject
*obj
, int operation
);
1207 Iterate over seq. Result depends on the operation:
1208 PY_ITERSEARCH_COUNT: return # of times obj appears in seq; -1 if
1210 PY_ITERSEARCH_INDEX: return 0-based index of first occurrence of
1211 obj in seq; set ValueError and return -1 if none found;
1212 also return -1 on error.
1213 PY_ITERSEARCH_CONTAINS: return 1 if obj in seq, else 0; -1 on
1217 /* For DLL-level backwards compatibility */
1218 #undef PySequence_In
1219 PyAPI_FUNC(int) PySequence_In(PyObject
*o
, PyObject
*value
);
1221 /* For source-level backwards compatibility */
1222 #define PySequence_In PySequence_Contains
1225 Determine if o contains value. If an item in o is equal to
1226 X, return 1, otherwise return 0. On error, return -1. This
1227 is equivalent to the Python expression: value in o.
1230 PyAPI_FUNC(Py_ssize_t
) PySequence_Index(PyObject
*o
, PyObject
*value
);
1233 Return the first index for which o[i]=value. On error,
1234 return -1. This is equivalent to the Python
1235 expression: o.index(value).
1238 /* In-place versions of some of the above Sequence functions. */
1240 PyAPI_FUNC(PyObject
*) PySequence_InPlaceConcat(PyObject
*o1
, PyObject
*o2
);
1243 Append o2 to o1, in-place when possible. Return the resulting
1244 object, which could be o1, or NULL on failure. This is the
1245 equivalent of the Python expression: o1 += o2.
1249 PyAPI_FUNC(PyObject
*) PySequence_InPlaceRepeat(PyObject
*o
, Py_ssize_t count
);
1252 Repeat o1 by count, in-place when possible. Return the resulting
1253 object, which could be o1, or NULL on failure. This is the
1254 equivalent of the Python expression: o1 *= count.
1258 /* Mapping protocol:*/
1260 PyAPI_FUNC(int) PyMapping_Check(PyObject
*o
);
1263 Return 1 if the object provides mapping protocol, and zero
1266 This function always succeeds.
1269 PyAPI_FUNC(Py_ssize_t
) PyMapping_Size(PyObject
*o
);
1272 Returns the number of keys in object o on success, and -1 on
1273 failure. For objects that do not provide sequence protocol,
1274 this is equivalent to the Python expression: len(o).
1277 /* For DLL compatibility */
1278 #undef PyMapping_Length
1279 PyAPI_FUNC(Py_ssize_t
) PyMapping_Length(PyObject
*o
);
1280 #define PyMapping_Length PyMapping_Size
1283 /* implemented as a macro:
1285 int PyMapping_DelItemString(PyObject *o, char *key);
1287 Remove the mapping for object, key, from the object *o.
1288 Returns -1 on failure. This is equivalent to
1289 the Python statement: del o[key].
1291 #define PyMapping_DelItemString(O,K) PyObject_DelItemString((O),(K))
1293 /* implemented as a macro:
1295 int PyMapping_DelItem(PyObject *o, PyObject *key);
1297 Remove the mapping for object, key, from the object *o.
1298 Returns -1 on failure. This is equivalent to
1299 the Python statement: del o[key].
1301 #define PyMapping_DelItem(O,K) PyObject_DelItem((O),(K))
1303 PyAPI_FUNC(int) PyMapping_HasKeyString(PyObject
*o
, char *key
);
1306 On success, return 1 if the mapping object has the key, key,
1307 and 0 otherwise. This is equivalent to the Python expression:
1310 This function always succeeds.
1313 PyAPI_FUNC(int) PyMapping_HasKey(PyObject
*o
, PyObject
*key
);
1316 Return 1 if the mapping object has the key, key,
1317 and 0 otherwise. This is equivalent to the Python expression:
1320 This function always succeeds.
1324 /* Implemented as macro:
1326 PyObject *PyMapping_Keys(PyObject *o);
1328 On success, return a list of the keys in object o. On
1329 failure, return NULL. This is equivalent to the Python
1330 expression: o.keys().
1332 #define PyMapping_Keys(O) PyObject_CallMethod(O,"keys",NULL)
1334 /* Implemented as macro:
1336 PyObject *PyMapping_Values(PyObject *o);
1338 On success, return a list of the values in object o. On
1339 failure, return NULL. This is equivalent to the Python
1340 expression: o.values().
1342 #define PyMapping_Values(O) PyObject_CallMethod(O,"values",NULL)
1344 /* Implemented as macro:
1346 PyObject *PyMapping_Items(PyObject *o);
1348 On success, return a list of the items in object o, where
1349 each item is a tuple containing a key-value pair. On
1350 failure, return NULL. This is equivalent to the Python
1351 expression: o.items().
1354 #define PyMapping_Items(O) PyObject_CallMethod(O,"items",NULL)
1356 PyAPI_FUNC(PyObject
*) PyMapping_GetItemString(PyObject
*o
, char *key
);
1359 Return element of o corresponding to the object, key, or NULL
1360 on failure. This is the equivalent of the Python expression:
1364 PyAPI_FUNC(int) PyMapping_SetItemString(PyObject
*o
, char *key
,
1368 Map the object, key, to the value, v. Returns
1369 -1 on failure. This is the equivalent of the Python
1370 statement: o[key]=v.
1374 PyAPI_FUNC(int) PyObject_IsInstance(PyObject
*object
, PyObject
*typeorclass
);
1375 /* isinstance(object, typeorclass) */
1377 PyAPI_FUNC(int) PyObject_IsSubclass(PyObject
*object
, PyObject
*typeorclass
);
1378 /* issubclass(object, typeorclass) */
1381 PyAPI_FUNC(int) _PyObject_RealIsInstance(PyObject
*inst
, PyObject
*cls
);
1383 PyAPI_FUNC(int) _PyObject_RealIsSubclass(PyObject
*derived
, PyObject
*cls
);
1389 #endif /* Py_ABSTRACTOBJECT_H */