Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupport News AboutSign UpSign In
| Download

All published worksheets from http://sagenb.org

Views: 168740
Image: ubuntu2004
x = var('x') F.<a> = NumberField(x^2-x-1)

The following sets up the info we have from the file on the website.  It also computes the j-invariant, torsion order, and the rank.  (So it takes a couple minutes to run . . . )

f = file('/Users/aly/sqrt5/tables/allcurves.txt','r') Small_List = [] for l in f: L = l.split() if int(L[2]) <= 199: Info = [] l1 = L[4].replace('[','') l2 = l1.replace(']','') t = [F(i) for i in l2.split(',')] E = EllipticCurve(t) J = E.j_invariant() #Info = [L[0],L[1], F(L[2]),F(L[3]),t,E,J,E.torsion_order(),get_rank(E)] Info = [L[0],L[1], F(L[2]),F(L[3]),t] Small_List.append(Info)

There are 263 curves of norm conductor less than 263.

len(Small_List)
263

Isogeny Classes:

I import what Andrew's been working on.  So far it's missing a few curves.

import urllib2 url = 'http://wstein.org/home/ohanar/sqrt5/isomorphism_classes.txt' f = urllib2.urlopen(url) Isogs = [] for l in f: iso = [] while l != '\n': l1 = l.replace('(','') l2 = l1.replace(')','') l3 = l2.replace('\n','') t = [F(i) for i in l3.split(',')] iso.append(t) l = f.next() Isogs.append(iso)

Here are just the actual isogeny classes with one representative and ranks.

import urllib2 url = 'http://wstein.org/home/ohanar/sqrt5/isogeny_classes.txt' f = urllib2.urlopen(url) IsoClasses = [] for l in f: L = l.split() if int(L[0]) < 200: Info = [] l1 = L[2].replace('(','') l2 = l1.replace(')','') t = [F(i) for i in l2.split(',')] Info = [L[0],L[1], t,int(L[3])] IsoClasses.append(Info)

Get the number of isogeny classes of rank 0 and of rank 1 with norm conductor less than 200.

NCR0 = [] NCR1 = [] for L in IsoClasses: if L[3] == 0: NCR0.append(L) else: NCR1.append(L) len(NCR0), len(NCR1)
(62, 2)

Now get the number of curves in each isogeny class.

We start by creating a list of all the a-invariant lists with norm conductor less than 200 and also a list of the missing a-invariants.

#list of all ainvs all_ainvs = [l for iso in Isogs for l in iso] small_ainvs = [L[4] for L in Small_List] missing = [l for l in small_ainvs if l not in all_ainvs] len(missing)+191
263
missing_info = [L for L in Small_List if L[4] in missing]
missing_conductors = [L[0] for L in missing_info]; missing_conductors
['31a', '31a', '31a', '31b', '31b', '31b', '45a', '45a', '55a', '55a', '55a', '55b', '55b', '55b', '64a', '64a', '76a', '76a', '76b', '76b', '79a', '79b', '80a', '80a', '81a', '81a', '81a', '81a', '95a', '95a', '95b', '95b', '99a', '99a', '99a', '99b', '99b', '99b', '124a', '124a', '124a', '124a', '124b', '124b', '124b', '124b', '144a', '145a', '145a', '145a', '145a', '145a', '145a', '145b', '145b', '145b', '145b', '145b', '155a', '155b', '164a', '164b', '171a', '171b', '179a', '179b', '199a', '199a', '199a', '199b', '199b', '199b']

For all but 76a, 76b, 145a, 145b, 179a, 179b, and 199's , they only have one Isogeny Class, thus we can just count off the order.  

The rest, we can be slightly more clever and get most of it.  A couple look wonky.

