Protocolo de números
********************

int PyNumber_Check(PyObject *o)

   Retorna "1" si el objeto *o* proporciona protocolos numéricos, y
   falso en caso contrario. Esta función siempre finaliza con éxito.

   Distinto en la versión 3.8: Retorna "1" si *o* es un índice entero.

PyObject* PyNumber_Add(PyObject *o1, PyObject *o2)
    *Return value: New reference.*

   Retorna el resultado de agregar *o1* y *o2*, o "NULL" en caso de
   falla. Este es el equivalente de la expresión de Python "o1 + o2".

PyObject* PyNumber_Subtract(PyObject *o1, PyObject *o2)
    *Return value: New reference.*

   Retorna el resultado de restar *o2* de *o1*, o "NULL" en caso de
   falla. Este es el equivalente de la expresión de Python "o1 - o2".

PyObject* PyNumber_Multiply(PyObject *o1, PyObject *o2)
    *Return value: New reference.*

   Retorna el resultado de multiplicar *o1* y *o2*, o "NULL" en caso
   de error. Este es el equivalente de la expresión de Python "o1 *
   o2".

PyObject* PyNumber_MatrixMultiply(PyObject *o1, PyObject *o2)
    *Return value: New reference.*

   Retorna el resultado de la multiplicación de matrices en *o1* y
   *o2*, o "NULL" en caso de falla. Este es el equivalente de la
   expresión de Python "o1 @ o2".

   Nuevo en la versión 3.5.

PyObject* PyNumber_FloorDivide(PyObject *o1, PyObject *o2)
    *Return value: New reference.*

   Return the floor of *o1* divided by *o2*, or "NULL" on failure.
   This is the equivalent of the Python expression "o1 // o2".

PyObject* PyNumber_TrueDivide(PyObject *o1, PyObject *o2)
    *Return value: New reference.*

   Return a reasonable approximation for the mathematical value of
   *o1* divided by *o2*, or "NULL" on failure.  The return value is
   "approximate" because binary floating point numbers are
   approximate; it is not possible to represent all real numbers in
   base two.  This function can return a floating point value when
   passed two integers.  This is the equivalent of the Python
   expression "o1 / o2".

PyObject* PyNumber_Remainder(PyObject *o1, PyObject *o2)
    *Return value: New reference.*

   Retorna el resto de dividir *o1* entre *o2* o "NULL" en caso de
   error. Este es el equivalente de la expresión de Python "o1% o2".

PyObject* PyNumber_Divmod(PyObject *o1, PyObject *o2)
    *Return value: New reference.*

   Vea la función incorporada "divmod()". Retorna "NULL" en caso de
   falla. Este es el equivalente de la expresión de Python "divmod
   (o1, o2)".

PyObject* PyNumber_Power(PyObject *o1, PyObject *o2, PyObject *o3)
    *Return value: New reference.*

   Consulte la función incorporada "pow()". Retorna "NULL" en caso de
   falla. Este es el equivalente de la expresión de Python "pow(o1,
   o2, o3)", donde *o3* es opcional. Si se ignora *o3*, pase "Py_None"
   en su lugar (pasar "NULL" por *o3* provocaría un acceso ilegal a la
   memoria).

PyObject* PyNumber_Negative(PyObject *o)
    *Return value: New reference.*

   Retorna la negación de *o* en caso de éxito o "NULL" en caso de
   error. Este es el equivalente de la expresión de Python "-o".

PyObject* PyNumber_Positive(PyObject *o)
    *Return value: New reference.*

   Retorna *o* en caso de éxito o "NULL" en caso de error. Este es el
   equivalente de la expresión de Python "+o".

PyObject* PyNumber_Absolute(PyObject *o)
    *Return value: New reference.*

   Retorna el valor absoluto de *o* o "NULL" en caso de error. Este es
   el equivalente de la expresión de Python "abs(o)".

PyObject* PyNumber_Invert(PyObject *o)
    *Return value: New reference.*

   Retorna la negación bit a bit de *o* en caso de éxito o "NULL" en
   caso de error. Este es el equivalente de la expresión de Python
   "~o".

PyObject* PyNumber_Lshift(PyObject *o1, PyObject *o2)
    *Return value: New reference.*

   Retorna el resultado del desplazamiento a la izquierda *o1* por
   *o2* en caso de éxito o "NULL" en caso de error. Este es el
   equivalente de la expresión de Python "o1 << o2".

