Objetos de números complejos
****************************

type PyComplexObject

   Este subtipo de "PyObject" representa un objeto de número complejo
   de Python.

   Py_complex cval

      The complex number value, using the C "Py_complex"
      representation.

      Deprecated since version 3.15, will be removed in version 3.20:
      Use "PyComplex_AsCComplex()" and "PyComplex_FromCComplex()" to
      convert a Python complex number to/from the C "Py_complex"
      representation.

PyTypeObject PyComplex_Type
    * Part of the Stable ABI.*

   Esta instancia de "PyTypeObject" representa el tipo de número
   complejo de Python. Es el mismo objeto que "complex" en la capa de
   Python.

int PyComplex_Check(PyObject *p)

   Retorna verdadero si su argumento es un "PyComplexObject" o un
   subtipo de "PyComplexObject". Esta función siempre finaliza con
   éxito.

int PyComplex_CheckExact(PyObject *p)

   Retorna verdadero si su argumento es un "PyComplexObject", pero no
   un subtipo de "PyComplexObject". Esta función siempre finaliza con
   éxito.

PyObject *PyComplex_FromDoubles(double real, double imag)
    *Return value: New reference.** Part of the Stable ABI.*

   Retorna un nuevo objeto "PyComplexObject" de *real* e *imag*.
   Retorna "NULL" con una excepción establecida en caso de error.

double PyComplex_RealAsDouble(PyObject *op)
    * Part of the Stable ABI.*

   Retorna la parte real de *op* como double en C.

   Si *op* no es un objeto de número complejo de Python pero tiene un
   método "__complex__()", primero se llamará a este método para
   convertir *op* en un objeto de número complejo de Python. Si
   "__complex__()" no está definido, entonces recurre a
   "PyFloat_AsDouble()" y retorna su resultado.

   En caso de falla, este método retorna "-1.0" con una excepción
   establecida, por lo que se debe llamar "PyErr_Occurred()" para
   verificar si hay errores.

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

double PyComplex_ImagAsDouble(PyObject *op)
    * Part of the Stable ABI.*

   Retorna la parte imaginaria de *op* como un double de C.

   Si *op* no es un objeto de número complejo de Python pero tiene un
   método "__complex__()", primero se llamará a este método para
   convertir *op* en un objeto de número complejo de Python. Si
   "__complex__()" no está definido, entonces recurre a
   "PyFloat_AsDouble()" y retorna "0.0" en caso de éxito.

   En caso de falla, este método retorna "-1.0" con una excepción
   establecida, por lo que se debe llamar "PyErr_Occurred()" para
   verificar si hay errores.

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

type Py_complex

   This C structure defines an export format for a Python complex
   number object.

   double real
   double imag

   La estructura se define como:

      typedef struct {
          double real;
          double imag;
      } Py_complex;

PyObject *PyComplex_FromCComplex(Py_complex v)
    *Return value: New reference.*

   Crea un nuevo objeto de número complejo de Python a partir de un
   valor C "Py_complex". Retorna "NULL" con una excepción establecida
   en caso de error.

Py_complex PyComplex_AsCComplex(PyObject *op)

   Retorna el valor "Py_complex" del número complejo *op*.

   Si *op* no es un objeto de número complejo de Python pero tiene un
   método "__complex__()", primero se llamará a este método para
   convertir *op* en un objeto de número complejo de Python. Si
   "__complex__()" no está definido, entonces recurre a "__float__()".
   Si "__float__()" no está definido, entonces recurre a
   "__index__()".

   En caso de falla, este método retorna "Py_complex" con "real"
   establecido en "-1.0" y con una excepción establecida, por lo que
   se debe llamar a "PyErr_Occurred()" para verificar si hay errores.

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


Números complejos como estructuras C
====================================

The API also provides functions for working with complex numbers,
using the "Py_complex" representation.  Note that the functions which
accept these structures as parameters and return them as results do so
*by value* rather than dereferencing them through pointers.

Please note, that these functions are *soft deprecated* since Python
3.15.  Avoid using this API in a new code to do complex arithmetic:
either use the Number Protocol API or use native complex types, like
double complex.

Py_complex _Py_c_sum(Py_complex left, Py_complex right)

   Retorna la suma de dos números complejos, utilizando la
   representación C "Py_complex".

   Obsoleto desde la versión 3.15.

Py_complex _Py_c_diff(Py_complex left, Py_complex right)

   Retorna la diferencia entre dos números complejos, usando la
   representación C "Py_complex".

   Obsoleto desde la versión 3.15.

Py_complex _Py_c_neg(Py_complex num)

   Retorna la negación del número complejo *num*, utilizando la
   representación C "Py_complex".

   Obsoleto desde la versión 3.15.

Py_complex _Py_c_prod(Py_complex left, Py_complex right)

   Retorna el producto de dos números complejos, usando la
   representación C "Py_complex".

   Obsoleto desde la versión 3.15.

Py_complex _Py_c_quot(Py_complex dividend, Py_complex divisor)

   Retorna el cociente de dos números complejos, utilizando la
   representación C "Py_complex".

   Si *divisor* es nulo, este método retorna cero y establece "errno"
   en "EDOM".

   Obsoleto desde la versión 3.15.

Py_complex _Py_c_pow(Py_complex num, Py_complex exp)

   Retorna la exponenciación de *num* por *exp*, utilizando la
   representación C "Py_complex".

   Si *num* es nulo y *exp* no es un número real positivo, este método
   retorna cero y establece "errno" a "EDOM".

   Set "errno" to "ERANGE" on overflows.

   Obsoleto desde la versión 3.15.

double _Py_c_abs(Py_complex num)

   Return the absolute value of the complex number *num*.

   Set "errno" to "ERANGE" on overflows.

   Obsoleto desde la versión 3.15.