for L in missing_info: print L
['31a', 'a2', 31, -5*a + 3, [a + 1, -a - 1, a, 15*a - 27, -40*a + 64]] ['31a', 'a3', 31, -5*a + 3, [a, -1, a, 1786*a - 2891, -44002*a + 71196]] ['31a', 'a6', 31, -5*a + 3, [a + 1, a + 1, a + 1, -32196*a - 19898, -3371682*a - 2083814]] ['31b', 'a2', 31, -5*a + 2, [a, -1, a + 1, -17*a - 11, 39*a + 24]] ['31b', 'a3', 31, -5*a + 2, [a + 1, -a - 1, a + 1, -1788*a - 1105, 44001*a + 27194]] ['31b', 'a6', 31, -5*a + 2, [a, a, a + 1, 32197*a - 52096, 3319586*a - 5371204]] ['45a', 'a9', 45, -6*a + 3, [1, -a + 1, a, 4976732*a - 8052529, 6393196917*a - 10344409915]] ['45a', 'a10', 45, -6*a + 3, [1, a, a + 1, -4976733*a - 3075797, -6393196918*a - 3951212998]] ['55a', 'a3', 55, -a + 8, [a + 1, -1, 1, 698*a - 1131, -10856*a + 17565]] ['55a', 'a4', 55, -a + 8, [a, -a + 1, a, -96*a - 60, 537*a + 333]] ['55a', 'a8', 55, -a + 8, [a, -a + 1, a, -601*a - 405, -8817*a - 5400]] ['55b', 'a3', 55, a + 7, [a, -a, 1, -699*a - 432, 10856*a + 6709]] ['55b', 'a4', 55, a + 7, [a + 1, 0, a + 1, 94*a - 156, -538*a + 870]] ['55b', 'a8', 55, a + 7, [a + 1, 0, a + 1, 599*a - 1006, 8816*a - 14217]] ['64a', 'a2', 64, 8, [0, -a, 0, 11*a - 16, -17*a + 27]] ['64a', 'a5', 64, 8, [0, -a, 0, 106*a - 171, 647*a - 1050]] ['76a', 'a2', 76, -8*a + 2, [a + 1, -a, a + 1, 132*a - 214, 902*a - 1464]] ['76a', 'b4', 76, -8*a + 2, [a + 1, -a, 1, -54686*a - 35336, -7490886*a - 4653177]] ['76b', 'a2', 76, -8*a + 6, [a, 0, a, -134*a - 80, -903*a - 561]] ['76b', 'b4', 76, -8*a + 6, [a, 0, 1, 54685*a - 90021, 7490886*a - 12144063]] ['79a', 'a3', 79, -8*a + 3, [a + 1, -1, a, -689*a - 427, -10566*a - 6529]] ['79b', 'a3', 79, -8*a + 5, [a, -a, a + 1, 687*a - 1115, 10565*a - 17095]] ['80a', 'a6', 80, -8*a + 4, [0, -a - 1, 0, 2025*a - 3281, 52269*a - 84572]] ['80a', 'a7', 80, -8*a + 4, [0, a + 1, 0, -2023*a - 1257, -54293*a - 33560]] ['81a', 'a3', 81, 9, [a, -a - 1, a, -128*a - 80, 921*a + 569]] ['81a', 'a4', 81, 9, [a + 1, 1, 0, 129*a - 207, -793*a + 1283]] ['81a', 'a5', 81, 9, [a, -a - 1, a + 1, -1153*a - 719, -21854*a - 13501]] ['81a', 'a6', 81, 9, [a + 1, 1, 1, 1153*a - 1871, 23006*a - 37225]] ['95a', 'a7', 95, 2*a + 9, [1, 1, a + 1, -259*a - 162, -2514*a - 1556]] ['95a', 'a8', 95, 2*a + 9, [1, -a + 1, 0, 84164*a - 136181, 14105985*a - 22823965]] ['95b', 'a7', 95, -2*a + 11, [1, 1, a, 258*a - 420, 2513*a - 4069]] ['95b', 'a8', 95, -2*a + 11, [1, a, 0, -84164*a - 52017, -14105985*a - 8717980]] ['99a', 'a4', 99, -9*a + 3, [1, -a + 1, a, -241*a - 154, -2145*a - 1336]] ['99a', 'a5', 99, -9*a + 3, [a, -a, a, -26640*a - 16465, -2494020*a - 1541390]] ['99a', 'a6', 99, -9*a + 3, [a, 0, 0, 2187*a - 3550, 59133*a - 95697]] ['99b', 'a4', 99, -9*a + 6, [1, a, a + 1, 240*a - 395, 2144*a - 3481]] ['99b', 'a5', 99, -9*a + 6, [a + 1, -a, 0, -2187*a - 1363, -59133*a - 36564]] ['99b', 'a6', 99, -9*a + 6, [a + 1, -1, a + 1, 26638*a - 43105, 2494019*a - 4035410]] ['124a', 'a2', 124, -10*a + 6, [a, a + 1, 1, 1, 0]] ['124a', 'a3', 124, -10*a + 6, [a, a + 1, 1, 35*a - 89, 204*a - 342]] ['124a', 'a4', 124, -10*a + 6, [a, a + 1, 1, -5*a - 9, -20*a - 22]] ['124a', 'a6', 124, -10*a + 6, [a + 1, a - 1, a + 1, 188901*a - 305684, 47160860*a - 76307979]] ['124b', 'a2', 124, -10*a + 4, [a + 1, a - 1, a + 1, -1, -a + 1]] ['124b', 'a3', 124, -10*a + 4, [a + 1, a - 1, a + 1, -35*a - 56, -260*a - 117]] ['124b', 'a4', 124, -10*a + 4, [a + 1, a - 1, a + 1, 5*a - 16, 4*a - 21]] ['124b', 'a6', 124, -10*a + 4, [a, a + 1, 1, -188901*a - 116781, -47466544*a - 29336020]] ['144a', 'a3', 144, 12, [0, a, 0, 48*a - 80, 188*a - 304]] ['145a', 'a2', 145, -11*a + 3, [0, 0, a + 1, 30045*a - 48607, 2996960*a - 4849210]] ['145a', 'b2', 145, -11*a + 3, [a + 1, 1, a + 1, 0, 0]] ['145a', 'b4', 145, -11*a + 3, [a + 1, 1, a + 1, -15*a - 15, -57*a - 34]] ['145a', 'b5', 145, -11*a + 3, [a + 1, 1, a + 1, -255*a - 200, -2798*a - 1849]] ['145a', 'b6', 145, -11*a + 3, [a + 1, 1, a + 1, -15*a + 10, -112*a - 39]] ['145a', 'b7', 145, -11*a + 3, [a, -a - 1, 0, -205599*a - 127067, -53522100*a - 33078478]] ['145b', 'a2', 145, -11*a + 8, [0, 0, a, -30045*a - 18562, -2996961*a - 1852249]] ['145b', 'b2', 145, -11*a + 8, [a + 1, 1, a, -256*a - 165, 2165*a + 1343]] ['145b', 'b3', 145, -11*a + 8, [a + 1, 1, a, -16*a - 10, 23*a + 14]] ['145b', 'b7', 145, -11*a + 8, [a + 1, 1, a + 1, 205599*a - 332667, 53727699*a - 86933245]] ['145b', 'b8', 145, -11*a + 8, [a + 1, 1, a, -2041*a - 1350, -56352*a - 35184]] ['155a', 'a4', 155, -a + 13, [a + 1, 0, 1, 665*a - 1068, 9803*a - 15848]] ['155b', 'a4', 155, a + 12, [a, -a + 1, 1, -666*a - 402, -9803*a - 6045]] ['164a', 'a2', 164, -2*a + 14, [a, -1, 0, 128*a - 213, 819*a - 1330]] ['164b', 'a2', 164, 2*a + 12, [a + 1, -a - 1, 0, -128*a - 85, -819*a - 511]] ['171a', 'a4', 171, -12*a + 3, [1, a, 1, -11344*a - 7018, -702788*a - 434352]] ['171b', 'a4', 171, -12*a + 9, [1, -a + 1, 1, 11344*a - 18362, 702788*a - 1137140]] ['179a', 'a2', 179, -12*a + 5, [a, a + 1, a + 1, -19*a - 14, -76*a - 49]] ['179b', 'a2', 179, -12*a + 7, [a + 1, a - 1, 0, 20*a - 33, 42*a - 71]] ['199a', 'a3', 199, 3*a + 13, [0, a + 1, 1, 28665*a - 46382, 2797026*a - 4525688]] ['199a', 'b2', 199, 3*a + 13, [0, 0, 1, 317*a - 503, 3180*a - 5146]] ['199a', 'c2', 199, 3*a + 13, [a, -a - 1, a, -69*a - 43, -286*a - 177]] ['199b', 'a3', 199, -3*a + 16, [0, -a - 1, 1, -28663*a - 17718, -2768362*a - 1710944]] ['199b', 'b2', 199, -3*a + 16, [0, 0, 1, -317*a - 186, -3180*a - 1966]] ['199b', 'c2', 199, -3*a + 16, [a + 1, 1, 0, 70*a - 111, 355*a - 574]]

