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.
Py_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_complex left,Py_complex right)¶ Return the sum of two complex numbers, using the C
Py_complexrepresentation.
- Py_complex
_Py_c_diff(Py_complex left,Py_complex right)¶ Return the difference between two complex numbers, using the C
Py_complexrepresentation.
- Py_complex
_Py_c_neg(Py_complex num)¶ Return the negation of the complex numbernum, using the C
Py_complexrepresentation.
- Py_complex
_Py_c_prod(Py_complex left,Py_complex right)¶ Return the product of two complex numbers, using the C
Py_complexrepresentation.
- Py_complex
_Py_c_quot(Py_complex dividend,Py_complex divisor)¶ Return the quotient of two complex numbers, using the C
Py_complexrepresentation.Ifdivisor is null, this method returns zero and sets
errnotoEDOM.
- Py_complex
_Py_c_pow(Py_complex num,Py_complex exp)¶ Return the exponentiation ofnum byexp, using the C
Py_complexrepresentation.Ifnum is null andexp is not a positive real number,this method returns zero and sets
errnotoEDOM.
Complex Numbers as Python Objects¶
- PyTypeObject
PyComplex_Type¶ This instance of
PyTypeObjectrepresents the Python complex numbertype. It is the same object ascomplexin the Python layer.
- int
PyComplex_Check(PyObject *p)¶ Return true if its argument is a
PyComplexObjector a subtype ofPyComplexObject. This function always succeeds.
- int
PyComplex_CheckExact(PyObject *p)¶ Return true if its argument is a
PyComplexObject, but not a subtype ofPyComplexObject. This function always succeeds.
- PyObject*
PyComplex_FromCComplex(Py_complex v)¶ - Return value: New reference.
Create a new Python complex number object from a C
Py_complexvalue.
- PyObject*
PyComplex_FromDoubles(double real, double imag)¶ - Return value: New reference.
Return a new
PyComplexObjectobject fromreal andimag.
- Py_complex
PyComplex_AsCComplex(PyObject *op)¶ Return the
Py_complexvalue 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.0as a realvalue.Changed in version 3.8:Use
__index__()if available.