Complex Number Objects

Python’s complex number objects are implemented as two distinct types whenviewed from the C API: one is the Python object exposed to Python programs, andthe other is a C structure which represents the actual complex number value.The API provides functions for working with both.

Complex Numbers as C Structures

Note that the functions which accept these structures as parameters and returnthem as results do soby value rather than dereferencing them throughpointers. This is consistent throughout the API.

typePy_complex

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

typedefstruct{doublereal;doubleimag;}Py_complex;
Py_complex_Py_c_sum(Py_complexleft,Py_complexright)

Return the sum of two complex numbers, using the CPy_complexrepresentation.

Py_complex_Py_c_diff(Py_complexleft,Py_complexright)

Return the difference between two complex numbers, using the CPy_complex representation.

Py_complex_Py_c_neg(Py_complexnum)

Return the negation of the complex numbernum, using the CPy_complex representation.

Py_complex_Py_c_prod(Py_complexleft,Py_complexright)

Return the product of two complex numbers, using the CPy_complexrepresentation.

Py_complex_Py_c_quot(Py_complexdividend,Py_complexdivisor)

Return the quotient of two complex numbers, using the CPy_complexrepresentation.

Ifdivisor is null, this method returns zero and setserrno toEDOM.

Py_complex_Py_c_pow(Py_complexnum,Py_complexexp)

Return the exponentiation ofnum byexp, using the CPy_complexrepresentation.

Ifnum is null andexp is not a positive real number,this method returns zero and setserrno toEDOM.

Complex Numbers as Python Objects

typePyComplexObject

This subtype ofPyObject represents a Python complex number object.

PyTypeObjectPyComplex_Type
Part of theStable ABI.

This instance ofPyTypeObject represents the Python complex numbertype. It is the same object ascomplex in the Python layer.

intPyComplex_Check(PyObject*p)

Return true if its argument is aPyComplexObject or a subtype ofPyComplexObject. This function always succeeds.

intPyComplex_CheckExact(PyObject*p)

Return true if its argument is aPyComplexObject, but not a subtype ofPyComplexObject. This function always succeeds.

PyObject*PyComplex_FromCComplex(Py_complexv)
Return value: New reference.

Create a new Python complex number object from a CPy_complex value.

PyObject*PyComplex_FromDoubles(doublereal,doubleimag)
Return value: New reference. Part of theStable ABI.

Return a newPyComplexObject object fromreal andimag.

doublePyComplex_RealAsDouble(PyObject*op)
Part of theStable ABI.

Return the real part ofop as a Cdouble.

doublePyComplex_ImagAsDouble(PyObject*op)
Part of theStable ABI.

Return the imaginary part ofop as a Cdouble.

Py_complexPyComplex_AsCComplex(PyObject*op)

Return thePy_complex value of the complex numberop.

Ifop is not a Python complex number object but has a__complex__()method, this method will first be called to convertop to a Python complexnumber object. If__complex__() is not defined then it falls back to__float__(). If__float__() is not defined then it falls backto__index__(). Upon failure, this method returns-1.0 as a realvalue.

Changed in version 3.8:Use__index__() if available.