*n*-uplets
**********

type PyTupleObject

   Ce sous-type de "PyObject" représente un objet Python "tuple".

PyTypeObject PyTuple_Type
    * Fait partie de l' ABI stable.*

   Cette instance de "PyTypeObject" représente le type Python "tuple",
   c'est le même que l’objet Python "tuple".

int PyTuple_Check(PyObject *p)

   Renvoie vrai si *p* est un "tuple" ou un instance d’un de ses sous-
   type. Cette fonction n’échoue jamais.

int PyTuple_CheckExact(PyObject *p)

   Renvoie vrai uniquement si *p* est un "tuple", mais pas une
   instance d’un des sous-types. Cette fonction n’échoue jamais.

PyObject *PyTuple_New(Py_ssize_t len)
    *Valeur de retour : nouvelle référence.** Fait partie de l' ABI
   stable.** Thread safety: Atomic.*

   Return a new tuple object of size *len*, or "NULL" with an
   exception set on failure.

PyObject *PyTuple_FromArray(PyObject *const *array, Py_ssize_t size)
    * Thread safety: Atomic.*

   Create a tuple of *size* items and copy references from *array* to
   the new tuple.

   *array* can be NULL if *size* is "0".

   On success, return a new reference. On error, set an exception and
   return "NULL".

   Ajouté dans la version 3.15.

PyObject *PyTuple_Pack(Py_ssize_t n, ...)
    *Valeur de retour : nouvelle référence.** Fait partie de l' ABI
   stable.** Thread safety: Atomic.*

   Return a new tuple object of size *n*, or "NULL" with an exception
   set on failure. The tuple values are initialized to the subsequent
   *n* C arguments pointing to Python objects. "PyTuple_Pack(2, a, b)"
   is equivalent to "Py_BuildValue("(OO)", a, b)".

Py_ssize_t PyTuple_Size(PyObject *p)
    * Fait partie de l' ABI stable.** Thread safety: Atomic.*

   Take a pointer to a tuple object, and return the size of that
   tuple. On error, return "-1" with an exception set.

Py_ssize_t PyTuple_GET_SIZE(PyObject *p)
    * Thread safety: Atomic.*

   Like "PyTuple_Size()", but without error checking.

PyObject *PyTuple_GetItem(PyObject *p, Py_ssize_t pos)
    *Valeur de retour : référence empruntée.** Fait partie de l' ABI
   stable.** Thread safety: Safe to call from multiple threads with
   external synchronization only.*

   Renvoie l’objet à la position *pos* dans le *n*-uplet *p*. Si *pos*
   est négatif ou hors limites, "NULL" est renvoyé et l’exception
   "IndexError" est levée.

   The returned reference is borrowed from the tuple *p* (that is: it
   is only valid as long as you hold a reference to *p*). To get a
   *strong reference*, use "Py_NewRef(PyTuple_GetItem(...))" or
   "PySequence_GetItem()".

PyObject *PyTuple_GET_ITEM(PyObject *p, Py_ssize_t pos)
    *Valeur de retour : référence empruntée.** Thread safety: Safe to
   call from multiple threads with external synchronization only.*

   Similaire à la fonction "PyTuple_GetItem()", mais ne contrôle pas
   les arguments.

PyObject *PyTuple_GetSlice(PyObject *p, Py_ssize_t low, Py_ssize_t high)
    *Valeur de retour : nouvelle référence.** Fait partie de l' ABI
   stable.** Thread safety: Atomic.*

   Return the slice of the tuple pointed to by *p* between *low* and
   *high*, or "NULL" with an exception set on failure.

   This is the equivalent of the Python expression "p[low:high]".
   Indexing from the end of the tuple is not supported.

int PyTuple_SetItem(PyObject *p, Py_ssize_t pos, PyObject *o)
    * Fait partie de l' ABI stable.** Thread safety: Safe to call from
   multiple threads with external synchronization only.*

   Insert a reference to object *o* at position *pos* of the tuple
   pointed to by *p*.  Return "0" on success.  If *pos* is out of
   bounds, return "-1" and set an "IndexError" exception. This
   function should only be used to fill in brand new tuples; using it
   on an existing tuple is thread-unsafe.

   Note:

     Cette fonction « s’accapare » une référence à l’objet *o* et
     dé-référence l’objet présent dans le *n*-uplet à cette position.

void PyTuple_SET_ITEM(PyObject *p, Py_ssize_t pos, PyObject *o)
    * Thread safety: Safe to call from multiple threads with external
   synchronization only.*

   Like "PyTuple_SetItem()", but does no error checking, and should
   *only* be used to fill in brand new tuples, using it on an existing
   tuple is thread-unsafe.

   Bounds checking is performed as an assertion if Python is built in
   debug mode or "with assertions".

   Note:

     Cette fonction «  s’accapare » une référence à l’objet *o* et,
     contrairement à "PyTuple_SetItem()", ne dé-référence **pas**
     l’élément remplacé : la référence à l’objet présent dans le
     *n*-uplet à la position *pos* est perdue.

   Avertissement:

     This macro should *only* be used on tuples that are newly
     created. Using this macro on a tuple that is already in use (or
     in other words, has a refcount > 1) could lead to undefined
     behavior.

