# Об’єкти комплексних чисел

Об’єкти комплексних чисел Python реалізуються як два різних типи, якщо дивитися через C API: один є об’єктом Python, відкритим для програм Python, а інший є структурою C, яка представляє фактичне значення комплексного числа. API надає функції для роботи з обома.

## Комплексні числа як C структури

Зауважте, що функції, які приймають ці структури як параметри та повертають їх як результати, роблять це за значенням, а не розіменовують їх через покажчики. Це узгоджено в усьому API.

type Py_complex

  The C structure which corresponds to the value portion of a Python complex number object. Most of the functions for dealing with complex number objects use structures of this type as input or output values, as appropriate. It is defined as:

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

Py_complex _Py_c_sum(Py_complex left, Py_complex right)

  Повертає суму двох комплексних чисел, використовуючи представлення C `Py_complex`.

Py_complex _Py_c_diff(Py_complex left, Py_complex right)

  Повертає різницю між двома комплексними числами, використовуючи представлення C `Py_complex`.

Py_complex _Py_c_neg(Py_complex num)

  Повертає заперечення комплексного числа num, використовуючи представлення C `Py_complex`.

Py_complex _Py_c_prod(Py_complex left, Py_complex right)

  Повертає добуток двох комплексних чисел, використовуючи представлення C `Py_complex`.

Py_complex _Py_c_quot(Py_complex dividend, Py_complex divisor)

  Повертає частку двох комплексних чисел, використовуючи представлення C `Py_complex`.

  If divisor is null, this method returns zero and sets `errno` to `EDOM`.

Py_complex _Py_c_pow(Py_complex num, Py_complex exp)

  Повертає піднесення num до степеня exp, використовуючи представлення C `Py_complex`.

  If num is null and exp is not a positive real number, this method returns zero and sets `errno` to `EDOM`.

## Комплексні числа як об’єкти Python

type PyComplexObject

  Цей підтип `PyObject` представляє об’єкт комплексного числа Python.

PyTypeObject PyComplex_Type
  Part of the Stable ABI.

  Цей екземпляр `PyTypeObject` представляє тип комплексного числа Python. Це той самий об’єкт, що й `complex` на рівні Python.

int PyComplex_Check(PyObject *p)

  Повертає true, якщо його аргумент є `PyComplexObject` або підтипом `PyComplexObject`. Ця функція завжди успішна.

int PyComplex_CheckExact(PyObject *p)

  Повертає true, якщо його аргумент є `PyComplexObject`, але не підтипом `PyComplexObject`. Ця функція завжди успішна.

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

  Create a new Python complex number object from a C `Py_complex` value.

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

  Return a new `PyComplexObject` object from real and imag.

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

  Return the real part of op as a C double.

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

  Return the imaginary part of op as a C double.

Py_complex PyComplex_AsCComplex(PyObject *op)

  Повертає значення `Py_complex` комплексного числа op.

  If op is not a Python complex number object but has a `__complex__()` method, this method will first be called to convert op to a Python complex number object. If `__complex__()` is not defined then it falls back to `__float__()`. If `__float__()` is not defined then it falls back to `__index__()`. Upon failure, this method returns `-1.0` as a real value.

  Змінено в версії 3.8: Use `__index__()` if available.