Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Constructing a number field with complex embedding

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