#14164: Error in NumberField.composite_fields()
---------------------------------+------------------------------------------
       Reporter:  mmarco         |         Owner:  davidloeffler
           Type:  defect         |        Status:  new          
       Priority:  major          |     Milestone:  sage-5.8     
      Component:  number fields  |    Resolution:               
       Keywords:  number field   |   Work issues:               
Report Upstream:  N/A            |     Reviewers:               
        Authors:                 |     Merged in:               
   Dependencies:  #13054         |      Stopgaps:               
---------------------------------+------------------------------------------
Changes (by jdemeyer):

  * dependencies:  => #13054


Old description:

> composite fields fails for certain values:
>
> {{{
> sage: R.<x>=QQ[]
> sage: f=6*x^5+x^4+x^2+5*x+7
> sage: r=f.roots(QQbar,multiplicities=False)
> sage: F1=NumberField(f.monic(),'a',embedding=r[0])
> sage: F2=NumberField(f.monic(),'a',embedding=r[1])
> sage: F1.composite_fields(F2,both_maps=True)
> ---------------------------------------------------------------------------
> PariError                                 Traceback (most recent call
> last)
>
> /home/mmarco/sage-5.7/<ipython console> in <module>()
>
> /usr/lib64/python2.7/site-
> packages/sage/rings/number_field/number_field.pyc in
> composite_fields(self, other, names, both_maps, preserve_embedding)
>    3788                 if subfields_have_embeddings:
>    3789                     embedding = other.coerce_embedding()(b) +
> k*self.coerce_embedding()(a)
> -> 3790                 F = NumberField(r, names[i], check=False,
> embedding=embedding)
>    3791                 i += 1
>    3792                 if both_maps:
>
> /usr/lib64/python2.7/site-
> packages/sage/rings/number_field/number_field.pyc in
> NumberField(polynomial, name, check, names, cache, embedding, latex_name,
> assume_disc_small, maximize_at_primes)
>     459     else:
>     460         K = NumberField_absolute(polynomial, name, latex_name,
> check, embedding,
> --> 461              assume_disc_small=assume_disc_small,
> maximize_at_primes=maximize_at_primes)
>     462
>     463     if cache:
>
> /usr/lib64/python2.7/site-
> packages/sage/rings/number_field/number_field.pyc in __init__(self,
> polynomial, name, latex_name, check, embedding, assume_disc_small,
> maximize_at_primes)
>    5449         """
>    5450         NumberField_generic.__init__(self, polynomial, name,
> latex_name, check, embedding,
> -> 5451
> assume_disc_small=assume_disc_small,
> maximize_at_primes=maximize_at_primes)
>    5452         self._element_class =
> number_field_element.NumberFieldElement_absolute
>    5453         self._zero_element = self(0)
>
> /usr/lib64/python2.7/site-
> packages/sage/rings/number_field/number_field.pyc in __init__(self,
> polynomial, name, latex_name, check, embedding, category,
> assume_disc_small, maximize_at_primes)
>    1022         self.__pari_bnf_certified = False
>    1023         self._integral_basis_dict = {}
> -> 1024         embedding =
> number_field_morphisms.create_embedding_from_approx(self, embedding)
>    1025         self._populate_coercion_lists_(embedding=embedding)
>    1026
>
> /usr/lib64/python2.7/site-
> packages/sage/rings/number_field/number_field_morphisms.so in
> sage.rings.number_field.number_field_morphisms.create_embedding_from_approx
> (sage/rings/number_field/number_field_morphisms.c:5021)()
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in __ne__(self,
> other)
>    3803             True
>    3804         """
> -> 3805         return not self.__eq__(other)
>    3806
>    3807     def __nonzero__(self):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in __eq__(self,
> other)
>    3778             try:
>    3779                 self, other = canonical_coercion(self, other)
> -> 3780                 return self == other
>    3781             except TypeError:
>    3782                 return False
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in __eq__(self,
> other)
>    3783         if self is other: return True
>    3784         if other._descr.is_rational() and
> other._descr.rational_value() == 0:
> -> 3785             return not self.__nonzero__()
>    3786         if self._descr.is_rational() and
> self._descr.rational_value() == 0:
>    3787             return not other.__nonzero__()
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in
> __nonzero__(self)
>    3829         if self._value.prec() < 128:
>    3830             self._more_precision()
> -> 3831             return self.__nonzero__()
>    3832
>    3833         # Sigh...
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in
> __nonzero__(self)
>    3832
>    3833         # Sigh...
> -> 3834         self.exactify()
>    3835         return self.__nonzero__()
>    3836
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7589             left = self._left
>    7590             right = self._right
> -> 7591             left.exactify()
>    7592             right.exactify()
>    7593             gen = left._exact_field().union(right._exact_field())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7589             left = self._left
>    7590             right = self._right
> -> 7591             left.exactify()
>    7592             right.exactify()
>    7593             gen = left._exact_field().union(right._exact_field())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7589             left = self._left
>    7590             right = self._right
> -> 7591             left.exactify()
>    7592             right.exactify()
>    7593             gen = left._exact_field().union(right._exact_field())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7589             left = self._left
>    7590             right = self._right
> -> 7591             left.exactify()
>    7592             right.exactify()
>    7593             gen = left._exact_field().union(right._exact_field())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7589             left = self._left
>    7590             right = self._right
> -> 7591             left.exactify()
>    7592             right.exactify()
>    7593             gen = left._exact_field().union(right._exact_field())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7589             left = self._left
>    7590             right = self._right
> -> 7591             left.exactify()
>    7592             right.exactify()
>    7593             gen = left._exact_field().union(right._exact_field())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7589             left = self._left
>    7590             right = self._right
> -> 7591             left.exactify()
>    7592             right.exactify()
>    7593             gen = left._exact_field().union(right._exact_field())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7589             left = self._left
>    7590             right = self._right
> -> 7591             left.exactify()
>    7592             right.exactify()
>    7593             gen = left._exact_field().union(right._exact_field())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7589             left = self._left
>    7590             right = self._right
> -> 7591             left.exactify()
>    7592             right.exactify()
>    7593             gen = left._exact_field().union(right._exact_field())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7589             left = self._left
>    7590             right = self._right
> -> 7591             left.exactify()
>    7592             right.exactify()
>    7593             gen = left._exact_field().union(right._exact_field())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7589             left = self._left
>    7590             right = self._right
> -> 7591             left.exactify()
>    7592             right.exactify()
>    7593             gen = left._exact_field().union(right._exact_field())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7589             left = self._left
>    7590             right = self._right
> -> 7591             left.exactify()
>    7592             right.exactify()
>    7593             gen = left._exact_field().union(right._exact_field())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7589             left = self._left
>    7590             right = self._right
> -> 7591             left.exactify()
>    7592             right.exactify()
>    7593             gen = left._exact_field().union(right._exact_field())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7589             left = self._left
>    7590             right = self._right
> -> 7591             left.exactify()
>    7592             right.exactify()
>    7593             gen = left._exact_field().union(right._exact_field())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7589             left = self._left
>    7590             right = self._right
> -> 7591             left.exactify()
>    7592             right.exactify()
>    7593             gen = left._exact_field().union(right._exact_field())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7589             left = self._left
>    7590             right = self._right
> -> 7591             left.exactify()
>    7592             right.exactify()
>    7593             gen = left._exact_field().union(right._exact_field())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7589             left = self._left
>    7590             right = self._right
> -> 7591             left.exactify()
>    7592             right.exactify()
>    7593             gen = left._exact_field().union(right._exact_field())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7589             left = self._left
>    7590             right = self._right
> -> 7591             left.exactify()
>    7592             right.exactify()
>    7593             gen = left._exact_field().union(right._exact_field())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7589             left = self._left
>    7590             right = self._right
> -> 7591             left.exactify()
>    7592             right.exactify()
>    7593             gen = left._exact_field().union(right._exact_field())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7589             left = self._left
>    7590             right = self._right
> -> 7591             left.exactify()
>    7592             right.exactify()
>    7593             gen = left._exact_field().union(right._exact_field())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7589             left = self._left
>    7590             right = self._right
> -> 7591             left.exactify()
>    7592             right.exactify()
>    7593             gen = left._exact_field().union(right._exact_field())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7589             left = self._left
>    7590             right = self._right
> -> 7591             left.exactify()
>    7592             right.exactify()
>    7593             gen = left._exact_field().union(right._exact_field())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7589             left = self._left
>    7590             right = self._right
> -> 7591             left.exactify()
>    7592             right.exactify()
>    7593             gen = left._exact_field().union(right._exact_field())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7589             left = self._left
>    7590             right = self._right
> -> 7591             left.exactify()
>    7592             right.exactify()
>    7593             gen = left._exact_field().union(right._exact_field())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7589             left = self._left
>    7590             right = self._right
> -> 7591             left.exactify()
>    7592             right.exactify()
>    7593             gen = left._exact_field().union(right._exact_field())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7589             left = self._left
>    7590             right = self._right
> -> 7591             left.exactify()
>    7592             right.exactify()
>    7593             gen = left._exact_field().union(right._exact_field())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7589             left = self._left
>    7590             right = self._right
> -> 7591             left.exactify()
>    7592             right.exactify()
>    7593             gen = left._exact_field().union(right._exact_field())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7589             left = self._left
>    7590             right = self._right
> -> 7591             left.exactify()
>    7592             right.exactify()
>    7593             gen = left._exact_field().union(right._exact_field())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7589             left = self._left
>    7590             right = self._right
> -> 7591             left.exactify()
>    7592             right.exactify()
>    7593             gen = left._exact_field().union(right._exact_field())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7589             left = self._left
>    7590             right = self._right
> -> 7591             left.exactify()
>    7592             right.exactify()
>    7593             gen = left._exact_field().union(right._exact_field())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7589             left = self._left
>    7590             right = self._right
> -> 7591             left.exactify()
>    7592             right.exactify()
>    7593             gen = left._exact_field().union(right._exact_field())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7589             left = self._left
>    7590             right = self._right
> -> 7591             left.exactify()
>    7592             right.exactify()
>    7593             gen = left._exact_field().union(right._exact_field())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7589             left = self._left
>    7590             right = self._right
> -> 7591             left.exactify()
>    7592             right.exactify()
>    7593             gen = left._exact_field().union(right._exact_field())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7589             left = self._left
>    7590             right = self._right
> -> 7591             left.exactify()
>    7592             right.exactify()
>    7593             gen = left._exact_field().union(right._exact_field())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7589             left = self._left
>    7590             right = self._right
> -> 7591             left.exactify()
>    7592             right.exactify()
>    7593             gen = left._exact_field().union(right._exact_field())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7589             left = self._left
>    7590             right = self._right
> -> 7591             left.exactify()
>    7592             right.exactify()
>    7593             gen = left._exact_field().union(right._exact_field())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7589             left = self._left
>    7590             right = self._right
> -> 7591             left.exactify()
>    7592             right.exactify()
>    7593             gen = left._exact_field().union(right._exact_field())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7589             left = self._left
>    7590             right = self._right
> -> 7591             left.exactify()
>    7592             right.exactify()
>    7593             gen = left._exact_field().union(right._exact_field())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7589             left = self._left
>    7590             right = self._right
> -> 7591             left.exactify()
>    7592             right.exactify()
>    7593             gen = left._exact_field().union(right._exact_field())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7590             right = self._right
>    7591             left.exactify()
> -> 7592             right.exactify()
>    7593             gen = left._exact_field().union(right._exact_field())
>    7594             left_value = gen(left._exact_value())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    3464         od = self._descr
>    3465         if od.is_exact(): return
> -> 3466         self._set_descr(self._descr.exactify())
>    3467
>    3468     def _set_descr(self, new_descr):
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in exactify(self)
>    7591             left.exactify()
>    7592             right.exactify()
> -> 7593             gen = left._exact_field().union(right._exact_field())
>    7594             left_value = gen(left._exact_value())
>    7595             right_value = gen(right._exact_value())
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in union(self,
> other)
>    2280         newpol_sage_y = QQy(newpol_sage)
>    2281
> -> 2282         red_elt, red_back, red_pol = do_polred(newpol_sage_y)
>    2283
>    2284         red_back_x = QQx(red_back)
>
> /usr/lib64/python2.7/site-packages/sage/rings/qqbar.pyc in
> do_polred(poly)
>    1561     assert(best is not None)
>    1562     parent = poly.parent()
> -> 1563     rev = parent(best_elt.Mod(pari_poly).modreverse().lift())
>    1564     return parent(best_elt), rev, parent(best)
>    1565
>
> /usr/lib64/python2.7/site-packages/sage/libs/pari/gen.so in
> sage.libs.pari.gen._pari_trap (sage/libs/pari/gen.c:55006)()
>
> PariError:  (5)
> }}}

