It depends on what kind of complex number you want. Sage provide tons, you do not need numpy, cython or whatever. Here are some examples (these are not the only ones):
With
sage: z = 1+2*I
sage: z.parent()
Symbolic Ring
You indeed get symbolic representation of a complex number, so you can do symboloc things such as:
sage: exp(pi*z).simplify()
e^pi
WIth
sage: z = 1+2*CDF.0
sage: z.parent()
Complex Double Field
You get a fast numerical representation of your complex number (you should prefer CDF
over CC
since both have the same precision, but CDF
takes the advantage of the CPU floating-point arithmetics, and the functions you will call from it will use optimized libraries).
With
sage: z = 1+2*ComplexIntervalField(1000).0
sage: z.parent()
Complex Interval Field with 1000 bits of precision
You get a certified numerical representation of your complex number with high precision (interval arithmetics).
With
sage: z = 1+2*QQbar.0
sage: z.parent()
Algebraic Field
You get an algebraic (hence exact) representation of your complex number (but pi
does not exist here).
With
sage: z = 1+2*ZZ[i].1
sage: z.parent()
Gaussian Integers in Number Field in I with defining polynomial x^2 + 1
You get a Gaussian integer.
And so on...
Now, you just have to decide what do you want to do with z
to select an appropriate representation.