Exemple #1
0
 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)
Exemple #2
0
 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))
Exemple #3
0
 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
Exemple #4
0
    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
Exemple #5
0
 def field_knowl(self):
     nfgg = self.number_field_galois_group()
     return formatfield(nfgg.polynomial())