I am writing a program to study the puiseux expansion of a curve
singularity, focusing on the real branches. Doing so, i have
encountered an error, that strangely appears only at some particular
case. The error is triggered by something as simple as making a
substitution on a polynomial. I have tried to make the same by direct
evaluation and by means of a ring morphism, with the same result.

To reproduce it:

R.<x,y>=QQ[]
f=x^5+8*x^4-2*x^2*y^2-y^3+2*y^4
X=f.discriminant(y).univariate_polynomial().roots(AA)[1][0]
Y=f(X,y).univariate_polynomial().roots(AA)[0][0]
g=f(x+X,y+Y)
S.<a,t>=QQbar[]
p=g(t^2,a*t)
res=[i[0] for i in p.polynomial(t).coefficients()[0].roots()]
dic={x.change_ring(AA):x^2,y.change_ring(AA):res[0]*x+x*y}
g.subs(dic)
---------------------------------------------------------------------------
PariError                                 Traceback (most recent call
last)

/home/mmarco/<ipython console> in <module>()

/usr/local/sage/local/lib/python2.6/site-packages/sage/rings/
polynomial/multi_polynomial_element.pyc in subs(self, fixed, **kw)
    975             elif fixed and fixed.has_key(variables[i]):
    976                 variables[i] = fixed[variables[i]]
--> 977         return self(tuple(variables))
    978
    979     def monomials(self):

/usr/local/sage/local/lib/python2.6/site-packages/sage/rings/
polynomial/multi_polynomial_element.pyc in __call__(self, *x, **kwds)
    154         y = K(0)
    155         for (m,c) in self.element().dict().iteritems():
--> 156             y += c*misc.mul([ x[i]**m[i] for i in range(n) if
m[i] != 0])
    157         return y
    158

/usr/local/sage/local/lib/python2.6/site-packages/sage/structure/
element.so in sage.structure.element.ModuleElement.__iadd__ (sage/
structure/element.c:8285)()

/usr/local/sage/local/lib/python2.6/site-packages/sage/structure/
coerce.so in sage.structure.coerce.CoercionModel_cache_maps.bin_op
(sage/structure/coerce.c:6630)()

/usr/local/sage/local/lib/python2.6/site-packages/sage/structure/
element.so in sage.structure.element.ModuleElement.__iadd__ (sage/
structure/element.c:8264)()

/usr/local/sage/local/lib/python2.6/site-packages/sage/structure/
element.so in sage.structure.element.ModuleElement._add_ (sage/
structure/element.c:8117)()

/usr/local/sage/local/lib/python2.6/site-packages/sage/rings/
polynomial/multi_polynomial_element.pyc in _add_(self, right)
    212     def _add_(self, right):
    213         #return self.parent()(self.__element +
right.__element)
--> 214         return self.__class__(self.parent(),self.__element +
right.__element)
    215
    216     def _sub_(self, right):

/usr/local/sage/local/lib/python2.6/site-packages/sage/rings/
polynomial/polydict.so in
sage.rings.polynomial.polydict.PolyDict.__add__ (sage/rings/polynomial/
polydict.c:7503)()

/usr/local/sage/local/lib/python2.6/site-packages/sage/rings/
polynomial/polydict.so in
sage.rings.polynomial.polydict.PolyDict.__init__ (sage/rings/
polynomial/polydict.c:1781)()

/usr/local/sage/local/lib/python2.6/site-packages/sage/rings/qqbar.pyc
in __eq__(self, other)
   3049         if self is other: return True
   3050         if other._descr.is_rational() and
other._descr.rational_value() == 0:
-> 3051             return not self.__nonzero__()
   3052         if self._descr.is_rational() and
self._descr.rational_value() == 0:
   3053             return not other.__nonzero__()

/usr/local/sage/local/lib/python2.6/site-packages/sage/rings/qqbar.pyc
in __nonzero__(self)
   3081         if self._value.prec() < 128:
   3082             self._more_precision()
-> 3083             return self.__nonzero__()
   3084
   3085         # Sigh...

/usr/local/sage/local/lib/python2.6/site-packages/sage/rings/qqbar.pyc
in __nonzero__(self)
   3084
   3085         # Sigh...
