17db96d56Sopenharmony_ci.. highlight:: c 27db96d56Sopenharmony_ci 37db96d56Sopenharmony_ci.. _complexobjects: 47db96d56Sopenharmony_ci 57db96d56Sopenharmony_ciComplex Number Objects 67db96d56Sopenharmony_ci---------------------- 77db96d56Sopenharmony_ci 87db96d56Sopenharmony_ci.. index:: pair: object; complex number 97db96d56Sopenharmony_ci 107db96d56Sopenharmony_ciPython's complex number objects are implemented as two distinct types when 117db96d56Sopenharmony_civiewed from the C API: one is the Python object exposed to Python programs, and 127db96d56Sopenharmony_cithe other is a C structure which represents the actual complex number value. 137db96d56Sopenharmony_ciThe API provides functions for working with both. 147db96d56Sopenharmony_ci 157db96d56Sopenharmony_ci 167db96d56Sopenharmony_ciComplex Numbers as C Structures 177db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 187db96d56Sopenharmony_ci 197db96d56Sopenharmony_ciNote that the functions which accept these structures as parameters and return 207db96d56Sopenharmony_cithem as results do so *by value* rather than dereferencing them through 217db96d56Sopenharmony_cipointers. This is consistent throughout the API. 227db96d56Sopenharmony_ci 237db96d56Sopenharmony_ci 247db96d56Sopenharmony_ci.. c:type:: Py_complex 257db96d56Sopenharmony_ci 267db96d56Sopenharmony_ci The C structure which corresponds to the value portion of a Python complex 277db96d56Sopenharmony_ci number object. Most of the functions for dealing with complex number objects 287db96d56Sopenharmony_ci use structures of this type as input or output values, as appropriate. It is 297db96d56Sopenharmony_ci defined as:: 307db96d56Sopenharmony_ci 317db96d56Sopenharmony_ci typedef struct { 327db96d56Sopenharmony_ci double real; 337db96d56Sopenharmony_ci double imag; 347db96d56Sopenharmony_ci } Py_complex; 357db96d56Sopenharmony_ci 367db96d56Sopenharmony_ci 377db96d56Sopenharmony_ci.. c:function:: Py_complex _Py_c_sum(Py_complex left, Py_complex right) 387db96d56Sopenharmony_ci 397db96d56Sopenharmony_ci Return the sum of two complex numbers, using the C :c:type:`Py_complex` 407db96d56Sopenharmony_ci representation. 417db96d56Sopenharmony_ci 427db96d56Sopenharmony_ci 437db96d56Sopenharmony_ci.. c:function:: Py_complex _Py_c_diff(Py_complex left, Py_complex right) 447db96d56Sopenharmony_ci 457db96d56Sopenharmony_ci Return the difference between two complex numbers, using the C 467db96d56Sopenharmony_ci :c:type:`Py_complex` representation. 477db96d56Sopenharmony_ci 487db96d56Sopenharmony_ci 497db96d56Sopenharmony_ci.. c:function:: Py_complex _Py_c_neg(Py_complex num) 507db96d56Sopenharmony_ci 517db96d56Sopenharmony_ci Return the negation of the complex number *num*, using the C 527db96d56Sopenharmony_ci :c:type:`Py_complex` representation. 537db96d56Sopenharmony_ci 547db96d56Sopenharmony_ci 557db96d56Sopenharmony_ci.. c:function:: Py_complex _Py_c_prod(Py_complex left, Py_complex right) 567db96d56Sopenharmony_ci 577db96d56Sopenharmony_ci Return the product of two complex numbers, using the C :c:type:`Py_complex` 587db96d56Sopenharmony_ci representation. 597db96d56Sopenharmony_ci 607db96d56Sopenharmony_ci 617db96d56Sopenharmony_ci.. c:function:: Py_complex _Py_c_quot(Py_complex dividend, Py_complex divisor) 627db96d56Sopenharmony_ci 637db96d56Sopenharmony_ci Return the quotient of two complex numbers, using the C :c:type:`Py_complex` 647db96d56Sopenharmony_ci representation. 657db96d56Sopenharmony_ci 667db96d56Sopenharmony_ci If *divisor* is null, this method returns zero and sets 677db96d56Sopenharmony_ci :c:data:`errno` to :c:data:`EDOM`. 687db96d56Sopenharmony_ci 697db96d56Sopenharmony_ci 707db96d56Sopenharmony_ci.. c:function:: Py_complex _Py_c_pow(Py_complex num, Py_complex exp) 717db96d56Sopenharmony_ci 727db96d56Sopenharmony_ci Return the exponentiation of *num* by *exp*, using the C :c:type:`Py_complex` 737db96d56Sopenharmony_ci representation. 747db96d56Sopenharmony_ci 757db96d56Sopenharmony_ci If *num* is null and *exp* is not a positive real number, 767db96d56Sopenharmony_ci this method returns zero and sets :c:data:`errno` to :c:data:`EDOM`. 777db96d56Sopenharmony_ci 787db96d56Sopenharmony_ci 797db96d56Sopenharmony_ciComplex Numbers as Python Objects 807db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 817db96d56Sopenharmony_ci 827db96d56Sopenharmony_ci 837db96d56Sopenharmony_ci.. c:type:: PyComplexObject 847db96d56Sopenharmony_ci 857db96d56Sopenharmony_ci This subtype of :c:type:`PyObject` represents a Python complex number object. 867db96d56Sopenharmony_ci 877db96d56Sopenharmony_ci 887db96d56Sopenharmony_ci.. c:var:: PyTypeObject PyComplex_Type 897db96d56Sopenharmony_ci 907db96d56Sopenharmony_ci This instance of :c:type:`PyTypeObject` represents the Python complex number 917db96d56Sopenharmony_ci type. It is the same object as :class:`complex` in the Python layer. 927db96d56Sopenharmony_ci 937db96d56Sopenharmony_ci 947db96d56Sopenharmony_ci.. c:function:: int PyComplex_Check(PyObject *p) 957db96d56Sopenharmony_ci 967db96d56Sopenharmony_ci Return true if its argument is a :c:type:`PyComplexObject` or a subtype of 977db96d56Sopenharmony_ci :c:type:`PyComplexObject`. This function always succeeds. 987db96d56Sopenharmony_ci 997db96d56Sopenharmony_ci 1007db96d56Sopenharmony_ci.. c:function:: int PyComplex_CheckExact(PyObject *p) 1017db96d56Sopenharmony_ci 1027db96d56Sopenharmony_ci Return true if its argument is a :c:type:`PyComplexObject`, but not a subtype of 1037db96d56Sopenharmony_ci :c:type:`PyComplexObject`. This function always succeeds. 1047db96d56Sopenharmony_ci 1057db96d56Sopenharmony_ci 1067db96d56Sopenharmony_ci.. c:function:: PyObject* PyComplex_FromCComplex(Py_complex v) 1077db96d56Sopenharmony_ci 1087db96d56Sopenharmony_ci Create a new Python complex number object from a C :c:type:`Py_complex` value. 1097db96d56Sopenharmony_ci 1107db96d56Sopenharmony_ci 1117db96d56Sopenharmony_ci.. c:function:: PyObject* PyComplex_FromDoubles(double real, double imag) 1127db96d56Sopenharmony_ci 1137db96d56Sopenharmony_ci Return a new :c:type:`PyComplexObject` object from *real* and *imag*. 1147db96d56Sopenharmony_ci 1157db96d56Sopenharmony_ci 1167db96d56Sopenharmony_ci.. c:function:: double PyComplex_RealAsDouble(PyObject *op) 1177db96d56Sopenharmony_ci 1187db96d56Sopenharmony_ci Return the real part of *op* as a C :c:expr:`double`. 1197db96d56Sopenharmony_ci 1207db96d56Sopenharmony_ci 1217db96d56Sopenharmony_ci.. c:function:: double PyComplex_ImagAsDouble(PyObject *op) 1227db96d56Sopenharmony_ci 1237db96d56Sopenharmony_ci Return the imaginary part of *op* as a C :c:expr:`double`. 1247db96d56Sopenharmony_ci 1257db96d56Sopenharmony_ci 1267db96d56Sopenharmony_ci.. c:function:: Py_complex PyComplex_AsCComplex(PyObject *op) 1277db96d56Sopenharmony_ci 1287db96d56Sopenharmony_ci Return the :c:type:`Py_complex` value of the complex number *op*. 1297db96d56Sopenharmony_ci 1307db96d56Sopenharmony_ci If *op* is not a Python complex number object but has a :meth:`__complex__` 1317db96d56Sopenharmony_ci method, this method will first be called to convert *op* to a Python complex 1327db96d56Sopenharmony_ci number object. If ``__complex__()`` is not defined then it falls back to 1337db96d56Sopenharmony_ci :meth:`__float__`. If ``__float__()`` is not defined then it falls back 1347db96d56Sopenharmony_ci to :meth:`__index__`. Upon failure, this method returns ``-1.0`` as a real 1357db96d56Sopenharmony_ci value. 1367db96d56Sopenharmony_ci 1377db96d56Sopenharmony_ci .. versionchanged:: 3.8 1387db96d56Sopenharmony_ci Use :meth:`__index__` if available. 139