#11891: NumberField(...).pari_polynomial() should return an integral polynomial
-----------------------------+----------------------------------------------
Reporter: jdemeyer | Owner: davidloeffler
Type: enhancement | Status: needs_review
Priority: major | Milestone: sage-4.7.3
Component: number fields | Keywords:
Work_issues: | Upstream: N/A
Reviewer: | Author: Jeroen Demeyer
Merged: | Dependencies:
-----------------------------+----------------------------------------------
Changes (by jdemeyer):
* status: new => needs_review
* milestone: sage-4.7.2 => sage-4.7.3
Old description:
> Mostly, PARI only works with number fields defined by monic integral
> polynomials. A few functions (like `factornf()`) also work for non-monic
> polynomials. In these cases, PARI always requires the polynomial to have
> integer coefficients. So, PARI prefers `2*x^2 - 1` over `x^2 - 1/2` for
> defining a number field. The `NumberField` method `pari_polynomial`
> should reflect this.
>
> This change allows allows one to define number field towers with non-
> integral polynomials. Example from vanilla sage-4.7.1:
> {{{
> sage: k.<a, c> = NumberField([x^2 + 1/3, x^2 + 1/4])
> ---------------------------------------------------------------------------
> PariError Traceback (most recent call
> last)
>
> /home/jdemeyer/<ipython console> in <module>()
>
> /usr/local/src/sage-4.7.1/local/lib/python2.6/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)
> 435
> 436 if isinstance(polynomial, (list, tuple)):
> --> 437 return NumberFieldTower(polynomial, name,
> embeddings=embedding)
> 438
> 439 name = sage.structure.parent_gens.normalize_names(1, name)
>
> /usr/local/src/sage-4.7.1/local/lib/python2.6/site-
> packages/sage/rings/number_field/number_field.pyc in NumberFieldTower(v,
> names, check, embeddings)
> 622 # return z
> 623 #else:
> --> 624 return w.extension(f, name, check=check,
> embedding=embeddings[0])
> 625
> 626
>
> /usr/local/src/sage-4.7.1/local/lib/python2.6/site-
> packages/sage/rings/number_field/number_field.pyc in extension(self,
> poly, name, names, check, embedding)
> 3570 raise TypeError, "the variable name must be
> specified."
> 3571 from sage.rings.number_field.number_field_rel import
> NumberField_relative
> -> 3572 return NumberField_relative(self, poly, str(name),
> check=check, embedding=embedding)
> 3573
> 3574 def factor(self, n):
>
> /usr/local/src/sage-4.7.1/local/lib/python2.6/site-
> packages/sage/rings/number_field/number_field_rel.pyc in __init__(self,
> base, polynomial, name, latex_name, names, check, embedding)
> 293
> 294 if check:
> --> 295 if not
> self.pari_relative_polynomial().polisirreducible():
> 296 # this is *much* faster than
> 297 # polynomial.is_irreducible() at some point in
> the
>
> /usr/local/src/sage-4.7.1/local/lib/python2.6/site-
> packages/sage/libs/pari/gen.so in sage.libs.pari.gen._pari_trap
> (sage/libs/pari/gen.c:47834)()
>
> PariError: inconsistent data (12)
> }}}
> With the patch, this works.
New description:
Mostly, PARI only works with number fields defined by monic integral
polynomials. A few functions (like `factornf()`) also work for non-monic
polynomials. In these cases, PARI always requires the polynomial to have
integer coefficients. So, PARI prefers `2*x^2 - 1` over `x^2 - 1/2` for
defining a number field. The `NumberField` method `pari_polynomial`
should reflect this.
This change allows one to define number field towers with non-integral
polynomials. Example from vanilla sage-4.7.1:
{{{
sage: k.<a, c> = NumberField([x^2 + 1/3, x^2 + 1/4])
---------------------------------------------------------------------------
PariError Traceback (most recent call
last)
/home/jdemeyer/<ipython console> in <module>()
/usr/local/src/sage-4.7.1/local/lib/python2.6/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)
435
436 if isinstance(polynomial, (list, tuple)):
--> 437 return NumberFieldTower(polynomial, name,
embeddings=embedding)
438
439 name = sage.structure.parent_gens.normalize_names(1, name)
/usr/local/src/sage-4.7.1/local/lib/python2.6/site-
packages/sage/rings/number_field/number_field.pyc in NumberFieldTower(v,
names, check, embeddings)
622 # return z
623 #else:
--> 624 return w.extension(f, name, check=check,
embedding=embeddings[0])
625
626
/usr/local/src/sage-4.7.1/local/lib/python2.6/site-
packages/sage/rings/number_field/number_field.pyc in extension(self, poly,
name, names, check, embedding)
3570 raise TypeError, "the variable name must be
specified."
3571 from sage.rings.number_field.number_field_rel import
NumberField_relative
-> 3572 return NumberField_relative(self, poly, str(name),
check=check, embedding=embedding)
3573
3574 def factor(self, n):
/usr/local/src/sage-4.7.1/local/lib/python2.6/site-
packages/sage/rings/number_field/number_field_rel.pyc in __init__(self,
base, polynomial, name, latex_name, names, check, embedding)
293
294 if check:
--> 295 if not
self.pari_relative_polynomial().polisirreducible():
296 # this is *much* faster than
297 # polynomial.is_irreducible() at some point in the
/usr/local/src/sage-4.7.1/local/lib/python2.6/site-
packages/sage/libs/pari/gen.so in sage.libs.pari.gen._pari_trap
(sage/libs/pari/gen.c:47834)()
PariError: inconsistent data (12)
}}}
With the patch, this works.
--
--
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/11891#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 post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sage-trac?hl=en.