-> 3086         self.exactify()
   3087         return self.__nonzero__()
   3088

/usr/local/sage/local/lib/python2.6/site-packages/sage/rings/qqbar.pyc
in exactify(self)
   2739         od = self._descr
   2740         if od.is_exact(): return
-> 2741         self._set_descr(self._descr.exactify())
   2742
   2743     def _set_descr(self, new_descr):

/usr/local/sage/local/lib/python2.6/site-packages/sage/rings/qqbar.pyc
in exactify(self)
   5891             left = self._left
   5892             right = self._right
-> 5893             left.exactify()
   5894             right.exactify()
   5895             gen =
left._exact_field().union(right._exact_field())

/usr/local/sage/local/lib/python2.6/site-packages/sage/rings/qqbar.pyc
in exactify(self)
   2739         od = self._descr
   2740         if od.is_exact(): return
-> 2741         self._set_descr(self._descr.exactify())
   2742
   2743     def _set_descr(self, new_descr):

/usr/local/sage/local/lib/python2.6/site-packages/sage/rings/qqbar.pyc
in exactify(self)
   5891             left = self._left
   5892             right = self._right
-> 5893             left.exactify()
   5894             right.exactify()
   5895             gen =
left._exact_field().union(right._exact_field())

/usr/local/sage/local/lib/python2.6/site-packages/sage/rings/qqbar.pyc
in exactify(self)
   2739         od = self._descr
   2740         if od.is_exact(): return
-> 2741         self._set_descr(self._descr.exactify())
   2742
   2743     def _set_descr(self, new_descr):

/usr/local/sage/local/lib/python2.6/site-packages/sage/rings/qqbar.pyc
in exactify(self)
   5891             left = self._left
   5892             right = self._right
-> 5893             left.exactify()
   5894             right.exactify()
   5895             gen =
left._exact_field().union(right._exact_field())

/usr/local/sage/local/lib/python2.6/site-packages/sage/rings/qqbar.pyc
in exactify(self)
   2739         od = self._descr
   2740         if od.is_exact(): return
-> 2741         self._set_descr(self._descr.exactify())
   2742
   2743     def _set_descr(self, new_descr):

/usr/local/sage/local/lib/python2.6/site-packages/sage/rings/qqbar.pyc
in exactify(self)
   5892             right = self._right
   5893             left.exactify()
-> 5894             right.exactify()
   5895             gen =
left._exact_field().union(right._exact_field())
   5896             left_value = gen(left._exact_value())

/usr/local/sage/local/lib/python2.6/site-packages/sage/rings/qqbar.pyc
in exactify(self)
   2739         od = self._descr
   2740         if od.is_exact(): return
-> 2741         self._set_descr(self._descr.exactify())
   2742
   2743     def _set_descr(self, new_descr):

/usr/local/sage/local/lib/python2.6/site-packages/sage/rings/qqbar.pyc
in exactify(self)
   5166             newpol_sage_y = QQy(newpol_sage)
   5167
-> 5168             red_elt, red_back, red_pol =
do_polred(newpol_sage_y)
   5169
   5170             new_nf = NumberField(red_pol, name='a',
check=False)

/usr/local/sage/local/lib/python2.6/site-packages/sage/rings/qqbar.pyc
in do_polred(poly)
   1206     assert(best is not None)
   1207     parent = poly.parent()
-> 1208     rev = parent(best_elt.Mod(pari_poly).modreverse().lift())
   1209     return parent(best_elt), rev, parent(best)
   1210

/usr/local/sage/local/lib/python2.6/site-packages/sage/libs/pari/
gen.so in sage.libs.pari.gen._pari_trap (sage/libs/pari/gen.c:49380)()

PariError:  (5)


I guess it is a bug (in Pari, or in our interface?) but i know
basically nothing about pari, so i wanted to ask first.

Any clue?

-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To post to this group, send email to sage-devel@googlegroups.com.
To unsubscribe from this group, send email to 
sage-devel+unsubscr...@googlegroups.com.
Visit this group at http://groups.google.com/group/sage-devel?hl=en.


Reply via email to