@@ -20,6 +20,7 @@ fields (generally `\RR` or `\CC`).
20
20
# http://www.gnu.org/licenses/
21
21
# *****************************************************************************
22
22
23
+ import sage.rings.complex_double
23
24
24
25
from sage.structure.element cimport Element
25
26
from sage.categories.morphism cimport Morphism
@@ -173,34 +174,34 @@ cdef class EmbeddedNumberFieldMorphism(NumberFieldEmbedding):
173
174
174
175
"""
175
176
if ambient_field is None :
176
- from sage.rings.complex_double import CDF
177
- default_ambient_field = CDF
178
- Kemb = K.coerce_embedding()
179
- if Kemb is None :
177
+ if K.coerce_embedding() is None :
180
178
raise TypeError (" No embedding available for %s " % K)
181
- Kemb = Kemb.codomain()
179
+ Kemb = K
182
180
while Kemb.coerce_embedding() is not None :
183
181
Kemb = Kemb.coerce_embedding().codomain()
184
- Lemb = L.coerce_embedding()
185
- if Lemb is None :
182
+ if L.coerce_embedding() is None :
186
183
raise TypeError (" No embedding available for %s " % L)
187
- Lemb = Lemb.codomain()
184
+ Lemb = L
188
185
while Lemb.coerce_embedding() is not None :
189
186
Lemb = Lemb.coerce_embedding().codomain()
190
- ambient_field = pushout(Kemb, Lemb)
187
+ ambient_field = pushout(Kemb, Lemb)
188
+ candidate_ambient_fields = [ambient_field, sage.rings.complex_double.CDF]
189
+ try :
190
+ candidate_ambient_fields.append(ambient_field.algebraic_closure())
191
+ except NotImplementedError :
192
+ pass
193
+ else :
194
+ candidate_ambient_fields = [ambient_field]
195
+
196
+ for ambient_field in candidate_ambient_fields:
197
+ gen_image = matching_root(K.polynomial().change_ring(L), K.gen(), ambient_field = ambient_field, margin = 2 )
198
+ if gen_image is not None :
199
+ NumberFieldEmbedding.__init__ (self , K, L, gen_image)
200
+ self .ambient_field = ambient_field
201
+ return
191
202
else :
192
- default_ambient_field = None
193
- gen_image = matching_root(K.polynomial().change_ring(L), K.gen(), ambient_field = ambient_field, margin = 2 )
194
- if gen_image is None and default_ambient_field is not None :
195
- ambient_field = default_ambient_field
196
- gen_image = matching_root(K.polynomial().change_ring(L), K.gen(),
197
- ambient_field = ambient_field, margin = 2 )
198
- if gen_image is None :
199
203
raise ValueError , " No consistent embedding of all of %s into %s ." % (K, L)
200
204
201
- NumberFieldEmbedding.__init__ (self , K, L, gen_image)
202
- self .ambient_field = ambient_field
203
-
204
205
def section (self ):
205
206
"""
206
207
EXAMPLES::
0 commit comments