I am using the function number_field_elements_from_algebraics
in sage.rings.qqbar
to write some algebraic numbers as elements of a number field. I am passing embedded=True
to also construct an embedding into QQbar
. This works fine if the algebraic numbers are real but fails if they are complex:
sage: number_field_elements_from_algebraics([1 + sqrt(7)], embedded=True) (Number Field in a with defining polynomial y^2 - 7 with a = 2.645751311064591?, [a + 1], Ring morphism: From: Number Field in a with defining polynomial y^2 - 7 with a = 2.645751311064591? To: Algebraic Real Field Defn: a |--> 2.645751311064591?)
sage: number_field_elements_from_algebraics([1 + sqrt(-7)], embedded=True) --------------------------------------------------------------------------- NotImplementedError Traceback (most recent call last) <ipython-input-1-ac220615ad5b> in <module>() ----> 1 number_field_elements_from_algebraics([Integer(1) + sqrt(-Integer(7))], embedded=True) /usr/lib/python2.7/site-packages/sage/rings/qqbar.pyc in number_field_elements_from_algebraics( numbers, minimal, same_field, embedded, prec) 2242 real_case = False 2243 if embedded: -> 2244 raise NotImplementedError 2245 # Make the numbers algebraic 2246 numbers = [mk_algebraic(_) for _ in numbers] NotImplementedError:
What is the reason for why only embeddings of real numbers are supported?
I modified the code in number_field_elements_from_algebraics
to support complex embeddings by essentially removing the check for whether the numbers are real and replacing RealIntervalField
by ComplexIntervalField
. This seems to work and the doctests still pass with these modifications. However I am worried that there was a good reason (either mathematically or related to some sage internals) for restricting this function to the real case.
The relevant code in sage.rings.qqbar
was introduced in these commits:
26dc3e4e6a26f6f613a69d57929ea492c278dad0
a9045bf8a3aab2d0aa00be17e91227bc1b50262a