int _PyTuple_Resize(PyObject **p, Py_ssize_t newsize)
    * Thread safety: Safe to call from multiple threads with external
   synchronization only.*

   Permet de redimensionner un *n*-uplet. *newsize* est la nouvelle
   taille de ce *n*-uplet. Comme les *n*-uplets sont *supposés* être
   immuables cette fonction doit être utilisée uniquement s’il
   n’existe qu’une référence vers cet objet. *N’utilisez pas* cette
   fonction s’il est possible que le *n*-uplet soit connu d’une autre
   partie du code. Le *n*-uplet sera toujours agrandi ou réduit à
   partir de la fin. Cette fonction est plus performante que de
   détruire le "tuple" puis d’en créer un nouveau. Renvoie "0" si
   l’opération réussit. Le code ne devrait jamais supposer que la
   valeur de "*p" sera la même après l’appel à cette fonction. Si
   l’objet référencé par "*p" doit être remplacé, alors il est d’abord
   détruit. En cas d’erreur cette fonction renvoie "-1" , stocke
   "NULL" dans "*p" et lève soit "MemoryError" soit "SystemError".


Objets structure-séquence
*************************

A struct sequence object is a *named tuple*, that is, a sequence whose
items can also be accessed through attributes. It is similar to
"collections.namedtuple()", but provides a slightly different
interface.

To create a struct sequence, you first have to create a specific
struct sequence type.

PyTypeObject *PyStructSequence_NewType(PyStructSequence_Desc *desc)
    *Valeur de retour : nouvelle référence.** Fait partie de l' ABI
   stable.** Thread safety: Atomic.*

   Crée un nouveau type d’objet *structure-séquence* à partir des
   données dans *desc*, décrit ci-dessous. Le type ainsi créé peut
   être instancié en appelant "PyStructSequence_New()".

   Return "NULL" with an exception set on failure.

void PyStructSequence_InitType(PyTypeObject *type, PyStructSequence_Desc *desc)
    * Thread safety: Safe to call without external synchronization on
   distinct objects.*

   Initialise un type de structure-séquence à partir de *desc*, sur
   place.

int PyStructSequence_InitType2(PyTypeObject *type, PyStructSequence_Desc *desc)
    * Thread safety: Safe to call without external synchronization on
   distinct objects.*

   Like "PyStructSequence_InitType()", but returns "0" on success and
   "-1" with an exception set on failure.

   Ajouté dans la version 3.4.

type PyStructSequence_Desc
    * Fait partie de l' ABI stable (incluant tous les attributs).*

   Contient les méta-données d’un type structure-séquence à créer.

   const char *name

      Fully qualified name of the type; null-terminated UTF-8 encoded.
      The name must contain the module name.

   const char *doc

      Pointer to docstring for the type or "NULL" to omit.

   PyStructSequence_Field *fields

      Pointer to "NULL"-terminated array with field names of the new
      type.

   int n_in_sequence

      Number of fields visible to the Python side (if used as tuple).

type PyStructSequence_Field
    * Fait partie de l' ABI stable (incluant tous les attributs).*

   Describes a field of a struct sequence. As a struct sequence is
   modeled as a tuple, all fields are typed as PyObject*.  The index
   in the "fields" array of the "PyStructSequence_Desc" determines
   which field of the struct sequence is described.

   const char *name

      Name for the field or "NULL" to end the list of named fields,
      set to "PyStructSequence_UnnamedField" to leave unnamed.

   const char *doc

      Field docstring or "NULL" to omit.

const char *const PyStructSequence_UnnamedField
    * Fait partie de l' ABI stable depuis la version 3.11.*

   Une valeur sentinelle pour indiquer qu’un champ n’est pas nommé.

   Modifié dans la version 3.9: Le type était "char *".

PyObject *PyStructSequence_New(PyTypeObject *type)
    *Valeur de retour : nouvelle référence.** Fait partie de l' ABI
   stable.** Thread safety: Atomic.*

   Crée une instance de *type*, qui doit avoir été créé via
   "PyStructSequence_NewType()".

   Return "NULL" with an exception set on failure.

PyObject *PyStructSequence_GetItem(PyObject *p, Py_ssize_t pos)
    *Valeur de retour : référence empruntée.** Fait partie de l' ABI
   stable.** Thread safety: Safe to call from multiple threads with
   external synchronization only.*

   Return the object at position *pos* in the struct sequence pointed
   to by *p*. The returned reference is borrowed from the struct
   sequence *p* (that is: it is only valid as long as you hold a
   reference to *p*).

   Bounds checking is performed as an assertion if Python is built in
   debug mode or "with assertions".

PyObject *PyStructSequence_GET_ITEM(PyObject *p, Py_ssize_t pos)
    *Valeur de retour : référence empruntée.** Thread safety: Safe to
   call from multiple threads with external synchronization only.*

   Alias to "PyStructSequence_GetItem()".

   Modifié dans la version 3.13: Now implemented as an alias to
   "PyStructSequence_GetItem()".

void PyStructSequence_SetItem(PyObject *p, Py_ssize_t pos, PyObject *o)
    * Fait partie de l' ABI stable.** Thread safety: Safe to call from
   multiple threads with external synchronization only.*

   Insère un l’objet *o* dans la structure-séquence *p* à la position
   *pos*. Pour les mêmes raisons que "PyTuple_SET_ITEM()", cette
   fonction ne doit être utilisée que pour des objets nouvellement
   créés.

   Bounds checking is performed as an assertion if Python is built in
   debug mode or "with assertions".

   Note:

     Cette fonction « s’accapare » une référence à *o*.

void PyStructSequence_SET_ITEM(PyObject *p, Py_ssize_t *pos, PyObject *o)
    * Thread safety: Safe to call from multiple threads with external
   synchronization only.*

   Alias to "PyStructSequence_SetItem()".

   Modifié dans la version 3.13: Now implemented as an alias to
   "PyStructSequence_SetItem()".
