Complex argument of an algebraic number
This question is closely related to that question here. Basically I'd like to know whether there is a way to compute an accurate symbolic expression for the argument of an algebraic number.
That argument will in general not be an algebraic number itself, which seems to cause a lot of headache along the way. The following all fail, sometimes in rather spectacular backtracing ways:
sage: z = QQbar(3 + 2*I) sage: z.arg() AttributeError: 'AlgebraicNumber' object has no attribute 'arg' sage: atan2(imag(z), real(z)) TypeError: Illegal initializer for algebraic number sage: atan2(SR(imag(z)), SR(real(z))) TypeError: Illegal initializer for algebraic number sage: atan2(AA(imag(z)), AA(real(z))) TypeError: Illegal initializer for algebraic number
I know a few cases which will work.
sage: atan2(QQ(imag(z)), QQ(real(z))) arctan(2/3)
This however will break if the real or imaginary part were to contain any square roots.
sage: CC(z).arg() 0.588002603547568
This will give me a numeric approximation. I know I can get that approximation to arbitrary precision, but it's still not exact.
I have the impression that
atan2 attempts to turn its result into an algebraic number, which will fail horribly. I would expect that result to contain an unevaluated call to
atan2 instead, for the cases where the argument is not an algebraic number. Can this be done?