def by_ec_label(label): ec_logger.debug(label) try: N, iso, number = split_lmfdb_label(label) except AttributeError: ec_logger.debug("%s not a valid lmfdb label, trying cremona") try: N, iso, number = split_cremona_label(label) except AttributeError: ec_logger.debug("%s not a valid cremona label either, trying Weierstrass") eqn = label.replace(" ","") if weierstrass_eqn_regex.match(eqn) or short_weierstrass_eqn_regex.match(eqn): return by_weierstrass(eqn) else: return elliptic_curve_jump_error(label, {}) # We permanently redirect to the lmfdb label if number: data = db_ec().find_one({'label': label}) if data is None: return elliptic_curve_jump_error(label, {}) ec_logger.debug(url_for(".by_ec_label", label=data['lmfdb_label'])) return redirect(url_for(".by_ec_label", label=data['lmfdb_label']), 301) else: data = db_ec().find_one({'iso': label}) if data is None: return elliptic_curve_jump_error(label, {}) ec_logger.debug(url_for(".by_ec_label", label=data['lmfdb_label'])) return redirect(url_for(".by_ec_label", label=data['lmfdb_iso']), 301) if number: return redirect(url_for(".by_triple_label", conductor=N, iso_label=iso, number=number)) else: return redirect(url_for(".by_double_iso_label", conductor=N, iso_label=iso))
def by_ec_label(label): ec_logger.debug(label) # First see if we have an LMFDB label of a curve or class: try: N, iso, number = split_lmfdb_label(label) if number: return redirect( url_for(".by_triple_label", conductor=N, iso_label=iso, number=number)) else: return redirect( url_for(".by_double_iso_label", conductor=N, iso_label=iso)) except AttributeError: ec_logger.debug("%s not a valid lmfdb label, trying cremona") # Next see if we have a Cremona label of a curve or class: try: N, iso, number = split_cremona_label(label) except AttributeError: ec_logger.debug( "%s not a valid cremona label either, trying Weierstrass") eqn = label.replace(" ", "") if weierstrass_eqn_regex.match( eqn) or short_weierstrass_eqn_regex.match(eqn): return by_weierstrass(eqn) else: return elliptic_curve_jump_error(label, {}) if number: # it's a curve label_type = 'label' else: label_type = 'iso' data = db_ec().find_one({label_type: label}) if data is None: return elliptic_curve_jump_error(label, {}) ec_logger.debug(url_for(".by_ec_label", label=data['lmfdb_label'])) iso = data['lmfdb_iso'].split(".")[1] if number: return redirect( url_for(".by_triple_label", conductor=N, iso_label=iso, number=data['lmfdb_number'])) else: return redirect( url_for(".by_double_iso_label", conductor=N, iso_label=iso))
def by_weierstrass(eqn): w = weierstrass_eqn_regex.match(eqn) if not w: w = short_weierstrass_eqn_regex.match(eqn) if not w: return elliptic_curve_jump_error(eqn, {}) try: ainvs = [ZZ(ai) for ai in w.groups()] except TypeError: return elliptic_curve_jump_error(eqn, {}) E = EllipticCurve(ainvs).global_minimal_model() label = db.ec_curvedata.lucky({'ainvs': EC_ainvs(E)},'lmfdb_label') if label is None: N = E.conductor() return elliptic_curve_jump_error(eqn, {'conductor':N}, missing_curve=True) return redirect(url_for(".by_ec_label", label=label), 301)
def by_weierstrass(eqn): w = weierstrass_eqn_regex.match(eqn) if not w: w = short_weierstrass_eqn_regex.match(eqn) if not w: return elliptic_curve_jump_error(eqn, {}) try: ainvs = [ZZ(ai) for ai in w.groups()] except TypeError: return elliptic_curve_jump_error(eqn, {}) E = EllipticCurve(ainvs).global_minimal_model() label = db.ec_curves.lucky({'ainvs': EC_ainvs(E)},'lmfdb_label') if label is None: N = E.conductor() return elliptic_curve_jump_error(eqn, {'conductor':N}, missing_curve=True) return redirect(url_for(".by_ec_label", label=label), 301)
def by_weierstrass(eqn): w = weierstrass_eqn_regex.match(eqn) if not w: w = short_weierstrass_eqn_regex.match(eqn) if not w: return elliptic_curve_jump_error(eqn, {}) try: ainvs = [ZZ(ai) for ai in w.groups()] except TypeError: return elliptic_curve_jump_error(eqn, {}) E = EllipticCurve(ainvs).global_minimal_model() N = E.conductor() data = db_ec().find_one({'xainvs': EC_ainvs(E)}) if data is None: return elliptic_curve_jump_error(eqn, {'conductor':N}, missing_curve=True) return redirect(url_for(".by_ec_label", label=data['lmfdb_label']), 301)
def by_weierstrass(eqn): w = weierstrass_eqn_regex.match(eqn) if not w: w = short_weierstrass_eqn_regex.match(eqn) if not w: return elliptic_curve_jump_error(eqn, {}) try: ainvs = [ZZ(ai) for ai in w.groups()] except TypeError: return elliptic_curve_jump_error(eqn, {}) E = EllipticCurve(ainvs).global_minimal_model() N = E.conductor() ainvs = [str(ai) for ai in E.ainvs()] data = db_ec().find_one({'ainvs': ainvs}) if data is None: return elliptic_curve_jump_error(eqn, {'conductor':N}, missing_curve=True) return redirect(url_for(".by_ec_label", label=data['lmfdb_label']), 301)
def by_ec_label(label): ec_logger.debug(label) try: N, iso, number = split_lmfdb_label(label) except AttributeError: ec_logger.debug("%s not a valid lmfdb label, trying cremona") try: N, iso, number = split_cremona_label(label) except AttributeError: ec_logger.debug( "%s not a valid cremona label either, trying Weierstrass") eqn = label.replace(" ", "") if weierstrass_eqn_regex.match( eqn) or short_weierstrass_eqn_regex.match(eqn): return by_weierstrass(eqn) else: return elliptic_curve_jump_error(label, {}) # We permanently redirect to the lmfdb label if number: # it's a curve data = db_ec().find_one({'label': label}) if data is None: return elliptic_curve_jump_error(label, {}) ec_logger.debug(url_for(".by_ec_label", label=data['lmfdb_label'])) #return redirect(url_for(".by_ec_label", label=data['lmfdb_label']), 301) return render_curve_webpage_by_label(data['label']) else: # it's an isogeny class data = db_ec().find_one({'iso': label}) if data is None: return elliptic_curve_jump_error(label, {}) ec_logger.debug(url_for(".by_ec_label", label=data['lmfdb_label'])) #return redirect(url_for(".by_ec_label", label=data['iso']), 301) return render_isogeny_class(data['iso']) if number: return redirect( url_for(".by_triple_label", conductor=N, iso_label=iso, number=number)) else: return redirect( url_for(".by_double_iso_label", conductor=N, iso_label=iso))
def by_ec_label(label): ec_logger.debug(label) # First see if we have an LMFDB label of a curve or class: try: N, iso, number = split_lmfdb_label(label) if number: return redirect(url_for(".by_triple_label", conductor=N, iso_label=iso, number=number)) else: return redirect(url_for(".by_double_iso_label", conductor=N, iso_label=iso)) except AttributeError: ec_logger.debug("%s not a valid lmfdb label, trying cremona") # Next see if we have a Cremona label of a curve or class: try: N, iso, number = split_cremona_label(label) except AttributeError: ec_logger.debug("%s not a valid cremona label either, trying Weierstrass") eqn = label.replace(" ","") if weierstrass_eqn_regex.match(eqn) or short_weierstrass_eqn_regex.match(eqn): return by_weierstrass(eqn) else: return elliptic_curve_jump_error(label, {}) if number: # it's a curve label_type = 'label' else: label_type = 'iso' data = db.ec_curves.lucky({label_type: label}, projection=1) if data is None: return elliptic_curve_jump_error(label, {}, wellformed_label=True, missing_curve=True) ec_logger.debug(url_for(".by_ec_label", label=data['lmfdb_label'])) iso = data['lmfdb_iso'].split(".")[1] if number: return render_curve_webpage_by_label(label) #return redirect(url_for(".by_triple_label", conductor=N, iso_label=iso, number=data['lmfdb_number'])) else: return render_isogeny_class(label)