PyObject* PyNumber_Rshift(PyObject *o1, PyObject *o2)
    *Return value: New reference.*

   Retorna el resultado del desplazamiento a la derecha *o1* por *o2*
   en caso de éxito o "NULL" en caso de error. Este es el equivalente
   de la expresión de Python "o1 >> o2".

PyObject* PyNumber_And(PyObject *o1, PyObject *o2)
    *Return value: New reference.*

   Retorna el "bit a bit y" (*bitwise and*) de *o1* y *o2* en caso de
   éxito y "NULL" en caso de error. Este es el equivalente de la
   expresión de Python "o1 & o2".

PyObject* PyNumber_Xor(PyObject *o1, PyObject *o2)
    *Return value: New reference.*

   Retorna el "bit a bit o exclusivo" (*bitwise exclusive or*) de *o1*
   por *o2* en caso de éxito, o "NULL" en caso de error. Este es el
   equivalente de la expresión de Python "o1 ^ o2".

PyObject* PyNumber_Or(PyObject *o1, PyObject *o2)
    *Return value: New reference.*

   Retorna el "bit a bit o" (*bitwise or*) de *o1* y *o2* en caso de
   éxito, o "NULL" en caso de error. Este es el equivalente de la
   expresión de Python "o1 | o2".

PyObject* PyNumber_InPlaceAdd(PyObject *o1, PyObject *o2)
    *Return value: New reference.*

   Retorna el resultado de agregar *o1* y *o2*, o "NULL" en caso de
   falla. La operación se realiza en su lugar (*in-place*) cuando *o1*
   lo admite. Este es el equivalente de la declaración de Python "o1
   += o2".

PyObject* PyNumber_InPlaceSubtract(PyObject *o1, PyObject *o2)
    *Return value: New reference.*

   Retorna el resultado de restar *o2* de *o1*, o "NULL" en caso de
   falla. La operación se realiza en su lugar (*in-place*) cuando *o1*
   lo admite. Este es el equivalente de la declaración de Python "o1
   -= o2".

PyObject* PyNumber_InPlaceMultiply(PyObject *o1, PyObject *o2)
    *Return value: New reference.*

   Retorna el resultado de multiplicar *o1* y *o2*, o "NULL" en caso
   de error. La operación se realiza en su lugar (*in-place*) cuando
   *o1* lo admite. Este es el equivalente de la declaración de Python
   "o1 *= o2".

PyObject* PyNumber_InPlaceMatrixMultiply(PyObject *o1, PyObject *o2)
    *Return value: New reference.*

   Retorna el resultado de la multiplicación de matrices en *o1* y
   *o2*, o "NULL" en caso de falla. La operación se realiza en su
   lugar (*in-place*) cuando *o1* lo admite. Este es el equivalente de
   la declaración de Python "o1 @= o2".

   Nuevo en la versión 3.5.

PyObject* PyNumber_InPlaceFloorDivide(PyObject *o1, PyObject *o2)
    *Return value: New reference.*

   Retorna el piso matemático de dividir *o1* por *o2*, o "NULL" en
   caso de falla. La operación se realiza en su lugar (*in-place*)
   cuando *o1* lo admite. Este es el equivalente de la declaración de
   Python "o1 //= o2".

PyObject* PyNumber_InPlaceTrueDivide(PyObject *o1, PyObject *o2)
    *Return value: New reference.*

   Return a reasonable approximation for the mathematical value of
   *o1* divided by *o2*, or "NULL" on failure.  The return value is
   "approximate" because binary floating point numbers are
   approximate; it is not possible to represent all real numbers in
   base two.  This function can return a floating point value when
   passed two integers.  The operation is done *in-place* when *o1*
   supports it. This is the equivalent of the Python statement "o1 /=
   o2".

PyObject* PyNumber_InPlaceRemainder(PyObject *o1, PyObject *o2)
    *Return value: New reference.*

   Retorna el resto de dividir *o1* entre *o2* o "NULL" en caso de
   error. La operación se realiza en su lugar (*in-place*) cuando *o1*
   lo admite. Este es el equivalente de la declaración de Python "o1%=
   o2".

PyObject* PyNumber_InPlacePower(PyObject *o1, PyObject *o2, PyObject *o3)
    *Return value: New reference.*

   Consulte la función incorporada "pow()". Retorna "NULL" en caso de
   falla. La operación se realiza en su lugar (*in-place*) cuando *o1*
   lo admite. Este es el equivalente de la declaración de Python "o1
   **= o2" cuando *o3* es "Py_None", o una variante en su lugar (*in-
   place*) de "pow (o1, o2, o3)" de lo contrario. Si se ignora *o3*,
   pase "Py_None" en su lugar (pasar "NULL" para *o3* provocaría un
   acceso ilegal a la memoria).

