..nodoctest

List of fields

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

recip.list_fields.DAm_to_DAB(D, A, m)

Given D a fundamental discriminant, A a positive integer, and m a positive integer with m^2 D < A^2 and m^2 * D == A^2 mod 4, returns [D,A,B] with m^2*D = A^2 - 4B

recip.list_fields.iterate_DAB(stopD, stopA, startD=5, startA=1, prime_D=False)

Given a range of positive discriminants D and integers A, returns all minimal triples DAB corresponding to primitive quartic CM-fields with D and A in the range.

The number of such triples is proportional to (maxA^2 - minA^2) * (sqrt(maxD) - sqrt(minD)).

If prime_D is true, restrict to D of the form p for a prime p=1 mod 4 and 4*p for p a prime p!=1 mod 4.

EXAMPLES:

sage: from recip import *
sage: list(iterate_DAB(10, 10))
[[5, 5, 5], [5, 7, 11], [5, 9, 19], [8, 4, 2], [8, 6, 7], [8, 8, 14]]
sage: list(iterate_DAB(20, 20, prime_D=True))
[[5, 5, 5], [5, 7, 11], [5, 9, 19], [5, 10, 20], [5, 11, 29], [5, 12, 31], [5, 13, 41], [5, 14, 44], [5, 15, 55], [5, 15, 45], [5, 16, 59], [5, 17, 71], [5, 17, 61], [5, 18, 76], [5, 19, 89], [5, 19, 79], [8, 4, 2], [8, 6, 7], [8, 8, 14], [8, 10, 23], [8, 10, 17], [8, 12, 34], [8, 12, 18], [8, 14, 47], [8, 14, 41], [8, 14, 31], [8, 16, 62], [8, 16, 46], [8, 18, 79], [8, 18, 73], [8, 18, 63], [12, 6, 6], [12, 8, 13], [12, 10, 22], [12, 10, 13], [12, 12, 33], [12, 14, 46], [12, 14, 37], [12, 14, 22], [12, 16, 61], [12, 16, 37], [12, 18, 78], [12, 18, 69], [12, 18, 33], [13, 5, 3], [13, 9, 17], [13, 10, 12], [13, 12, 23], [13, 13, 39], [13, 13, 13], [13, 15, 53], [13, 16, 51], [13, 17, 69], [13, 17, 43], [13, 18, 68], [13, 18, 29], [13, 19, 87], [13, 19, 61], [17, 5, 2], [17, 11, 26], [17, 12, 19], [17, 13, 38], [17, 15, 52], [17, 15, 18], [17, 16, 47], [17, 17, 68], [17, 17, 34], [17, 19, 86]]
sage: l = list(iterate_DAB(30, 30))
sage: l = [(DAB, CM_Field(DAB)) for DAB in l]
sage: l = [(DAB, K, K.ideal(2).factor()) for (DAB, K) in l]
sage: l = [(DAB, K) for (DAB, K, f) in l if len(f) == 1 and f[0][1] == 1]
sage: l = [(DAB, K.class_number()/K.real_field().class_number()) for (DAB, K) in l]
sage: [(DAB, h) for (DAB, h) in l if h > 3]
[([21, 25, 109], 4), ([29, 25, 149], 5)]
recip.list_fields.iterate_DAB_given_D(D, stopA, startA=1, K0=None)

Given a real quadratic discriminant and a range of integers A, returns all minimal triples DAB corresponding to primitive quartic CM-fields with this D and in the A-range.

The number of such triples is proportional to 1/2 (maxA^2 - minA^2) / sqrt(D).

K0, if given, should be the quadratic field with discriminant D.

recip.list_fields.iterate_DAB_given_DA(D, A, K0)

Given a real quadratic discriminant and a positive integer A, returns all minimal triples DAB corresponding to primitive quartic CM-fields with this D and in the A-range.

The number of such triples is proportional to A/sqrt(D).

K0, if given, should be the quadratic field with discriminant D.

recip.list_fields.wamelen_curves()

Returns van Wamelen’s CM curves (taken from https://www.math.lsu.edu/~wamelen/CMcurves.txt) in such a way that wamelen_curves()[i] corresponds to wamelen_dab_list()[i]

recip.list_fields.wamelen_dab_list()

Returns the list of triples DAB from Paul van Wamelen’s list of CM curves.

EXAMPLE:

sage: from recip import *
sage: lst = wamelen_dab_list(); lst
[[5, 5, 5], [8, 4, 2], [13, 13, 13], [5, 10, 20], [5, 65, 845], [29, 29, 29], [5, 85, 1445], [37, 37, 333], [8, 20, 50], [13, 65, 325], [13, 26, 52], [53, 53, 53], [61, 61, 549]]

We check that this list contains of 13 cyclic Galois CM-fields, and that there are 19 curves corresponding to these 13 fields.:

sage: len(lst)
13
sage: flds = [CM_Field(DAB) for DAB in lst]
sage: all([K.is_galois() for K in flds])
True
sage: sum([K.class_number()/K.real_field().class_number() for K in flds])
19