cdef extern from "Python.h": ############################################################################ # 7.5.14 Set Objects ############################################################################ # This section details the public API for set and frozenset # objects. Any functionality not listed below is best accessed # using the either the abstract object protocol (including # PyObject_CallMethod(), PyObject_RichCompareBool(), # PyObject_Hash(), PyObject_Repr(), PyObject_IsTrue(), # PyObject_Print(), and PyObject_GetIter()) or the abstract number # protocol (including PyNumber_Add(), PyNumber_Subtract(), # PyNumber_Or(), PyNumber_Xor(), PyNumber_InPlaceAdd(), # PyNumber_InPlaceSubtract(), PyNumber_InPlaceOr(), and # PyNumber_InPlaceXor()). # PySetObject # This subtype of PyObject is used to hold the internal data for # both set and frozenset objects. It is like a PyDictObject in # that it is a fixed size for small sets (much like tuple storage) # and will point to a separate, variable sized block of memory for # medium and large sized sets (much like list storage). None of # the fields of this structure should be considered public and are # subject to change. All access should be done through the # documented API rather than by manipulating the values in the # structure. # PyTypeObject PySet_Type # This is an instance of PyTypeObject representing the Python set type. # PyTypeObject PyFrozenSet_Type # This is an instance of PyTypeObject representing the Python frozenset type. # The following type check macros work on pointers to any Python # object. Likewise, the constructor functions work with any # iterable Python object. bint PyAnySet_Check(object p) # Return true if p is a set object, a frozenset object, or an # instance of a subtype. bint PyAnySet_CheckExact(object p) # Return true if p is a set object or a frozenset object but not # an instance of a subtype. bint PyFrozenSet_Check(object p) # Return true if p is a frozenset object or an instance of a subtype. bint PyFrozenSet_CheckExact(object p) # Return true if p is a frozenset object but not an instance of a subtype. bint PySet_Check(object p) # Return true if p is a set object or an instance of a subtype. object PySet_New(object iterable) # Return value: New reference. # Return a new set containing objects returned by the # iterable. The iterable may be NULL to create a new empty # set. Return the new set on success or NULL on failure. Raise # TypeError if iterable is not actually iterable. The constructor # is also useful for copying a set (c=set(s)). object PyFrozenSet_New(object iterable) # Return value: New reference. # Return a new frozenset containing objects returned by the # iterable. The iterable may be NULL to create a new empty # frozenset. Return the new set on success or NULL on # failure. Raise TypeError if iterable is not actually iterable. # The following functions and macros are available for instances # of set or frozenset or instances of their subtypes. Py_ssize_t PySet_Size(object anyset) except -1 # Return the length of a set or frozenset object. Equivalent to # "len(anyset)". Raises a PyExc_SystemError if anyset is not a # set, frozenset, or an instance of a subtype. Py_ssize_t PySet_GET_SIZE(object anyset) # Macro form of PySet_Size() without error checking. bint PySet_Contains(object anyset, object key) except -1 # Return 1 if found, 0 if not found, and -1 if an error is # encountered. Unlike the Python __contains__() method, this # function does not automatically convert unhashable sets into # temporary frozensets. Raise a TypeError if the key is # unhashable. Raise PyExc_SystemError if anyset is not a set, # frozenset, or an instance of a subtype. # The following functions are available for instances of set or # its subtypes but not for instances of frozenset or its subtypes. int PySet_Add(object set, object key) except -1 # Add key to a set instance. Does not apply to frozenset # instances. Return 0 on success or -1 on failure. Raise a # TypeError if the key is unhashable. Raise a MemoryError if there # is no room to grow. Raise a SystemError if set is an not an # instance of set or its subtype. bint PySet_Discard(object set, object key) except -1 # Return 1 if found and removed, 0 if not found (no action taken), # and -1 if an error is encountered. Does not raise KeyError for # missing keys. Raise a TypeError if the key is unhashable. Unlike # the Python discard() method, this function does not # automatically convert unhashable sets into temporary # frozensets. Raise PyExc_SystemError if set is an not an instance # of set or its subtype. object PySet_Pop(object set) # Return value: New reference. # Return a new reference to an arbitrary object in the set, and # removes the object from the set. Return NULL on failure. Raise # KeyError if the set is empty. Raise a SystemError if set is an # not an instance of set or its subtype. int PySet_Clear(object set) # Empty an existing set of all elements.