PyObject* PyNumber_InPlaceLshift(PyObject *o1, PyObject *o2)
    *Return value: New reference.*

   Retorna el resultado del desplazamiento a la izquierda *o1* por
   *o2* en caso de éxito o "NULL" en caso de error. La operación se
   realiza en su sitio (*in-place*) cuando *o1* lo admite. Este es el
   equivalente de la declaración de Python "o1 <<= o2".

PyObject* PyNumber_InPlaceRshift(PyObject *o1, PyObject *o2)
    *Return value: New reference.*

   Retorna el resultado del desplazamiento a la derecha *o1* por *o2*
   en caso de éxito o "NULL" en caso de error. La operación se realiza
   en su lugar (*in-place*) cuando *o1* lo admite. Este es el
   equivalente de la declaración de Python "o1 >>= o2".

PyObject* PyNumber_InPlaceAnd(PyObject *o1, PyObject *o2)
    *Return value: New reference.*

   Retorna el "bit a bit y" (*bitwise and*) de *o1* y *o2* en caso de
   éxito y "NULL" en caso de error. La operación se realiza en su
   lugar (*in-place*) cuando *o1* lo admite. Este es el equivalente de
   la declaración de Python "o1 &= o2".

PyObject* PyNumber_InPlaceXor(PyObject *o1, PyObject *o2)
    *Return value: New reference.*

   Retorna el "bit a bit o exclusivo" (*bitwise exclusive or*) de *o1*
   por *o2* en caso de éxito, o "NULL" en caso de error. La operación
   se realiza en su lugar (*in-place*) cuando *o1* lo admite. Este es
   el equivalente de la declaración de Python "o1 ^= o2".

PyObject* PyNumber_InPlaceOr(PyObject *o1, PyObject *o2)
    *Return value: New reference.*

   Retorna el "bit a bit o" (*bitwise or*) de *o1* y *o2* en caso de
   éxito, o "NULL" en caso de error. La operación se realiza en su
   lugar *in-place* cuando *o1* lo admite. Este es el equivalente de
   la declaración de Python "o1 |= o2".

PyObject* PyNumber_Long(PyObject *o)
    *Return value: New reference.*

   Retorna el *o* convertido a un objeto entero en caso de éxito, o
   "NULL" en caso de error. Este es el equivalente de la expresión de
   Python "int(o)".

PyObject* PyNumber_Float(PyObject *o)
    *Return value: New reference.*

   Retorna el *o* convertido a un objeto flotante en caso de éxito o
   "NULL" en caso de error. Este es el equivalente de la expresión de
   Python "float(o)".

PyObject* PyNumber_Index(PyObject *o)
    *Return value: New reference.*

   Retorna el *o* convertido aun entero de Python (*int*) en caso de
   éxito o "NULL" con una excepción "TypeError" generada en caso de
   error.

PyObject* PyNumber_ToBase(PyObject *n, int base)
    *Return value: New reference.*

   Retorna el entero *n* convertido a base *base* como una cadena de
   caracteres. El argumento *base* debe ser uno de 2, 8, 10 o 16. Para
   la base 2, 8 o 16, la cadena retornada está prefijada con un
   marcador base de "'0b'"', "'0o'" o "'0x'", respectivamente. Si *n*
   no es un entero (*int*) Python, primero se convierte con
   "PyNumber_Index()".

Py_ssize_t PyNumber_AsSsize_t(PyObject *o, PyObject *exc)

   Returns *o* converted to a "Py_ssize_t" value if *o* can be
   interpreted as an integer.  If the call fails, an exception is
   raised and "-1" is returned.

   If *o* can be converted to a Python int but the attempt to convert
   to a "Py_ssize_t" value would raise an "OverflowError", then the
   *exc* argument is the type of exception that will be raised
   (usually "IndexError" or "OverflowError").  If *exc* is "NULL",
   then the exception is cleared and the value is clipped to
   "PY_SSIZE_T_MIN" for a negative integer or "PY_SSIZE_T_MAX" for a
   positive integer.

int PyIndex_Check(PyObject *o)

   Returns "1" if *o* is an index integer (has the "nb_index" slot of
   the "tp_as_number" structure filled in), and "0" otherwise. This
   function always succeeds.
