def make_isoclass_line(ec): r""" for ec a curve object from the database, create a line of text to match the corresponding raw input line from an isoclass file. ec should be a dict with these fields: 'field_label', 'conductor_label', 'iso_label', 'number' and optionally: 'isogeny_matrix' Output line fields (15): field_label conductor_label iso_label number isogeny_matrix Sample output line: 2.0.4.1 65.18.1 a 1 [[1,6,3,18,9,2],[6,1,2,3,6,3],[3,2,1,6,3,6],[18,3,6,1,2,9],[9,6,3,2,1,18],[2,3,6,9,18,1]] """ mat = '' if 'isogeny_matrix' in ec: mat = str(ec['isogeny_matrix']).replace(' ', '') else: print("Making isogeny matrix for class %s" % ec['label']) from lmfdb.ecnf.isog_class import permute_mat from lmfdb.ecnf.WebEllipticCurve import FIELD K = FIELD(ec['field_label']) curves = nfcurves.find({ 'field_label': ec['field_label'], 'conductor_label': ec['conductor_label'], 'iso_label': ec['iso_label'] }).sort('number') Elist = [ EllipticCurve([K.parse_NFelt(x) for x in c['ainvs']]) for c in curves ] cl = Elist[0].isogeny_class() perm = dict([(i, cl.index(E)) for i, E in enumerate(Elist)]) mat = permute_mat(cl.matrix(), perm, True) mat = str([list(ri) for ri in mat.rows()]).replace(" ", "") output_fields = [ ec['field_label'], ec['conductor_label'], ec['iso_label'], str(ec['number']), mat ] return " ".join(output_fields)
def make_isoclass_line(ec): r""" for ec a curve object from the database, create a line of text to match the corresponding raw input line from an isoclass file. ec should be a dict with these fields: 'field_label', 'conductor_label', 'iso_label', 'number' and optionally: 'isogeny_matrix' Output line fields (15): field_label conductor_label iso_label number isogeny_matrix Sample output line: 2.0.4.1 65.18.1 a 1 [[1,6,3,18,9,2],[6,1,2,3,6,3],[3,2,1,6,3,6],[18,3,6,1,2,9],[9,6,3,2,1,18],[2,3,6,9,18,1]] """ mat = '' if 'isogeny_matrix' in ec: mat = str(ec['isogeny_matrix']).replace(' ', '') else: print("Making isogeny matrix for class %s" % ec['label']) from lmfdb.ecnf.isog_class import permute_mat from lmfdb.ecnf.WebEllipticCurve import FIELD K = FIELD(ec['field_label']) curves = nfcurves.find({'field_label': ec['field_label'], 'conductor_label': ec['conductor_label'], 'iso_label': ec['iso_label']}).sort('number') Elist = [EllipticCurve([K.parse_NFelt(x) for x in c['ainvs']]) for c in curves] cl = Elist[0].isogeny_class() perm = dict([(i, cl.index(E)) for i, E in enumerate(Elist)]) mat = permute_mat(cl.matrix(), perm, True) mat = str([list(ri) for ri in mat.rows()]).replace(" ", "") output_fields = [ec['field_label'], ec['conductor_label'], ec['iso_label'], str(ec['number']), mat] return " ".join(output_fields)