1 /* Complex number structure */
2 
3 #ifndef Py_COMPLEXOBJECT_H
4 #define Py_COMPLEXOBJECT_H
5 #ifdef __cplusplus
6 extern "C" {
7 #endif
8 
9 #ifndef Py_LIMITED_API
10 typedef struct {
11     double real;
12     double imag;
13 } Py_complex;
14 
15 /* Operations on complex numbers from complexmodule.c */
16 
17 PyAPI_FUNC(Py_complex) _Py_c_sum(Py_complex, Py_complex);
18 PyAPI_FUNC(Py_complex) _Py_c_diff(Py_complex, Py_complex);
19 PyAPI_FUNC(Py_complex) _Py_c_neg(Py_complex);
20 PyAPI_FUNC(Py_complex) _Py_c_prod(Py_complex, Py_complex);
21 PyAPI_FUNC(Py_complex) _Py_c_quot(Py_complex, Py_complex);
22 PyAPI_FUNC(Py_complex) _Py_c_pow(Py_complex, Py_complex);
23 PyAPI_FUNC(double) _Py_c_abs(Py_complex);
24 #endif
25 
26 /* Complex object interface */
27 
28 /*
29 PyComplexObject represents a complex number with double-precision
30 real and imaginary parts.
31 */
32 #ifndef Py_LIMITED_API
33 typedef struct {
34     PyObject_HEAD
35     Py_complex cval;
36 } PyComplexObject;
37 #endif
38 
39 PyAPI_DATA(PyTypeObject) PyComplex_Type;
40 
41 #define PyComplex_Check(op) PyObject_TypeCheck(op, &PyComplex_Type)
42 #define PyComplex_CheckExact(op) (Py_TYPE(op) == &PyComplex_Type)
43 
44 #ifndef Py_LIMITED_API
45 PyAPI_FUNC(PyObject *) PyComplex_FromCComplex(Py_complex);
46 #endif
47 PyAPI_FUNC(PyObject *) PyComplex_FromDoubles(double real, double imag);
48 
49 PyAPI_FUNC(double) PyComplex_RealAsDouble(PyObject *op);
50 PyAPI_FUNC(double) PyComplex_ImagAsDouble(PyObject *op);
51 #ifndef Py_LIMITED_API
52 PyAPI_FUNC(Py_complex) PyComplex_AsCComplex(PyObject *op);
53 #endif
54 
55 /* Format the object based on the format_spec, as defined in PEP 3101
56    (Advanced String Formatting). */
57 #ifndef Py_LIMITED_API
58 PyAPI_FUNC(int) _PyComplex_FormatAdvancedWriter(
59     _PyUnicodeWriter *writer,
60     PyObject *obj,
61     PyObject *format_spec,
62     Py_ssize_t start,
63     Py_ssize_t end);
64 #endif
65 
66 #ifdef __cplusplus
67 }
68 #endif
69 #endif /* !Py_COMPLEXOBJECT_H */
70