Get number of curves of given ranks.  

Since only up to 199, possible ranks are 0 and 1.

#Ranks = [get_rank(EllipticCurve(L[4])) for L in Small_List]

Get CM Curves:

#cm j-invariants CM = [-12288000, 54000, 0, 287496, 1728, 16581375, -3375, 8000, -32768, -884736, -884736000, -147197952000, -262537412640768000, 292658282496*a - 473531056128, -292658282496*a - 180872773632, 19691491018752*a + 12170004103872, -19691491018752*a + 31861495122624, 16554983445*a + 10231546590, -16554983445*a + 26786530035, 85995*a - 138510, -85995*a - 52515, 565760*a + 349120, -565760*a + 914880, 52756480*a - 85360640, -52756480*a - 32604160, 190356480*a + 117668160, -190356480*a + 308024640, 191346871173120*a - 309605741199360, -191346871173120*a - 118258870026240, 368136133486354759680*a - 595656776467890339840, -368136133486354759680*a - 227520642981535580160]
CM_curves = [] for L in Small_List: J = L[-1] if J in CM: CM_curves.append(L)
len(CM_curves)
8

Ranks:

The first curve of rank 2 has norm of conductor 199, so just check these curves:

R0 = [] R1 = [] for L in Small_List: if L[8] == 0: R0.append(L) else: R1.append(L)
len(R0), len(R1)
(257, 6)

Get p-torsion:

P_torsion = [L[-1] for L in Small_List] Pt = set(P_torsion) P_torsion_counts = [] for p in Pt: P_torsion_counts.append([p,P_torsion.count(p)])
def get_rank(E): b,t = E.simon_two_descent()[0:2] if b == t: return b else: t2 = E.two_torsion_rank() if t2 > 0: return 0 else: return 'issue'
P_torsion_counts
[[1, 27], [2, 82], [3, 11], [4, 41], [5, 12], [6, 47], [7, 6], [8, 19], [9, 4], [10, 2], [12, 9], [15, 1], [16, 2]]