Objetos Enteros
***************

Todos los enteros se implementan como objetos enteros "largos"
(*long*) de tamaño arbitrario.

En caso de error, la mayoría de las API "PyLong_As*" retornan "(tipo
de retorno) -1" que no se puede distinguir de un número. Use
"PyErr_Occurred()" para desambiguar.

PyLongObject

   Este subtipo de "PyObject" representa un objeto entero de Python.

PyTypeObject PyLong_Type

   Esta instancia de "PyTypeObject" representa el tipo entero de
   Python. Este es el mismo objeto que "int" en la capa de Python.

int PyLong_Check(PyObject *p)

   Retorna verdadero si su argumento es un "PyLongObject" o un subtipo
   de "PyLongObject".

int PyLong_CheckExact(PyObject *p)

   Retorna verdadero si su argumento es un "PyLongObject", pero no un
   subtipo de "PyLongObject".

PyObject* PyLong_FromLong(long v)
    *Return value: New reference.*

   Retorna un objeto "PyLongObject" nuevo desde *v*, o "NULL" en caso
   de error.

   La implementación actual mantiene un arreglo de objetos enteros
   para todos los enteros entre "-5" y "256", cuando crea un *int* en
   ese rango, en realidad solo obtiene una referencia al objeto
   existente. Por lo tanto, debería ser posible cambiar el valor de
   "1". Sospecho que el comportamiento de Python en este caso no está
   definido. :-)

PyObject* PyLong_FromUnsignedLong(unsigned long v)
    *Return value: New reference.*

   Retorna un objeto "PyLongObject" nuevo desde un C "unsigned long",
   o "NULL" en caso de error.

PyObject* PyLong_FromSsize_t(Py_ssize_t v)
    *Return value: New reference.*

   Retorna un objeto "PyLongObject" nuevo desde un C "Py_ssize_t", o
   "NULL" en caso de error.

PyObject* PyLong_FromSize_t(size_t v)
    *Return value: New reference.*

   Retorna un objeto "PyLongObject" nuevo desde un C "size_t", o
   "NULL" en caso de error.

PyObject* PyLong_FromLongLong(long long v)
    *Return value: New reference.*

   Retorna un objeto "PyLongObject" nuevo desde un C "long long", o
   "NULL" en caso de error.

PyObject* PyLong_FromUnsignedLongLong(unsigned long long v)
    *Return value: New reference.*

   Retorna un objeto "PyLongObject" nuevo desde un C "unsigned long
   long", o "NULL" en caso de error.

PyObject* PyLong_FromDouble(double v)
    *Return value: New reference.*

   Retorna un nuevo objeto "PyLongObject" de la parte entera de *v*, o
   "NULL" en caso de error.

PyObject* PyLong_FromString(const char *str, char **pend, int base)
    *Return value: New reference.*

   Retorna un nuevo "PyLongObject" basado en el valor de cadena de
   caracteres en *str*, que se interpreta de acuerdo con la raíz en
   *base*. Si *pend* no es "NULL", ** pend* apuntará al primer
   carácter en *str* que sigue a la representación del número. Si
   *base* es "0", *str* se interpreta utilizando la definición
   Literales enteros; en este caso, los ceros a la izquierda en un
   número decimal distinto de cero lanzan un "ValueError". Si *base*
   no es "0", debe estar entre "2" y "36", inclusive. Se ignoran los
   espacios iniciales y los guiones bajos individuales después de un
   especificador base y entre dígitos. Si no hay dígitos, se lanzará
   "ValueError".

PyObject* PyLong_FromUnicode(Py_UNICODE *u, Py_ssize_t length, int base)
    *Return value: New reference.*

   Convert a sequence of Unicode digits to a Python integer value.

   Deprecated since version 3.3, will be removed in version 3.10:
   Parte de la API de viejo estilo "Py_UNICODE"; por favor migrar para
   usar "PyLong_FromUnicodeObject()".

PyObject* PyLong_FromUnicodeObject(PyObject *u, int base)
    *Return value: New reference.*

   Convert a sequence of Unicode digits in the string *u* to a Python
   integer value.

   Nuevo en la versión 3.3.

PyObject* PyLong_FromVoidPtr(void *p)
    *Return value: New reference.*

   Crea un entero de Python desde el puntero *p*. El valor del puntero
   se puede recuperar del valor resultante usando
   "PyLong_AsVoidPtr()".

long PyLong_AsLong(PyObject *obj)

   Retorna una representación de C "long" de *obj*. Si *obj* no es una
   instancia de "PyLongObject", primero llama a su método
   "__index__()" o "__int__()" (si está presente) para convertirlo en
   un "PyLongObject".

   Lanza "OverflowError" si el valor de *obj* está fuera de rango para
   un "long".

   Retorna "-1" en caso de error. Use "PyErr_Occurred()" para
   desambiguar.

   Distinto en la versión 3.8: Use "__index__()" si está disponible.

   Obsoleto desde la versión 3.8: Usar "__int__()" está deprecado.

long PyLong_AsLongAndOverflow(PyObject *obj, int *overflow)

   Retorna una representación de C "long" de *obj*. Si *obj* no es una
   instancia de "PyLongObject", primero llama a su método
   "__index__()" o "__int__()" (si está presente) para convertirlo en
   un "PyLongObject".

   Si el valor de *obj* es mayor que "LONG_MAX" o menor que
   "LONG_MIN", establece **overflow * en ``1`` o ``-1``,
   respectivamente, y retorna ``-1``; de lo contrario, establece
   **overflow* en "0". Si se produce alguna otra excepción, configura
   **overflow* en "0" y retorna "-1" como de costumbre.

   Retorna "-1" en caso de error. Use "PyErr_Occurred()" para
   desambiguar.

   Distinto en la versión 3.8: Use "__index__()" si está disponible.

   Obsoleto desde la versión 3.8: Usar "__int__()" está deprecado.

