def projective_field(self): projfield = self._data['Proj_Polynomial'] if projfield == [0]: return 'data not computed' if projfield == [0, 1]: return formatfield(projfield) return 'Galois closure of ' + formatfield(projfield)
def projective_field(self): projfield = self._data['Proj_Polynomial'] if projfield == [0]: return 'data not computed' if projfield == [0,1]: return formatfield(projfield) return formatfield(projfield, missing_text="Degree %s field"%(len(projfield)-1))
def kerfield(self): kerpoly = self.kernel_field_poly if kerpoly and self.order <= 100: return formatfield( kerpoly, missing_text="Number field defined by a degree %d polynomial" % self.order) else: return "Number field defined by a degree %d polynomial (not computed)" % self.order
def make_torsion_growth(self): # The torsion growth table has one row per extension field tgdata = list(db.ec_torsion_growth.search({'lmfdb_label': self.lmfdb_label})) if not tgdata: # we only have torsion growth data for some range of conductors self.torsion_growth_data_exists = False return self.torsion_growth_data_exists = True self.tg = tg = {} tg['data'] = tgextra = [] # find all base changes of this curve in the database, if any: bcs = list(db.ec_nfcurves.search({'base_change': {'$contains': [self.lmfdb_label]}}, projection='label')) # extract the fields from the labels of the base-change curves: bc_fields = [lab.split("-")[0] for lab in bcs] bc_pols = [db.nf_fields.lookup(lab, projection='coeffs') for lab in bc_fields] tg['fields_missing'] = False for tgd in tgdata: tg1 = {} tg1['bc_label'] = "Not in database" tg1['d'] = tgd['degree'] F = tgd['field'] tg1['f'] = formatfield(F) if "missing" in tg1['f']: tg['fields_missing'] = True T = tgd['torsion'] tg1['t'] = r'\(' + r' \times '.join(r'\Z/{}\Z'.format(n) for n in T) + r'\)' bcc = next((lab for lab, pol in zip(bcs, bc_pols) if pol==F), None) if bcc: from lmfdb.ecnf.main import split_full_label F, NN, I, C = split_full_label(bcc) tg1['bc_label'] = bcc tg1['bc_url'] = url_for('ecnf.show_ecnf', nf=F, conductor_label=NN, class_label=I, number=C) tg1['m'] = 0 # holds multiplicity per degree tgextra.append(tg1) tgextra.sort(key = lambda x: x['d']) tg['n'] = len(tgextra) lastd = 1 for tg1 in tgextra: d = tg1['d'] if d!=lastd: tg1['m'] = len([x for x in tgextra if x['d']==d]) lastd = d ## Hard-coded this for now. Note that the *only* place where ## this number is used is in the ec-curve template where it ## says "The number fields ... of degree less than ## {{data.tg.maxd}} such that...". tg['maxd'] = 24
def field_knowl(self): nfgg = self.number_field_galois_group() return formatfield(nfgg.polynomial())