Spaces:
Running on Zero
Running on Zero
| # Complex Number Objects {#complexobjects} | |
| ::: index | |
| pair: object; complex number | |
| ::: | |
| > This subtype of `PyObject`{.interpreted-text role="c:type"} represents a Python complex number object. | |
| > | |
| > > The complex number value, using the C `Py_complex`{.interpreted-text role="c:type"} representation. | |
| > > | |
| > > ::: deprecated-removed | |
| > > 3.15 3.20 Use `PyComplex_AsCComplex`{.interpreted-text role="c:func"} and `PyComplex_FromCComplex`{.interpreted-text role="c:func"} to convert a Python complex number to/from the C `Py_complex`{.interpreted-text role="c:type"} representation. | |
| > > ::: | |
| > This instance of `PyTypeObject`{.interpreted-text role="c:type"} represents the Python complex number type. It is the same object as `complex`{.interpreted-text role="class"} in the Python layer. | |
| > Return true if its argument is a `PyComplexObject`{.interpreted-text role="c:type"} or a subtype of `PyComplexObject`{.interpreted-text role="c:type"}. This function always succeeds. | |
| > Return true if its argument is a `PyComplexObject`{.interpreted-text role="c:type"}, but not a subtype of `PyComplexObject`{.interpreted-text role="c:type"}. This function always succeeds. | |
| > Return a new `PyComplexObject`{.interpreted-text role="c:type"} object from *real* and *imag*. Return `NULL` with an exception set on error. | |
| > Return the real part of *op* as a C `double`{.interpreted-text role="c:expr"}. | |
| > | |
| > If *op* is not a Python complex number object but has a `~object.__complex__`{.interpreted-text role="meth"} method, this method will first be called to convert *op* to a Python complex number object. If `!__complex__`{.interpreted-text role="meth"} is not defined then it falls back to call `PyFloat_AsDouble`{.interpreted-text role="c:func"} and returns its result. | |
| > | |
| > Upon failure, this method returns `-1.0` with an exception set, so one should call `PyErr_Occurred`{.interpreted-text role="c:func"} to check for errors. | |
| > | |
| > ::: versionchanged | |
| > 3.13 Use `~object.__complex__`{.interpreted-text role="meth"} if available. | |
| > ::: | |
| > Return the imaginary part of *op* as a C `double`{.interpreted-text role="c:expr"}. | |
| > | |
| > If *op* is not a Python complex number object but has a `~object.__complex__`{.interpreted-text role="meth"} method, this method will first be called to convert *op* to a Python complex number object. If `!__complex__`{.interpreted-text role="meth"} is not defined then it falls back to call `PyFloat_AsDouble`{.interpreted-text role="c:func"} and returns `0.0` on success. | |
| > | |
| > Upon failure, this method returns `-1.0` with an exception set, so one should call `PyErr_Occurred`{.interpreted-text role="c:func"} to check for errors. | |
| > | |
| > ::: versionchanged | |
| > 3.13 Use `~object.__complex__`{.interpreted-text role="meth"} if available. | |
| > ::: | |
| > This C structure defines an export format for a Python complex number object. | |
| > | |
| > The structure is defined as: | |
| > | |
| > ``` c | |
| > typedef struct { | |
| > double real; | |
| > double imag; | |
| > } Py_complex; | |
| > ``` | |
| > Create a new Python complex number object from a C `Py_complex`{.interpreted-text role="c:type"} value. Return `NULL` with an exception set on error. | |
| > Return the `Py_complex`{.interpreted-text role="c:type"} value of the complex number *op*. | |
| > | |
| > If *op* is not a Python complex number object but has a `~object.__complex__`{.interpreted-text role="meth"} method, this method will first be called to convert *op* to a Python complex number object. If `!__complex__`{.interpreted-text role="meth"} is not defined then it falls back to `~object.__float__`{.interpreted-text role="meth"}. If `!__float__`{.interpreted-text role="meth"} is not defined then it falls back to `~object.__index__`{.interpreted-text role="meth"}. | |
| > | |
| > Upon failure, this method returns `Py_complex`{.interpreted-text role="c:type"} with `~Py_complex.real`{.interpreted-text role="c:member"} set to `-1.0` and with an exception set, so one should call `PyErr_Occurred`{.interpreted-text role="c:func"} to check for errors. | |
| > | |
| > ::: versionchanged | |
| > 3.8 Use `~object.__index__`{.interpreted-text role="meth"} if available. | |
| > ::: | |
| ## Complex Numbers as C Structures | |
| The API also provides functions for working with complex numbers, using the `Py_complex`{.interpreted-text role="c:type"} 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`{.interpreted-text role="term"} since Python 3.15. Avoid using this API in a new code to do complex arithmetic: either use the [Number Protocol](number) API or use native complex types, like `double complex`{.interpreted-text role="c:expr"}. | |
| > Return the sum of two complex numbers, using the C `Py_complex`{.interpreted-text role="c:type"} representation. | |
| > | |
| > ::: deprecated | |
| > 3.15 | |
| > ::: | |
| > Return the difference between two complex numbers, using the C `Py_complex`{.interpreted-text role="c:type"} representation. | |
| > | |
| > ::: deprecated | |
| > 3.15 | |
| > ::: | |
| > Return the negation of the complex number *num*, using the C `Py_complex`{.interpreted-text role="c:type"} representation. | |
| > | |
| > ::: deprecated | |
| > 3.15 | |
| > ::: | |
| > Return the product of two complex numbers, using the C `Py_complex`{.interpreted-text role="c:type"} representation. | |
| > | |
| > ::: deprecated | |
| > 3.15 | |
| > ::: | |
| > Return the quotient of two complex numbers, using the C `Py_complex`{.interpreted-text role="c:type"} representation. | |
| > | |
| > If *divisor* is null, this method returns zero and sets `errno`{.interpreted-text role="c:data"} to `!EDOM`{.interpreted-text role="c:macro"}. | |
| > | |
| > ::: deprecated | |
| > 3.15 | |
| > ::: | |
| > Return the exponentiation of *num* by *exp*, using the C `Py_complex`{.interpreted-text role="c:type"} representation. | |
| > | |
| > If *num* is null and *exp* is not a positive real number, this method returns zero and sets `errno`{.interpreted-text role="c:data"} to `!EDOM`{.interpreted-text role="c:macro"}. | |
| > | |
| > Set `errno`{.interpreted-text role="c:data"} to `!ERANGE`{.interpreted-text role="c:macro"} on overflows. | |
| > | |
| > ::: deprecated | |
| > 3.15 | |
| > ::: | |
| > Return the absolute value of the complex number *num*. | |
| > | |
| > Set `errno`{.interpreted-text role="c:data"} to `!ERANGE`{.interpreted-text role="c:macro"} on overflows. | |
| > | |
| > ::: deprecated | |
| > 3.15 | |
| > ::: | |