ITookAPill's picture
PyComp First Commit
9273228
|
Raw
History Blame Contribute Delete
6.26 kB
# 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
> :::