New description:

 composite fields fails for certain values:

 {{{
 sage: R.<x>=QQ[]
 sage: f=6*x^5+x^4+x^2+5*x+7
 sage: r=f.roots(QQbar,multiplicities=False)
 sage: F1=NumberField(f.monic(),'a',embedding=r[0])
 sage: F2=NumberField(f.monic(),'a',embedding=r[1])
 sage: F1.composite_fields(F2,both_maps=True)
 ---------------------------------------------------------------------------
 TypeError                                 Traceback (most recent call
 last)
 <ipython-input-6-dacb8cbc99b0> in <module>()
 ----> 1 F1.composite_fields(F2,both_maps=True)

 /usr/local/src/sage-5.7.beta1/local/lib/python2.7/site-
 packages/sage/rings/number_field/number_field.pyc in
 composite_fields(self, other, names, both_maps, preserve_embedding)
    3805                             i -= 1
    3806                         else:
 -> 3807                             self_to_F = self.hom([F(a_in_F)])
    3808                             other_to_F = other.hom([F(b_in_F)])
    3809                     else:

 /usr/local/src/sage-5.7.beta1/local/lib/python2.7/site-
 packages/sage/structure/parent.so in sage.structure.parent.Parent.__call__
 (sage/structure/parent.c:7415)()

 /usr/local/src/sage-5.7.beta1/local/lib/python2.7/site-
 packages/sage/structure/coerce_maps.so in
 sage.structure.coerce_maps.DefaultConvertMap_unique._call_
 (sage/structure/coerce_maps.c:3583)()

 /usr/local/src/sage-5.7.beta1/local/lib/python2.7/site-
 packages/sage/structure/coerce_maps.so in
 sage.structure.coerce_maps.DefaultConvertMap_unique._call_
 (sage/structure/coerce_maps.c:3485)()

 /usr/local/src/sage-5.7.beta1/local/lib/python2.7/site-
 packages/sage/rings/number_field/number_field.pyc in
 _element_constructor_(self, x)
    1229                 result += x[i]*self.gen(0)**i
    1230             return result
 -> 1231         return self._coerce_non_number_field_element_in(x)
    1232
    1233     def _coerce_from_str(self, x):

 /usr/local/src/sage-5.7.beta1/local/lib/python2.7/site-
 packages/sage/rings/number_field/number_field.pyc in
 _coerce_non_number_field_element_in(self, x)
    5732                               integer.Integer, pari_gen,
    5733                               list)):
 -> 5734             return self._element_class(self, x)
    5735
    5736         if isinstance(x,
 
sage.rings.polynomial.polynomial_quotient_ring_element.PolynomialQuotientRingElement)\

 /usr/local/src/sage-5.7.beta1/local/lib/python2.7/site-
 packages/sage/rings/number_field/number_field_element.so in
 sage.rings.number_field.number_field_element.NumberFieldElement.__init__
 (sage/rings/number_field/number_field_element.cpp:6018)()

 TypeError: Coercion of PARI polmod with modulus 10077696*x^20 -
 6718464*x^19 - 559872*x^18 - 56173824*x^17 + 728401248*x^16 -
 2136243456*x^15 + 1038731904*x^14 - 3715874496*x^13 + 21591002400*x^12 -
 63829125504*x^11 + 414323181024*x^10 - 242460667872*x^9 + 573731183904*x^8
 - 1417417413120*x^7 - 5375183629440*x^6 + 23136669276768*x^5 +
 9900813726912*x^4 - 70740914752800*x^3 + 237933452109888*x^2 -
 479963026372896*x + 500774065215360 into number field with defining
 polynomial 104976*x^20 - 69984*x^19 - 5832*x^18 - 585144*x^17 +
 7587513*x^16 - 22252536*x^15 + 10820124*x^14 - 38707026*x^13 +
 224906275*x^12 - 664886724*x^11 + 4315866469*x^10 - 2525631957*x^9 +
 5976366499*x^8 - 14764764720*x^7 - 55991496140*x^6 + 241006971633*x^5 +
 103133476322*x^4 - 736884528675*x^3 + 2478473459478*x^2 - 4999614858051*x
 + 5216396512660 failed
 }}}

--

-- 
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/14164#comment:2>
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?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to