本文整理汇总了Python中lmfdb.hilbert_modular_forms.hilbert_field.HilbertNumberField.ideal_label方法的典型用法代码示例。如果您正苦于以下问题:Python HilbertNumberField.ideal_label方法的具体用法?Python HilbertNumberField.ideal_label怎么用?Python HilbertNumberField.ideal_label使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类lmfdb.hilbert_modular_forms.hilbert_field.HilbertNumberField
的用法示例。
在下文中一共展示了HilbertNumberField.ideal_label方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的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_label [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: create_from_data_string
# 需要导入模块: from lmfdb.hilbert_modular_forms.hilbert_field import HilbertNumberField [as 别名]
# 或者: from lmfdb.hilbert_modular_forms.hilbert_field.HilbertNumberField import ideal_label [as 别名]
def create_from_data_string(self, label_or_field, L):
"""Takes an input line L from a raw data file and constructs the
associated HMF object with given base field.
String sample:
<[31, 31, w + 12], "a", [-3, -2, 2, 4, -4, ...]>,
"""
data = self.dbdata = {}
if isinstance(label_or_field, str):
label = label_or_field
data['field_label'] = label
F = HilbertNumberField(label)
if not F:
raise ValueError("No Hilbert number field with label %s is in the database" % label)
elif label_or_field == None:
raise ValueError("Must specify a valid field label")
else: # we were passed a HilbertNumberField already
F = label_or_field
data['field_label'] = F.label
#print("data['field_label'] = %s" % data['field_label'])
# The level
i = L.find('[')
j = L.find(']')
data['level_ideal'] = L[i:j+1]
#print("data['level_ideal'] = %s" % data['level_ideal'])
N, n, alpha = data['level_ideal'][1:-1].split(',')
data['level_norm'] = int(N)
#print("data['level_norm'] = %s" % data['level_norm'])
level = F.ideal_from_str(data['level_ideal'])[2]
#print("level = %s" % level)
data['level_label'] = F.ideal_label(level)
#print("data['level_label'] = %s" % data['level_label'])
# The weight
data['parallel_weight'] = int(2)
data['weight'] = str([data['parallel_weight']] * F.degree())
weight = [2] * F.degree()
# The label
i = L.find('"')
j = L.find('"', i+1)
data['label_suffix'] = L[i+1:j].replace(" ","")
data['label'] = construct_full_label(data['field_label'],
weight,
data['level_label'],
data['label_suffix'])
data['short_label'] = '-'.join([data['level_label'], data['label_suffix']])
#print("data['label'] = %s" % data['label'] )
#print("data['short_label'] = %s" % data['short_label'] )
# The hecke polynomial and degree
if 'x' in L:
# non-rational
i = L.find("x")
j = L.find(i+1,",")
data['hecke_polynomial'] = pol = L[i:j]
data['dimension'] = int(1)
x = polygen(QQ)
hpol = x.parent()(str(pol))
data['dimension'] = int(hpol.degree())
else:
# rational
data['hecke_polynomial'] = 'x'
data['dimension'] = int(1)
i = L.rfind("[")
j = L.rfind("]")
data['hecke_eigenvalues'] = L[i+1:j].replace(" ","").split(",")
data['hecke_eigenvalues'] = [unicode(s) for s in data['hecke_eigenvalues']]
#print("hecke_eigenvalues = %s..." % data['hecke_eigenvalues'][:20])
# Find (some of the) AL-eigenvalues
BP = level.prime_factors()
BP_indices = [F.prime_index(P) for P in BP]
print("BP_indices = %s" % BP_indices)
BP_exponents = [level.valuation(P) for P in BP]
#print("BP_exponents = %s" % BP_exponents)
AL_eigs = [int(data['hecke_eigenvalues'][k]) for k in BP_indices]
#print("AL_eigs = %s" % AL_eigs)
if not all([(e==1 and eig in [-1,1]) or (eig==0)
for e,eig in zip(BP_exponents,AL_eigs)]):
print("Some bad AL-eigenvalues found")
# NB the following will put 0 for the eigenvalue for primes
# whose quare divides the level; this will need fixing later.
data['AL_eigenvalues'] = [[F.primes[k],data['hecke_eigenvalues'][k]] for k in BP_indices]
data['is_CM'] = '?'
data['is_base_change'] = '?'