long long PyLong_AsLongLong(PyObject *obj)

   Retorna una representación de C "long long" de *obj*. Si *obj* no
   es una instancia de "PyLongObject", primero llama a su método
   "__index__()" o "__int__()" (si está presente) para convertirlo en
   un "PyLongObject".

   Lanza "OverflowError" si el valor de *obj* está fuera de rango para
   un "long long".

   Retorna "-1" en caso de error. Use "PyErr_Occurred()" para
   desambiguar.

   Distinto en la versión 3.8: Use "__index__()" si está disponible.

   Obsoleto desde la versión 3.8: Usar "__int__()" está deprecado.

long long PyLong_AsLongLongAndOverflow(PyObject *obj, int *overflow)

   Retorna una representación de C "long long" de *obj*. Si *obj* no
   es una instancia de "PyLongObject", primero llama a su método
   "__index__()" o "__int__()" (si está presente) para convertirlo en
   un "PyLongObject".

   Si el valor de *obj* es mayor que "PY_LLONG_MAX" o menor que
   "PY_LLONG_MIN", establece **overflow* en "1" o "-1",
   respectivamente, y retorna "-1"; de lo contrario, establece
   **overflow* en "0". Si se produce alguna otra excepción, configura
   **overflow* en "0" y retorna "-1" como de costumbre.

   Retorna "-1" en caso de error. Use "PyErr_Occurred()" para
   desambiguar.

   Nuevo en la versión 3.2.

   Distinto en la versión 3.8: Use "__index__()" si está disponible.

   Obsoleto desde la versión 3.8: Usar "__int__()" está deprecado.

Py_ssize_t PyLong_AsSsize_t(PyObject *pylong)

   Retorna una representación de C "Py_ssize_t" de *pylong*. *pylong*
   debe ser una instancia de "PyLongObject".

   Lanza "OverflowError" si el valor de *pylong* está fuera de rango
   para un "Py_ssize_t".

   Retorna "-1" en caso de error. Use "PyErr_Occurred()" para
   desambiguar.

unsigned long PyLong_AsUnsignedLong(PyObject *pylong)

   Retorna una representación de C "unsigned long" de *pylong*.
   *pylong* debe ser una instancia de "PyLongObject".

   Lanza "OverflowError" si el valor de *pylong* está fuera de rango
   para un "unsigned long".

   Retorna "(unsigned long)-1" en caso de error. Use
   "PyErr_Occurred()" para desambiguar.

size_t PyLong_AsSize_t(PyObject *pylong)

   Retorna una representación de C "size_t" de *pylong*. *pylong* debe
   ser una instancia de "PyLongObject".

   Lanza "OverflowError" si el valor de *pylong* está fuera de rango
   para un "size_t".

   Retorna "(size_t) -1" en caso de error. Use "PyErr_Occurred()" para
   desambiguar.

unsigned long long PyLong_AsUnsignedLongLong(PyObject *pylong)

   Retorna una representación de C "unsigned long long" de *pylong*.
   *pylong* debe ser una instancia de "PyLongObject".

   Lanza "OverflowError" si el valor de *pylong* está fuera de rango
   para un "unsigned long long".

   Retorna "(unsigned long long) -1" en caso de error. Use
   "PyErr_Occurred()" para desambiguar.

   Distinto en la versión 3.1: Ahora un *pylong* negativo lanza un
   "OverflowError", no "TypeError".

unsigned long PyLong_AsUnsignedLongMask(PyObject *obj)

   Retorna una representación de C "unsigned long" de *obj*. Si *obj*
   no es una instancia de "PyLongObject", primero llama a su método
   "__index__()" o "__int__()" (si está presente) para convertirlo en
   un "PyLongObject".

   Si el valor de *obj* está fuera del rango para "unsigned long",
   retorna la reducción de ese valor módulo "ULONG_MAX + 1".

   Retorna "(unsigned long)-1" en caso de error. Use
   "PyErr_Occurred()" para desambiguar.

   Distinto en la versión 3.8: Use "__index__()" si está disponible.

   Obsoleto desde la versión 3.8: Usar "__int__()" está deprecado.

unsigned long long PyLong_AsUnsignedLongLongMask(PyObject *obj)

   Retorna una representación de C "unsigned long long" de *obj*. Si
   *obj* no es una instancia de "PyLongObject", primero llama a su
   método "__index__()" o "__int__()" (si está presente) para
   convertirlo en un "PyLongObject".

   Si el valor de *obj* está fuera del rango para "unsigned long
   long", retorna la reducción de ese valor módulo "PY_ULLONG_MAX +
   1".

   Retorna "(unsigned long long) -1" por error. Use "PyErr_Occurred()"
   para desambiguar.

   Distinto en la versión 3.8: Use "__index__()" si está disponible.

   Obsoleto desde la versión 3.8: Usar "__int__()" está deprecado.

double PyLong_AsDouble(PyObject *pylong)

   Retorna una representación de C "double" de *pylong*. *pylong* debe
   ser una instancia de "PyLongObject".

   Lanza "OverflowError" si el valor de *pylong* está fuera de rango
   para un "double".

   Retorna "-1.0" en caso de error. Use "PyErr_Occurred()" para
   desambiguar.

void* PyLong_AsVoidPtr(PyObject *pylong)

   Convierte un entero Python *pylong* en un puntero C "void". Si
   *pylong* no se puede convertir, se generará un "OverflowError".
   Esto solo se garantiza para producir un puntero utilizable "void"
   para valores creados con "PyLong_FromVoidPtr()".

   Retorna "NULL" en caso de error. Use "PyErr_Occurred()" para
   desambiguar.
