#17117: UniversalCyclotomicField elements considered real
---------------------------------+------------------------
Reporter: gagern | Owner:
Type: defect | Status: new
Priority: major | Milestone: sage-6.4
Component: number fields | Resolution:
Keywords: | Merged in:
Authors: | Reviewers:
Report Upstream: N/A | Work issues:
Branch: | Commit:
Dependencies: | Stopgaps:
---------------------------------+------------------------
Description changed by gagern:
Old description:
> This is certainly wrong:
>
> {{{
> sage: UCF.<E> = UniversalCyclotomicField()
> sage: E3 = E(3)
> sage: E3
> E(3)
> sage: N(E3)
> -0.500000000000000 + 0.866025403784439*I
> sage: real(E3)
> E(3)
> sage: imag(E3)
> 0
> }}}
>
> This is probably due to the fact that `real` and `imag` aren't methods of
> this class, even though `conjugate` seems to work correctly.
>
> {{{
> sage: E3.conjugate()
> E(3)^2
> sage: conjugate(E3)
> E(3)^2
> sage: (E3 + E3.conjugate())/2
> -1/2
> sage: (E3 - E3.conjugate())/(2*E(4))
> -1/2*E(12)^7 + 1/2*E(12)^11
> }}}
>
> So I'd say these methods should be implemented, building on `conjugate`.
> Perhaps the functions will pick the methods up if they do exist, even
> though #17116 makes me far from certain on this point right now.
New description:
This is certainly wrong:
{{{
sage: UCF.<E> = UniversalCyclotomicField()
sage: E3 = E(3)
sage: E3
E(3)
sage: N(E3)
-0.500000000000000 + 0.866025403784439*I
sage: real(E3)
E(3)
sage: imag(E3)
0
}}}
This is probably due to the fact that `real` and `imag` aren't methods of
this class, even though `conjugate` seems to work correctly.
{{{
sage: E3.conjugate()
E(3)^2
sage: conjugate(E3)
E(3)^2
sage: (E3 + E3.conjugate())/2
-1/2
sage: (E3 - E3.conjugate())/(2*E(4))
-1/2*E(12)^7 + 1/2*E(12)^11
}}}
So I'd say these methods should be implemented, building on `conjugate`.
Perhaps the functions will pick the methods up if they do exist, even
though #17116 makes me far from certain on this point right now.
Furthermore, if asked explicitely then these objects know that they are
not real:
{{{
sage: E3.is_real()
False
}}}
So the `real` function might want to call such an `is_real` method if it
exists, and make sure not to simply return its argument if that method
returns `False`.
--
--
Ticket URL: <http://trac.sagemath.org/ticket/17117#comment:1>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica,
and MATLAB
--
You received this message because you are subscribed to the Google Groups
"sage-trac" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sage-trac.
For more options, visit https://groups.google.com/d/optout.