本文整理汇总了Python中lmfdb.hilbert_modular_forms.hilbert_field.HilbertNumberField.ideal方法的典型用法代码示例。如果您正苦于以下问题:Python HilbertNumberField.ideal方法的具体用法?Python HilbertNumberField.ideal怎么用?Python HilbertNumberField.ideal使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类lmfdb.hilbert_modular_forms.hilbert_field.HilbertNumberField
的用法示例。
在下文中一共展示了HilbertNumberField.ideal方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: check_ideal_labels
# 需要导入模块: from lmfdb.hilbert_modular_forms.hilbert_field import HilbertNumberField [as 别名]
# 或者: from lmfdb.hilbert_modular_forms.hilbert_field.HilbertNumberField import ideal [as 别名]
def check_ideal_labels(field_label='2.2.5.1', min_norm=0, max_norm=None, fix=False, verbose=False):
r""" Go through all curves with the given field label, assumed totally
real, check whether the ideal label agrees with the level_label of
the associated Hilbert Modular Form.
"""
hmfs = conn.hmfs
forms = hmfs.forms
fields = hmfs.fields
query = {}
query['field_label'] = field_label
query['conductor_norm'] = {'$gte' : int(min_norm)}
if max_norm:
query['conductor_norm']['$lte'] = int(max_norm)
else:
max_norm = 'infinity'
cursor = nfcurves.find(query)
nfound = 0
nnotfound = 0
K = HilbertNumberField(field_label)
# NB We used to have 20 in the next line but that is insufficient
# to distinguish the a_p for forms 2.2.12.1-150.1-a and
# 2.2.12.1-150.1-b !
primes = [P['ideal'] for P in K.primes_iter(30)]
remap = {} # remap[old_label] = new_label
for ec in cursor:
fix_needed = False
cond_label = ec['conductor_label']
if cond_label in remap:
new_cond_label = remap[cond_label]
fix_needed=(cond_label!=new_cond_label)
if not fix_needed:
if verbose:
print("conductor label %s ok" % cond_label)
else:
conductor = make_conductor(ec,K)
level = K.ideal(cond_label)
new_cond_label = K.ideal_label(conductor)
remap[cond_label] = new_cond_label
fix_needed=(cond_label!=new_cond_label)
if fix_needed:
print("conductor label for curve %s is wrong, should be %s not %s" % (ec['label'],new_cond_label, cond_label))
if fix:
iso = ec['iso_label']
num = str(ec['number'])
newlabeldata = {}
newlabeldata['conductor_label'] = new_cond_label
newlabeldata['short_class_label'] = '-'.join([new_cond_label,iso])
newlabeldata['short_label'] = ''.join([newlabeldata['short_class_label'],num])
newlabeldata['class_label'] = '-'.join([field_label,
newlabeldata['short_class_label']])
newlabeldata['label'] = '-'.join([field_label,
newlabeldata['short_label']])
nfcurves.update({'_id': ec['_id']}, {"$set": newlabeldata}, upsert=True)
else:
if verbose:
print("conductor label %s ok" % cond_label)
return dict([(k,remap[k]) for k in remap if not k==remap[k]])
示例2: checkprimes
# 需要导入模块: from lmfdb.hilbert_modular_forms.hilbert_field import HilbertNumberField [as 别名]
# 或者: from lmfdb.hilbert_modular_forms.hilbert_field.HilbertNumberField import ideal [as 别名]
def checkprimes(label):
Fdata = get_Fdata(label)
gen_name = findvar(Fdata['ideals'])
WebF = get_WNF(label, gen_name)
F = WebF.K()
# ideals = niceideals(F, Fdata['ideals']) # never used
primes = niceideals(F, Fdata['primes'])
F = HilbertNumberField(label)
L = []
for prhnf,prideal,prlabel in primes:
ideal = F.ideal(prlabel)
if ideal != prideal:
L.append(prlabel)
return L
示例3: export_magma_output
# 需要导入模块: from lmfdb.hilbert_modular_forms.hilbert_field import HilbertNumberField [as 别名]
# 或者: from lmfdb.hilbert_modular_forms.hilbert_field.HilbertNumberField import ideal [as 别名]
def export_magma_output(infilename, outfilename=None, verbose=False):
r"""
Convert Magma search output to a curves file.
INPUT:
- ``infilename`` (string) -- name of file containing Magma output
- ``outfilename`` (string, default ``None``) -- name of output file
- ``verbose`` (boolean, default ``False``) -- verbosity flag.
"""
if outfilename:
outfile = file(outfilename, mode="w")
def output(L):
if outfilename:
outfile.write(L)
if verbose:
sys.stdout.write(L)
K = None
for field_label, cond_label, iso_label, num, cond_ideal, ai in magma_output_iter(infilename):
ec = {}
ec['field_label'] = field_label
if not K:
K = HilbertNumberField(field_label)
ec['conductor_label'] = cond_label
ec['iso_label'] = iso_label
ec['number'] = num
N = K.ideal(cond_label)
norm = N.norm()
hnf = N.pari_hnf()
ec['conductor_ideal'] = cond_ideal
ec['conductor_ideal'] = "[%i,%s,%s]" % (norm, hnf[1][0], hnf[1][1])
ec['conductor_norm'] = norm
ec['ainvs'] = [[str(c) for c in list(a)] for a in ai]
ec['cm'] = '?'
ec['base_change'] = []
output(make_curves_line(ec) + "\n")
示例4: find_curves
# 需要导入模块: from lmfdb.hilbert_modular_forms.hilbert_field import HilbertNumberField [as 别名]
# 或者: from lmfdb.hilbert_modular_forms.hilbert_field.HilbertNumberField import ideal [as 别名]
def find_curves(field_label='2.2.5.1', min_norm=0, max_norm=None, label=None, outfilename=None, verbose=False, effort=500):
r""" Go through all Hilbert Modular Forms with the given field label,
assumed totally real, for level norms in the given range, test
whether an elliptic curve exists with the same label; if not, find
the curves using Magma; output these to a file.
"""
print("Checking forms over {}, norms from {} to {}".format(field_label,min_norm,max_norm))
if outfilename:
print("Output of curves found to {}".format(outfilename))
else:
print("No curve search or output, just checking")
query = {}
query['field_label'] = field_label
if fields.find({'label': field_label}).count() == 0:
if verbose:
print("No HMF data for field %s" % field_label)
return None
query['dimension'] = 1 # only look at rational newforms
if label:
print("looking for {} only".format(label))
query['short_label'] = label # e.g. '91.1-a'
else:
query['level_norm'] = {'$gte': int(min_norm)}
if max_norm:
query['level_norm']['$lte'] = int(max_norm)
cursor = forms.find(query)
cursor.sort([('level_norm', pymongo.ASCENDING)])
labels = [f['label'] for f in cursor]
nfound = 0
nnotfound = 0
nok = 0
missing_curves = []
K = HilbertNumberField(field_label)
primes = [P['ideal'] for P in K.primes_iter(1000)]
curve_ap = {} # curve_ap[conductor_label] will be a dict iso -> ap
form_ap = {} # form_ap[conductor_label] will be a dict iso -> ap
# Step 1: look at all newforms, check that there is an elliptic
# curve of the same label, and if so compare ap-lists. The
# dicts curve_ap and form_ap store these when there is
# disagreement: e.g. curve_ap[conductor_label][iso_label] =
# aplist.
for curve_label in labels:
# We find the forms again since otherwise the cursor might timeout during the loop.
f = forms.find_one({'label': curve_label})
ec = nfcurves.find_one({'field_label': field_label, 'class_label': curve_label, 'number': 1})
if ec:
if verbose:
print("curve with label %s found in the database" % curve_label)
nfound += 1
ainvsK = parse_ainvs(K.K(), ec['ainvs'])
E = EllipticCurve(ainvsK)
good_flags = [E.has_good_reduction(P) for P in primes]
good_primes = [P for (P, flag) in zip(primes, good_flags) if flag]
aplist = [E.reduction(P).trace_of_frobenius() for P in good_primes]
f_aplist = [int(a) for a in f['hecke_eigenvalues']]
f_aplist = [ap for ap, flag in zip(f_aplist, good_flags) if flag]
nap = min(len(aplist), len(f_aplist))
if aplist[:nap] == f_aplist[:nap]:
nok += 1
if verbose:
print("Curve {} and newform agree! (checked {} ap)".format(ec['short_label'],nap))
else:
print("Curve {} does NOT agree with newform".format(ec['short_label']))
if verbose:
for P,aPf,aPc in zip(good_primes[:nap], f_aplist[:nap], aplist[:nap]):
if aPf!=aPc:
print("P = {} with norm {}".format(P,P.norm().factor()))
print("ap from curve: %s" % aPc)
print("ap from form: %s" % aPf)
if not ec['conductor_label'] in curve_ap:
curve_ap[ec['conductor_label']] = {}
form_ap[ec['conductor_label']] = {}
curve_ap[ec['conductor_label']][ec['iso_label']] = aplist
form_ap[ec['conductor_label']][f['label_suffix']] = f_aplist
else:
if verbose:
print("No curve with label %s found in the database!" % curve_label)
missing_curves.append(f['short_label'])
nnotfound += 1
# Report progress:
n = nfound + nnotfound
if nnotfound:
print("Out of %s newforms, %s curves were found in the database and %s were not found" % (n, nfound, nnotfound))
else:
print("Out of %s newforms, all %s had curves with the same label and ap" % (n, nfound))
if nfound == nok:
print("All curves agree with matching newforms")
else:
print("%s curves agree with matching newforms, %s do not" % (nok, nfound - nok))
if nnotfound:
print("%s missing curves" % len(missing_curves))
else:
return
# Step 2: for each newform for which there was no curve, call interface to Magma's EllipticCurveSearch()
#.........这里部分代码省略.........
示例5: find_curves
# 需要导入模块: from lmfdb.hilbert_modular_forms.hilbert_field import HilbertNumberField [as 别名]
# 或者: from lmfdb.hilbert_modular_forms.hilbert_field.HilbertNumberField import ideal [as 别名]
def find_curves(field_label='2.2.5.1', min_norm=0, max_norm=None, outfilename=None, verbose=False):
r""" Go through all Hilbert Modular Forms with the given field label,
assumed totally real, for level norms in the given range, test
whether an elliptic curve exists with the same label; if not, find
the curves using Magma; output these to a file.
"""
query = {}
query['field_label'] = field_label
if fields.find({'label': field_label}).count() == 0:
if verbose:
print("No HMF data for field %s" % field_label)
return None
query['dimension'] = 1 # only look at rational newforms
query['level_norm'] = {'$gte': int(min_norm)}
if max_norm:
query['level_norm']['$lte'] = int(max_norm)
else:
max_norm = 'infinity'
cursor = forms.find(query)
cursor.sort([('level_norm', pymongo.ASCENDING)])
labels = [f['label'] for f in cursor]
nfound = 0
nnotfound = 0
nok = 0
missing_curves = []
K = HilbertNumberField(field_label)
primes = [P['ideal'] for P in K.primes_iter(100)]
curve_ap = {} # curve_ap[conductor_label] will be a dict iso -> ap
form_ap = {} # form_ap[conductor_label] will be a dict iso -> ap
# Step 1: look at all newforms, check that there is an elliptic
# curve of the same label, and if so compare ap-lists. The
# dicts curve_ap and form_ap store these when there is
# disagreement: e.g. curve_ap[conductor_label][iso_label] =
# aplist.
for curve_label in labels:
# We find the forms again since otherwise the cursor might timeout during the loop.
f = forms.find_one({'label': curve_label})
ec = nfcurves.find_one({'field_label': field_label, 'class_label': curve_label, 'number': 1})
if ec:
if verbose:
print("curve with label %s found in the database" % curve_label)
nfound += 1
ainvsK = [K.K()([QQ(str(c)) for c in ai]) for ai in ec['ainvs']]
E = EllipticCurve(ainvsK)
good_flags = [E.has_good_reduction(P) for P in primes]
good_primes = [P for (P, flag) in zip(primes, good_flags) if flag]
aplist = [E.reduction(P).trace_of_frobenius() for P in good_primes[:30]]
f_aplist = [int(a) for a in f['hecke_eigenvalues'][:40]]
f_aplist = [ap for ap, flag in zip(f_aplist, good_flags) if flag][:30]
if aplist == f_aplist:
nok += 1
if verbose:
print("Curve %s and newform agree!" % ec['short_label'])
else:
print("Curve %s does NOT agree with newform" % ec['short_label'])
if verbose:
print("ap from curve: %s" % aplist)
print("ap from form: %s" % f_aplist)
if not ec['conductor_label'] in curve_ap:
curve_ap[ec['conductor_label']] = {}
form_ap[ec['conductor_label']] = {}
curve_ap[ec['conductor_label']][ec['iso_label']] = aplist
form_ap[ec['conductor_label']][f['label_suffix']] = f_aplist
else:
if verbose:
print("No curve with label %s found in the database!" % curve_label)
missing_curves.append(f['short_label'])
nnotfound += 1
# Report progress:
n = nfound + nnotfound
if nnotfound:
print("Out of %s newforms, %s curves were found in the database and %s were not found" % (n, nfound, nnotfound))
else:
print("Out of %s newforms, all %s had curves with the same label and ap" % (n, nfound))
if nfound == nok:
print("All curves agree with matching newforms")
else:
print("%s curves agree with matching newforms, %s do not" % (nok, nfound - nok))
if nnotfound:
print("%s missing curves" % len(missing_curves))
else:
return
# Step 2: for each newform for which there was no curve, call interface to Magma's EllipticCurveSearch()
if outfilename:
outfile = file(outfilename, mode="w")
def output(L):
if outfilename:
outfile.write(L)
if verbose:
sys.stdout.write(L)
for nf_label in missing_curves:
if verbose:
#.........这里部分代码省略.........