..nodoctest

Class polynomials

x.__init__(...) initializes x; see help(type(x)) for signature

recip.class_polynomials.class_polynomials(K, factor=False, prec=None, D=None, verbose=False)

Returns the Igusa class polynomials of K (proven!).

INPUT:

  • \(K\) – a CM-field
  • \(factor\) – whether the output consists of sets of irreducible factors
    (currently not supported)
  • \(prec\) – starting precision (will be increased until it is enough)
  • \(D\) – known multiple of the denominator (if omitted, computes one)
  • \(verbose\) – whether to print specific verbose output for this function.

OUTPUT:

Igusa class polynomials H_1, Hhat_2, Hhat3 of K with respect to the absolute Igusa invariants of the author’s thesis.

EXAMPLES:

We compute proven class polynomials for some of the entries of van Wamelen’s table. With these class polynomials, it is trivial to check correctness of the table entries. The full list, and more, is proven in [BouyerS].:

sage: from recip import *
sage: K = CM_Field([5,5,5])
sage: class_polynomials(K) # long time: 6 seconds
[x, 0, 0]

sage: class_polynomials(CM_Field((x^2+2)^2-2), verbose=True) # long time: 10 seconds
starting with precision 50
output has 40.8562309773420 too few bits of precision
increasing precision to 95
output has 3.47594808128218 more bits of precision than needed
Denominator: 1 out of 2^46
[x + 7290, 437400, 2952450000]

sage: class_polynomials(CM_Field((x^2+13)^2-2^2*13), verbose=True) # long time: 10 seconds
starting with precision 50
output has 8.62029143144967 too few bits of precision
increasing precision to 63
output has 4.68096300785080 more bits of precision than needed
Denominator: 1 out of 2^14
[x + 7840, 102400, -204800000]

sage: class_polynomials(CM_Field((x^2+5)^2-5)) # long time: 22 seconds
[x^2 - 183708000*x, 37826743837500/14641*x - 601817074425000000/14641, 1994141034144140625000/14641*x - 423741159843750000000/14641]

sage: class_polynomials(CM_Field((x^2+65)^2-26^2*5)) # long time: 30 seconds
[x^2 - 209024611260948000/1615441*x + 739519963620480000000/1615441, 1923741818956270886400000/2609649624481*x - 3630281807913088204800000000/2609649624481, 174715258193111891291126400000000000/2609649624481*x - 618134989860658268345733120000000000000/2609649624481]

sage: bruinier_yang_applies(CM_Field((x^2+29)^2-4*29))
True
sage: class_polynomials(CM_Field((x^2+29)^2-2^2*29), verbose=True) # long time: 10 seconds
starting with precision 50
output has 35.4684649508012 too few bits of precision
increasing precision to 90
output has 4.50158705782075 more bits of precision than needed
Denominator: 1 out of 2^14 * 5^4
[x + 2589408, 131383296, -60466176000000]

sage: bruinier_yang_applies(CM_Field((x^2+61)^2-6^2*61))
True
sage: class_polynomials(CM_Field((x^2+61)^2-6^2*61), verbose=True) # long time: 11 seconds
starting with precision 50
output has 54.2686150981159 too few bits of precision
increasing precision to 109
output has 4.58030311169402 more bits of precision than needed
Denominator: 3^3 * 41^4 out of 2^14 * 3^8 * 5^4 * 41^4
[x - 88833024/1681, -14055214415872/76295547, 9663676416000000/2825761]