def add_heights(data, verbose=False): r""" If data holds the data fields for a curve this returns the same with the heights of the points included as a new field with key 'heights'. It is more convenient to do this separately than while parsing the input files since curves() knows tha a-invariants but not the gens and curve_data() vice versa. """ if 'heights' in data and 'reg' in data: return data ngens = data.get('ngens', 0) if ngens == 0: data['heights'] = [] data['reg'] = float(1) return data # Now there is work to do K = nf_lookup(data['field_label']) if 'ainvs' in data: ainvs = data['ainvs'] else: ainvs = nfcurves.find_one({'label': data['label']})['ainvs'] ainvsK = parse_ainvs(K, ainvs) # list of K-elements E = EllipticCurve(ainvsK) gens = [E(parse_point(K, x)) for x in data['gens']] data['heights'] = [float(P.height()) for P in gens] data['reg'] = float(E.regulator_of_points(gens)) if verbose: print("added heights %s and regulator %s to %s" % (data['heights'], data['reg'], data['label'])) return data
def add_heights(data, verbose = False): r""" If data holds the data fields for a curve this returns the same with the heights of the points included as a new field with key 'heights'. It is more convenient to do this separately than while parsing the input files since curves() knows tha a-invariants but not the gens and curve_data() vice versa. """ if 'heights' in data and 'reg' in data: return data ngens = data.get('ngens', 0) if ngens == 0: data['heights'] = [] data['reg'] = float(1) return data # Now there is work to do K = nf_lookup(data['field_label']) if 'ainvs' in data: ainvs = data['ainvs'] else: ainvs = nfcurves.find_one({'label':data['label']})['ainvs'] ainvsK = parse_ainvs(K, ainvs) # list of K-elements E = EllipticCurve(ainvsK) gens = [E(parse_point(K,x)) for x in data['gens']] data['heights'] = [float(P.height()) for P in gens] data['reg'] = float(E.regulator_of_points(gens)) if verbose: print("added heights %s and regulator %s to %s" % (data['heights'],data['reg'], data['label'])) return data