Beispiel #1
0

lf_columns = SearchColumns([
    LinkCol("label", "lf.field.label", "Label", url_for_label, default=True),
    ProcessedCol("coeffs",
                 "lf.defining_polynomial",
                 "Polynomial",
                 format_coeffs,
                 default=True),
    MathCol("p", "lf.qp", "$p$", default=True),
    MathCol("e", "lf.ramification_index", "$e$", default=True),
    MathCol("f", "lf.residue_field_degree", "$f$", default=True),
    MathCol("c", "lf.discriminant_exponent", "$c$", default=True),
    MultiProcessedCol(
        "gal",
        "nf.galois_group",
        "Galois group", ["n", "gal", "cache"],
        lambda n, t, cache: group_pretty_and_nTj(n, t, cache=cache),
        default=True),
    MultiProcessedCol("slopes",
                      "lf.slope_content",
                      "Slope content", ["slopes", "t", "u"],
                      show_slope_content,
                      default=True,
                      mathmode=True)
],
                           db_cols=[
                               "c", "coeffs", "e", "f", "gal", "label", "n",
                               "p", "slopes", "t", "u"
                           ])

Beispiel #2
0
maass_columns = SearchColumns([
    MathCol("level", "mf.maass.mwf.level", "Level", default=True),
    MathCol("weight", "mf.maass.mwf.weight", "Weight", default=True),
    MultiProcessedCol("character",
                      "mf.maass.mwf.character",
                      "Char", ["level", "conrey_index"],
                      character_link,
                      short_title="character",
                      default=True,
                      align="center"),
    MultiProcessedCol("spectral",
                      "mf.maass.mwf.spectralparameter",
                      "Spectral parameter", ["maass_id", "spectral_parameter"],
                      lambda mid, param: '<a href="%s">%s</a>' %
                      (url_for('.by_label', label=mid), param),
                      default=True),
    ProcessedCol("symmetry",
                 "mf.maass.mwf.symmetry",
                 "Symmetry",
                 symmetry_pretty,
                 default=True,
                 align="center"),
    ProcessedCol("fricke_eigenvalue",
                 "cmf.fricke",
                 "Fricke",
                 fricke_pretty,
                 short_title="Fricke",
                 default=True,
                 align="center")
],
                              db_cols=[
                                  "maass_id", "level", "weight",
                                  "conrey_index", "spectral_parameter",
                                  "symmetry", "fricke_eigenvalue"
                              ])
Beispiel #3
0
# This doesn't seem to be used currently
#def number_field_algebra(info):
#    fields = info['algebra'].split('_')
#    fields2 = [WebNumberField.from_coeffs(a) for a in fields]
#    for j in range(len(fields)):
#        if fields2[j] is None:
#            fields2[j] = WebNumberField.fakenf(fields[j])
#    t = 'Number field algebra'
#    info = {'results': fields2}
#    return render_template("number_field_algebra.html", info=info, title=t, bread=bread)

nf_columns = SearchColumns([
    ProcessedCol("label", "nf.label", "Label",
                 lambda label: '<a href="%s">%s</a>' % (url_for_label(label), nf_label_pretty(label)),
                 default=True),
    SearchCol("poly", "nf.defining_polynomial", "Polynomial", default=True),
    MathCol("disc", "nf.discriminant", "Discriminant", default=True, align="left"),
    SearchCol("galois", "nf.galois_group", "Galois group", default=True),
    SearchCol("class_group_desc", "nf.ideal_class_group", "Class group", default=True)],
    db_cols=["class_group", "coeffs", "degree", "disc_abs", "disc_sign", "galois_label", "label", "ramps", "used_grh"])

def nf_postprocess(res, info, query):
    galois_labels = [rec["galois_label"] for rec in res if rec.get("galois_label")]
    cache = knowl_cache(list(set(galois_labels)))
    for rec in res:
        wnf = WebNumberField.from_data(rec)
        rec["poly"] = wnf.web_poly()
        rec["disc"] = wnf.disc_factored_latex()
        rec["galois"] = wnf.galois_string(cache=cache)
        rec["class_group_desc"] = wnf.class_group_invariants()
    return res
Beispiel #4
0
gg_columns = SearchColumns([
    LinkCol("label", "gg.label", "Label", url_for_label, default=True),
    SearchCol("pretty", "gg.simple_name", "Name", default=True),
    MathCol("order", "group.order", "Order", default=True, align="right"),
    MathCol("parity", "gg.parity", "Parity", default=True, align="right"),
    CheckCol("solv", "group.solvable", "Solvable", default=True),
    MultiProcessedCol(
        "subfields",
        "gg.subfields",
        "Subfields", ["subfields", "cache"],
        lambda subs, cache: WebGaloisGroup(None, {
            "subfields": subs
        }).subfields(cache=cache),
        contingent=lambda info: info["show_subs"],
        default=True),
    MultiProcessedCol(
        "siblings",
        "gg.other_representations",
        "Low Degree Siblings", ["siblings", "bound_siblings", "cache"],
        lambda sibs, bnd, cache: WebGaloisGroup(None, {
            "siblings": sibs,
            "bound_siblings": bnd
        }).otherrep_list(givebound=False, cache=cache),
        default=True)
],
                           db_cols=[
                               "bound_siblings", "gapid", "label", "name",
                               "order", "parity", "pretty", "siblings", "solv",
                               "subfields"
                           ])
gg_columns.dummy_download = True
Beispiel #5
0

def url_for_label(label):
    if label == "random":
        return url_for(".random_abstract_group")
    return url_for(".by_label", label=label)


def get_url(label):
    return url_for(".by_label", label=label)


glnQ_columns = SearchColumns([
    LinkCol("label", "group.label", "Label", get_url, default=True),
    MathCol("tex_name", "group.name", "Name", default=True),
    MathCol("order", "group.order", "Order", default=True),
    MathCol("dim", "group.dimension", "Dimension", default=True)
],
                             db_cols=["label", "group", "order", "dim"])
glnQ_columns.dummy_download = True


def glnQ_postprocess(res, info, query):
    tex_names = {
        rec["label"]: rec["tex_name"]
        for rec in db.gps_groups.search(
            {"label": {
                "$in": [gp["group"] for gp in res]
            }}, ["label", "tex_name"])
    }
    for gp in res:
Beispiel #6
0
                return 'a' + cremona_letter_code(-c)
            return cremona_letter_code(c)

        jump_box = "%s.%s.%s" % (g, q, "_".join(
            extended_code(cdict.get(i, 0)) for i in range(1, g + 1)))
    return by_label(jump_box)


abvar_columns = SearchColumns([
    LinkCol("label", "ab.fq.lmfdb_label", "Label", url_for_label,
            default=True),
    MathCol("g", "ag.dimension", "Dimension", default=True),
    MathCol("field", "ag.base_field", "Base field", default=True),
    MathCol("formatted_polynomial",
            "av.fq.l-polynomial",
            "L-polynomial",
            default=True),
    MathCol("p_rank", "av.fq.p_rank", "$p$-rank", default=True),
    SearchCol("decomposition_display_search", "av.decomposition",
              "Isogeny factors")
], [
    "label", "g", "q", "poly", "p_rank", "is_simple", "simple_distinct",
    "simple_multiplicities", "is_primitive", "primitive_models"
])


@search_wrap(
    table=db.av_fq_isog,
    title="Abelian variety search results",
    err_title="Abelian variety search input error",
    columns=abvar_columns,
    shortcuts={
Beispiel #7
0
        except ValueError:
            flash_error ("%s is not valid input.  Expected a label or Weil polynomial.", jump_box)
            return redirect(url_for(".abelian_varieties"))
        def extended_code(c):
            if c < 0:
                return 'a' + cremona_letter_code(-c)
            return cremona_letter_code(c)
        jump_box = "%s.%s.%s" % (g, q, "_".join(extended_code(cdict.get(i, 0)) for i in range(1, g+1)))
    return by_label(jump_box)

abvar_columns = SearchColumns([
    LinkCol("label", "ab.fq.lmfdb_label", "Label", url_for_label, default=True),
    MathCol("g", "ag.dimension", "Dimension", default=True),
    MathCol("field", "ag.base_field", "Base field", default=True),
    MathCol("p", "ag.base_field", "Base char.", short_title="base characteristic"),
    MathCol("formatted_polynomial", "av.fq.l-polynomial", "L-polynomial", short_title="L-polynomial", default=True),
    MathCol("p_rank", "av.fq.p_rank", "$p$-rank", default=True),
    MathCol("p_rank_deficit", "av.fq.p_rank", "$p$-rank deficit"),
    MathCol("curve_count", "av.fq.curve_point_counts", "points on curve"),
    MathCol("abvar_count", "ag.fq.point_counts", "points on variety"),
    SearchCol("decomposition_display_search", "av.decomposition", "Isogeny factors", default=True)],
    db_cols=["label", "g", "q", "poly", "p_rank", "p_rank_deficit", "is_simple", "simple_distinct", "simple_multiplicities", "is_primitive", "primitive_models", "curve_count", "abvar_count"])

@search_wrap(
    table=db.av_fq_isog,
    title="Abelian variety search results",
    err_title="Abelian variety search input error",
    columns=abvar_columns,
    shortcuts={
        "jump": jump,
        "download": download_search,
    },
Beispiel #8
0
                query['gram'] = gram
                proj = lattice_search_projection
                count = parse_count(info)
                start = parse_start(info)
                res = db.lat_lattices.search(query, proj, limit=count, offset=start, info=info)
                break

    return res

def url_for_label(label):
    return url_for(".render_lattice_webpage", label=label)

lattice_columns = SearchColumns([
    LinkCol("label", "lattice.label", "Label", url_for_label, default=True),
    MathCol("dim", "lattice.dimension", "Dimension", default=True),
    MathCol("det", "lattice.determinant", "Determinant", default=True),
    MathCol("level", "lattice.level", "Level", default=True),
    MathCol("class_number", "lattice.class_number", "Class number", default=True),
    MathCol("minimum", "lattice.minimal_vector", "Minimal vector", default=True),
    MathCol("aut", "lattice.group_order", "Aut. group order", default=True)])

@search_wrap(table=db.lat_lattices,
             title='Integral lattices search results',
             err_title='Integral lattices search error',
             columns=lattice_columns,
             shortcuts={'download':download_search,
                        'label':lambda info:lattice_by_label_or_name(info.get('label'))},
             postprocess=lattice_search_isometric,
             url_for_label=url_for_label,
             bread=lambda: get_bread("Search results"),
             learnmore=learnmore_list,
             properties=lambda: [])
Beispiel #9
0
ec_columns = SearchColumns([
     LinkCol("lmfdb_label", "ec.q.lmfdb_label", "Label", lambda label: url_for(".by_ec_label", label=label),
             default=True, align="center", short_title="LMFDB curve label"),
     MultiProcessedCol("cremona_label", "ec.q.cremona_label", "Cremona label",
                       ["Clabel", "conductor"],
                       lambda label, conductor: '<a href="%s">%s</a>' % (url_for(".by_ec_label", label=label), label) if conductor < CREMONA_BOUND else " - ",
                       align="center", short_title="Cremona curve label"),
     LinkCol("lmfdb_iso", "ec.q.lmfdb_label", "Class", lambda label: url_for(".by_ec_label", label=label),
             default=True, align="center", short_title="LMFDB class label"),
     MultiProcessedCol("cremona_iso", "ec.q.cremona_label", "Cremona class",
                       ["Ciso", "conductor"],
                       lambda label, conductor: '<a href="%s">%s</a>' % (url_for(".by_ec_label", label=label), label) if conductor < CREMONA_BOUND else " - ",
                       align="center", short_title="Cremona class label"),
     MathCol("class_size", "ec.isogeny_class", "Class size", align="center", default=lambda info: info.get("class_size") or info.get("optimal") == "on"),
     MathCol("class_deg", "ec.isogeny_class_degree", "Class degree", align="center", default=lambda info: info.get("class_deg")),
     ProcessedCol("conductor", "ec.q.conductor", "Conductor", lambda v: web_latex_factored_integer(ZZ(v)), default=True, align="center"),
     MultiProcessedCol("disc", "ec.discriminant", "Discriminant", ["signD", "absD"], lambda s, a: web_latex_factored_integer(s*ZZ(a)),
                       default=lambda info: info.get("discriminant"), align="center"),
     MathCol("rank", "ec.rank", "Rank", default=True),
     ProcessedCol("torsion_structure", "ec.torsion_subgroup", "Torsion",
                  lambda tors: r"\oplus".join([r"\Z/%s\Z"%n for n in tors]) if tors else r"\mathsf{trivial}", default=True, mathmode=True, align="center"),
     ProcessedCol("geom_end_alg", "ag.endomorphism_algebra", r"$\textrm{End}^0(E_{\overline\Q})$",
                  lambda v: r"$\Q$" if not v else r"$\Q(\sqrt{%d})$"%(integer_squarefree_part(v)),
                  short_title="Qbar-end algebra", align="center", orig="cm"),
     ProcessedCol("cm_discriminant", "ec.complex_multiplication", "CM", lambda v: "" if v == 0 else v,
                  short_title="CM discriminant", mathmode=True, align="center", default=True, orig="cm"),
     ProcessedCol("sato_tate_group", "st_group.definition", "Sato-Tate", lambda v: st_display_knowl('1.2.A.1.1a' if v==0 else '1.2.B.2.1a'),
                  short_title="Sato-Tate group", align="center", orig="cm"),
     CheckCol("semistable", "ec.reduction", "Semistable"),
     CheckCol("potential_good_reduction", "ec.reduction", "Potentially good"),
     ProcessedCol("nonmax_primes", "ec.maximal_elladic_galois_rep", r"Nonmax $\ell$", lambda primes: ", ".join([str(p) for p in primes]),
                  default=lambda info: info.get("nonmax_primes"), short_title="nonmaximal primes", mathmode=True, align="center"),
     ProcessedCol("elladic_images", "ec.galois_rep_elladic_image", r"$\ell$-adic images", lambda v: ", ".join([display_knowl('gl2.subgroup_data', title=s, kwargs={'label':s}) for s in v]),
                  short_title="ℓ-adic images", default=lambda info: info.get("nonmax_primes") or info.get("galois_image"), align="center"),
     ProcessedCol("modell_images", "ec.galois_rep_modell_image", r"mod-$\ell$ images", lambda v: ", ".join([display_knowl('gl2.subgroup_data', title=s, kwargs={'label':s}) for s in v]),
                  short_title="mod-ℓ images", default=lambda info: info.get("nonmax_primes") or info.get("galois_image"), align="center"),
     ProcessedCol("regulator", "ec.regulator", "Regulator", lambda v: str(v)[:11], mathmode=True),
     MathCol("sha", "ec.analytic_sha_order", r"$Ш_{\textrm{an}}$", short_title="analytic Ш"),
     ProcessedCol("sha_primes", "ec.analytic_sha_order", "Ш primes", lambda primes: ", ".join(str(p) for p in primes),
                  default=lambda info: info.get("sha_primes"), mathmode=True, align="center"),
     MathCol("num_int_pts", "ec.q.integral_points", "Integral points",
             default=lambda info: info.get("num_int_pts"), align="center"),
     MathCol("degree", "ec.q.modular_degree", "Modular degree", align="center"),
     ProcessedCol("faltings_height", "ec.q.faltings_height", "Faltings height", lambda v: "%.6f"%(RealField(20)(v)), short_title="Faltings height",
                  default=lambda info: info.get("faltings_height"), mathmode=True, align="right"),
     ProcessedCol("jinv", "ec.q.j_invariant", "j-invariant", lambda v: r"$%s/%s$"%(v[0],v[1]) if v[1] > 1 else r"$%s$"%v[0],
                  short_title="j-invariant", align="center"),
     MathCol("ainvs", "ec.weierstrass_coeffs", "Weierstrass coefficients", short_title="Weierstrass coeffs", align="left"),
     ProcessedCol("equation", "ec.q.minimal_weierstrass_equation", "Weierstrass equation", latex_equation, default=True, short_title="Weierstrass equation", align="left", orig="ainvs"),
])
Beispiel #10
0
g2c_columns = SearchColumns([
    LinkCol("label", "g2c.label", "Label", url_for_curve_label, default=True),
    ProcessedLinkCol(
        "class",
        "g2c.isogeny_class",
        "Class",
        lambda v: url_for_isogeny_class_label(class_from_curve_label(v)),
        class_from_curve_label,
        default=True,
        orig="label"),
    ProcessedCol("eqn",
                 "g2c.minimal_equation",
                 "Equation",
                 lambda v: min_eqn_pretty(literal_eval(v)),
                 default=True,
                 mathmode=True),
    ProcessedCol("st_group",
                 "g2c.st_group",
                 "Sato-Tate",
                 lambda v: st_link_by_name(1, 4, v),
                 default=True,
                 align="center"),
    CheckCol("is_simple_geom",
             "ag.geom_simple",
             r"\(\overline{\Q}\)-simple",
             default=True),
    CheckCol("is_gl2_type", "g2c.gl2type", r"\(\GL_2\)", default=True),
    MathCol("analytic_rank", "g2c.analytic_rank", "Rank*", default=True)
])
Beispiel #11
0
ec_columns = SearchColumns([
    ColGroup(
        "curve_labels",
        None,
        "Curve", [
            LinkCol("lmfdb_label",
                    "ec.q.lmfdb_label",
                    "LMFDB label",
                    lambda label: url_for(".by_ec_label", label=label),
                    default=True,
                    align="center"),
            MultiProcessedCol("cremona_label",
                              "ec.q.cremona_label",
                              "Cremona label", ["Clabel", "conductor"],
                              lambda label, conductor: '<a href="%s">%s</a>' %
                              (url_for(".by_ec_label", label=label), label)
                              if conductor < CREMONA_BOUND else " - ",
                              default=True,
                              align="center")
        ],
        default=True),
    ColGroup(
        "iso_labels",
        "ec.isogeny_class",
        "Isogeny class", [
            LinkCol("lmfdb_iso",
                    "ec.q.lmfdb_label",
                    "LMFDB label",
                    lambda label: url_for(".by_ec_label", label=label),
                    default=True,
                    align="center"),
            MultiProcessedCol("cremona_iso",
                              "ec.q.cremona_label",
                              "Cremona label", ["Ciso", "conductor"],
                              lambda label, conductor: '<a href="%s">%s</a>' %
                              (url_for(".by_ec_label", label=label), label)
                              if conductor < CREMONA_BOUND else " - ",
                              default=True,
                              align="center")
        ],
        default=True),
    MathCol("ainvs",
            "ec.weierstrass_coeffs",
            "Weierstrass coefficients",
            default=True,
            align="left"),
    MultiProcessedCol("disc",
                      "ec.discriminant",
                      "Discriminant", ["signD", "absD"],
                      lambda s, a: f"+{a}" if s == 1 else "-{a}",
                      contingent=lambda info: info.get("discriminant"),
                      default=True,
                      mathmode=True,
                      align="center"),
    ProcessedCol("faltings_height",
                 "ec.q.faltings_height",
                 "Faltings height",
                 RealField(20),
                 contingent=lambda info: info.get("faltings_height"),
                 default=True,
                 align="center"),
    MathCol("rank", "ec.rank", "Rank", default=True),
    ProcessedCol("torsion_structure",
                 "ec.torsion_subgroup",
                 "Torsion",
                 lambda tors: f"${tors}$" if tors else "trivial",
                 default=True,
                 align="center"),
    SearchCol("cm",
              "ec.complex_multiplication",
              "CM disc",
              contingent=lambda info: info.get("cm") == "CM" or "," in info.
              get("cm", ""),
              default=True,
              align="center"),
    ProcessedCol("nonmax_primes",
                 "ec.maximal_elladic_galois_rep",
                 "Nonmax primes",
                 lambda primes: ",".join(str(p) for p in primes),
                 contingent=lambda info: info.get("nonmax_primes"),
                 default=True,
                 mathmode=True,
                 align="center"),
    ProcessedCol("elladic_images",
                 "ec.galois_rep_elladic_image",
                 "Galois images",
                 ",".join,
                 contingent=lambda info: info.get("galois_image"),
                 default=True,
                 align="center"),
    MathCol("num_int_pts",
            "ec.q.integral_points",
            "Integral points",
            contingent=lambda info: info.get("num_int_pts"),
            default=True,
            align="center")
],
                           tr_class=["bottom-align", ""])
Beispiel #12
0
        return hilbert_modular_form_by_label(lab)
    except ValueError:
        return redirect(url_for(".hilbert_modular_form_render_webpage"))


hmf_columns = SearchColumns([
    MultiProcessedCol(
        "label",
        "mf.hilbert.label",
        "Label", ["field_label", "label", "short_label"],
        lambda fld, label, short: '<a href="%s">%s</a>' % (url_for(
            'hmf.render_hmf_webpage', field_label=fld, label=label), short),
        default=True),
    ProcessedCol("field_label",
                 "nf",
                 "Base field",
                 lambda fld: nf_display_knowl(fld, field_pretty(fld)),
                 default=True),
    ProcessedCol("level_ideal",
                 "mf.hilbert.level_norm",
                 "Level",
                 teXify_pol,
                 mathmode=True,
                 default=True),
    MathCol("dimension", "mf.hilbert.dimension", "Dimension", default=True)
])
hmf_columns.dummy_download = True


@search_wrap(table=db.hmf_forms,
             title='Hilbert modular form search results',
Beispiel #13
0
g2c_columns = SearchColumns([
    LinkCol("label", "g2c.label", "Label", url_for_curve_label, default=True),
    ProcessedLinkCol("class", "g2c.isogeny_class", "Class", lambda v: url_for_isogeny_class_label(class_from_curve_label(v)), class_from_curve_label, default=True, orig="label"),
    ProcessedCol("cond", "g2c.conductor", "Conductor", lambda v: web_latex(factor(v)), align="center", default=True),
    MultiProcessedCol("disc", "ec.discriminant", "Discriminant", ["disc_sign", "abs_disc"], lambda s, a: web_latex_factored_integer(s*ZZ(a)),
                      default=lambda info: info.get("abs_disc"), align="center"),

    MathCol("analytic_rank", "g2c.analytic_rank", "Rank*", default=True),
    MathCol("two_selmer_rank", "g2c.two_selmer_rank", "2-Selmer rank"),
    ProcessedCol("torsion_subgroup", "g2c.torsion", "Torsion",
                 lambda tors: r"\oplus".join([r"\Z/%s\Z"%n for n in literal_eval(tors)]) if tors != "[]" else r"\mathsf{trivial}",
                 default=True, mathmode=True, align="center"),
    ProcessedCol("geom_end_alg", "g2c.geom_end_alg", r"$\textrm{End}^0(J_{\overline\Q})$", lambda v: r"\(%s\)"%geom_end_alg_name(v),
                 short_title="Qbar-end algebra", default=True, align="center"),
    ProcessedCol("end_alg", "g2c.end_alg", r"$\textrm{End}^0(J)$", lambda v: r"\(%s\)"%end_alg_name(v), short_title="Q-end algebra", align="center"),
    CheckCol("is_gl2_type", "g2c.gl2type", r"$\GL_2\textsf{-type}$", short_title="GL2-type"),
    ProcessedCol("st_label", "g2c.st_group", "Sato-Tate", st_display_knowl, short_title='Sato-Tate group', align="center"),
    CheckCol("is_simple_base", "ag.simple", r"$\Q$-simple", short_title="Q-simple"),
    CheckCol("is_simple_geom", "ag.geom_simple", r"\(\overline{\Q}\)-simple", short_title="Qbar-simple"),
    MathCol("aut_grp_tex", "g2c.aut_grp", r"\(\Aut(X)\)", short_title="Q-automorphisms"),
    MathCol("geom_aut_grp_tex", "g2c.geom_aut_grp", r"\(\Aut(X_{\overline{\Q}})\)", short_title="Qbar-automorphisms"),
    MathCol("num_rat_pts", "g2c.all_rational_points", r"$\Q$-points", short_title="Q-points*"),
    MathCol("num_rat_wpts", "g2c.num_rat_wpts",  r"$\Q$-Weierstrass points", short_title="Q-Weierstrass points"),
    CheckCol("locally_solvable", "g2c.locally_solvable", "Locally solvable"),
    CheckCol("has_square_sha", "g2c.analytic_sha", "Square ле*"),
    MathCol("analytic_sha", "g2c.analytic_sha", "Analytic ле*"),
    ProcessedCol("tamagawa_product", "g2c.tamagawa", "Tamagawa", lambda v: web_latex(factor(v)), short_title="Tamagawa product", align="center"),
    ProcessedCol("regulator", "g2c.regulator", "Regulator", lambda v: r"\(%.6f\)"%v, align="right"),
    ProcessedCol("real_period", "g2c.real_period", "Real period", lambda v: r"\(%.6f\)"%v, align="right"),
    ProcessedCol("leading_coeff", "g2c.bsd_invariants", "Leading coefficient", lambda v: r"\(%.6f\)"%v, align="right"),
    ProcessedCol("igusa_clebsch_inv", "g2c.igusa_clebsch_invariants", "Igusa-Clebsch invariants", lambda v: v.replace("'",""), short_title="Igusa-Clebsch invariants", mathmode=True),
    ProcessedCol("igusa_inv", "g2c.igusa_invariants", "Igusa invariants", lambda v: v.replace("'",""), short_title="Igusa invariants", mathmode=True),
    ProcessedCol("g2_inv", "g2c.g2_invariants", "G2-invariants", lambda v: v.replace("'",""), short_title="G2-invariants", mathmode=True),
    ProcessedCol("eqn", "g2c.minimal_equation", "Equation", lambda v: min_eqn_pretty(literal_eval(v)), default=True, mathmode=True),
])
Beispiel #14
0
                       label.split('-')
                   )))

bmf_columns = SearchColumns([
    ProcessedCol("field_label", "nf", "Base field",
                 lambda fld: nf_display_knowl(fld, field_pretty(fld)),
                 default=True),
    MultiProcessedCol("level", "mf.bianchi.level", "Level", ["field_label", "level_label"],
                      lambda fld, lvl: '<a href="{}">{}</a>'.format(
                          url_for("bmf.render_bmf_space_webpage",
                                  field_label=fld,
                                  level_label=lvl),
                          lvl),
                      default=True), # teXify_pol(v['level_ideal'])
    MultiProcessedCol("label", "mf.bianchi.labels", "Label", ["field_label", "level_label", "label_suffix", "short_label"],
                      lambda fld, lvl, suff, short: '<a href="{}">{}</a>'.format(
                          url_for("bmf.render_bmf_webpage",
                                  field_label=fld,
                                  level_label=lvl,
                                  label_suffix=suff),
                          short),
                      default=True),
    MathCol("dimension", "mf.bianchi.newform", "Dimension", default=True),
    ProcessedCol("sfe", "mf.bianchi.sign", "Sign",
                 lambda v: "$+1$" if v == 1 else ("$-1$" if v == -1 else "?"),
                 default=True, align="center"),
    ProcessedCol("bc", "mf.bianchi.base_change", "Base change", bc_info, default=True, align="center"),
    ProcessedCol("CM", "mf.bianchi.cm", "CM", cm_info, default=True, align="center")])

bmf_columns.dummy_download = True
Beispiel #15
0
artin_columns = SearchColumns([
    SearchCol("galois_links", "artin.label", "Label", default=True),
    MathCol("dimension", "artin.dimension", "Dimension", default=True),
    MathCol("factored_conductor_latex",
            "artin.conductor",
            "Conductor",
            default=True),
    MathCol("num_ramps", "artin.ramified_primes", "Ramified prime count"),
    SearchCol("field_knowl",
              "artin.stem_field",
              "Artin stem field",
              default=True,
              short_title="Artin stem field"),
    SearchCol("pretty_galois_knowl",
              "artin.gg_quotient",
              "$G$",
              default=True,
              align="center",
              short_title="image"),
    SearchCol("projective_group",
              "artin.projective_image",
              "Projective image",
              align="center"),
    SearchCol("container",
              "artin.permutation_container",
              "Container",
              align="center"),
    MathCol("indicator",
            "artin.frobenius_schur_indicator",
            "Ind",
            default=True,
            short_title="indicator"),
    MathCol("trace_complex_conjugation",
            "artin.trace_of_complex_conj",
            r"$\chi(c)$",
            default=True,
            short_title="trace of complex conj.")
], [
    "Baselabel", "GaloisConjugates", "Dim", "Conductor", "BadPrimes", "NFGal",
    "GaloisLabel", "Indicator", "Is_Even", "Container", "NumBadPrimes",
    "Proj_GAP", "Proj_nTj"
])
Beispiel #16
0
def display_galois_orbit(orbit, modulus):
    trunc = (len(orbit) > 5)
    if trunc:
        orbit = [orbit[0], orbit[-1]]
    disp = [r'<a href="{0}/{1}">\(\chi_{{{0}}}({1}, \cdot)\)</a>'.format(modulus, o) for o in orbit]
    if trunc:
        disp = r"$, \cdots ,$".join(disp)
    else:
        disp = "$,$&nbsp".join(disp)
    return f'<p style="margin-top: 0px;margin-bottom:0px;">\n{disp}\n</p>'

character_columns = SearchColumns([
    LinkCol("label", "character.dirichlet.galois_orbit_label", "Orbit label", lambda label: label.replace(".", "/"), default=True, align="center"),
    MultiProcessedCol("conrey", "character.dirichlet.conrey'", "Conrey labels", ["galois_orbit", "modulus"],
                      display_galois_orbit, default=True, align="center"),
    MathCol("modulus", "character.dirichlet.modulus", "Modulus", default=True),
    MathCol("conductor", "character.dirichlet.conductor", "Conductor", default=True),
    MathCol("order", "character.dirichlet.order", "Order", default=True),
    ProcessedCol("parity", "character.dirichlet.primitive", "Parity", lambda parity: "even" if parity == 1 else "odd", default=True),
    CheckCol("is_primitive", "character.dirichlet.primitive", "Primitive", default=True)])

character_columns.dummy_download = True

@search_wrap(
    table=db.char_dir_orbits,
    title="Dirichlet character search results",
    err_title="Dirichlet character search input error",
    columns=character_columns,
    shortcuts={"jump": jump},
    url_for_label=url_for_label,
    learnmore=learn,
Beispiel #17
0
    elif label.count("-") == 2: # galmap label length
        labels = [label, "-".join(label.split("-")[:-1]), label]
        label_cols = ["label", "plabel", "label"]
        tables = ["belyi_galmaps_fixed", "belyi_passports_fixed", "belyi_galmap_portraits"]
    else:
        return abort(404, f"Invalid label {label}")
    return datapage(labels, tables, title=f"Belyi map data - {label}", bread=bread, label_cols=label_cols)

def url_for_label(label):
    return url_for(".by_url_belyi_search_url", smthorlabel=label)

belyi_columns = SearchColumns([
    LinkCol("label", "belyi.label", "Label", url_for_belyi_galmap_label, default=True),
    MathCol("deg", "belyi.degree", "Degree", default=True),
    SearchCol("group", "belyi.group", "Group", default=True),
    MathCol("abc", "belyi.abc", "abc", default=True, align="left", short_title="abc triple"),
    MathCol("lambdas", "belyi.ramification_type", "Ramification type", default=True, align="left"),
    MathCol("g", "belyi.genus", "Genus", default=True),
    MathCol("orbit_size", "belyi.orbit_size", "Orbit Size", default=True),
    MultiProcessedCol("field", "belyi.base_field", "Base field", ["base_field_label", "base_field"], lambda label, disp: field_display_gen(label, disp, truncate=16), default=True)])


@search_wrap(
    table=db.belyi_galmaps_fixed,
    title="Belyi map search results",
    err_title="Belyi map search input error",
    columns=belyi_columns,
    shortcuts={"jump": belyi_jump, "download": Belyi_download()},
    url_for_label=url_for_label,
    bread=lambda: get_bread("Search results"),
    learnmore=learnmore_list,
Beispiel #18
0
ecnf_columns = SearchColumns([
    MultiProcessedCol(
        "label",
        "ec.curve_label",
        "Label", [
            "short_label", "field_label", "conductor_label", "iso_label",
            "number"
        ],
        lambda label, field, conductor, iso, number: '<a href="%s">%s</a>' %
        (url_for('.show_ecnf',
                 nf=field,
                 conductor_label=conductor,
                 class_label=iso,
                 number=number), label),
        default=True,
        align="center"),
    ProcessedCol("field_label",
                 "nf",
                 "Base field",
                 lambda field: nf_display_knowl(field, field_pretty(field)),
                 default=True,
                 align="center"),
    MultiProcessedCol(
        "conductor",
        "ec.conductor_label",
        "Conductor", ["field_label", "conductor_label"],
        lambda field, conductor: '<a href="%s">%s</a>' %
        (url_for('.show_ecnf_conductor', nf=field, conductor_label=conductor),
         conductor),
        default=True,
        align="center"),
    MultiProcessedCol(
        "iso_class",
        "ec.isogeny_class",
        "Isogeny class",
        ["field_label", "conductor_label", "iso_label", "short_class_label"],
        lambda field, conductor, iso, short_class_label: '<a href="%s">%s</a>'
        % (url_for('.show_ecnf_isoclass',
                   nf=field,
                   conductor_label=conductor,
                   class_label=iso), short_class_label),
        default=True,
        align="center"),
    MultiProcessedCol(
        "ainvs", "ec.weierstrass_coeffs", "Weierstrass coefficients",
        ["field_label", "conductor_label", "iso_label", "number", "ainvs"],
        lambda field, conductor, iso, number, ainvs: '<a href="%s">%s</a>' %
        (url_for('.show_ecnf',
                 nf=field,
                 conductor_label=conductor,
                 class_label=iso,
                 number=number), web_ainvs(field, ainvs)))
])
Beispiel #19
0
def url_for_label(label):
    return url_for(".render_artin_representation_webpage", label=label)


artin_columns = SearchColumns([
    SearchCol("galois_links", "artin.label", "Label", default=True),
    MathCol("dimension", "artin.dimension", "Dimension", default=True),
    MathCol("factored_conductor_latex",
            "artin.conductor",
            "Conductor",
            default=True),
    SearchCol(
        "field_knowl", "artin.stem_field", "Artin stem field", default=True),
    SearchCol("pretty_galois_knowl",
              "artin.gg_quotient",
              "$G$",
              default=True,
              align="center"),
    MathCol(
        "indicator", "artin.frobenius_schur_indicator", "Ind", default=True),
    MathCol("trace_complex_conjugation",
            "artin.trace_of_complex_conj",
            r"$\chi(c)$",
            default=True)
], [
    "Baselabel", "GaloisConjugates", "Dim", "Conductor", "BadPrimes", "NFGal",
    "GaloisLabel", "Indicator", "Is_Even"
])

artin_columns.above_table = "<div>Galois conjugate representations are grouped into single lines.</div>"
artin_columns.dummy_download = True
Beispiel #20
0
hgm_columns = SearchColumns([
    MultiProcessedCol(
        "label",
        None,
        "Label", ["A", "B", "t"],
        lambda A, B, t: '<a href="%s">%s</a>' %
        (url_for('.by_family_label', label=ab_label(A, B))
         if t is None else url_for('.by_label',
                                   label=ab_label(A, B),
                                   t=make_t_label(t)), ab_label(A, B)
         if t is None else make_abt_label(A, B, t)),
        default=True),
    MathCol("A", None, "$A$", default=True),
    MathCol("B", None, "$B$", default=True),
    ProcessedCol("t",
                 None,
                 "$t$",
                 display_t,
                 contingent=lambda info: info["search_type"] == "Motive",
                 default=True,
                 mathmode=True,
                 align="center"),
    ProcessedCol("cond",
                 None,
                 "Conductor",
                 factorint,
                 contingent=lambda info: info["search_type"] == "Motive",
                 default=True,
                 mathmode=True,
                 align="center"),
    MathCol("degree", None, "Degree", default=True),
    MathCol("weight", None, "Weight", default=True),
    MathCol("famhodge", None, "Hodge", default=True)
])
Beispiel #21
0
@search_parser(clean_info=True, prep_ranges=True)
def parse_group_order(inp, query, qfield, parse_singleton=int):
    if LIST_RE.match(inp):
        collapse_ors(parse_range2_extend(inp, qfield, parse_singleton), query)
    else:
        raise ValueError("It needs to be an integer (such as 25), \
                    a range of integers (such as 2-10 or 2..10), \
                    a linear function of variable g for genus (such as 84(g-1), 84g-84, 84g, or g-1), \
                    or a comma-separated list of these (such as 4,9,16 or 4-25, 81-121).")

hgcwa_columns = SearchColumns([
    LinkCol("passport_label", "dq.curve.highergenus.aut.label", "Refined passport label",
            lambda label: f"/HigherGenus/C/Aut/{label}",
            default=True),
    MathCol("genus", "ag.curve.genus", "Genus", default=True),
    MathCol("g0", "curve.highergenus.aut.quotientgenus", "Quotient genus"),
    ProcessedCol("group", "group.small_group_label", "Group", group_display, mathmode=True, align="center", default=True),
    MathCol("group_order", "group.order", "Group order", default=True),
    MathCol("dim", "curve.highergenus.aut.dimension", "Dimension", default=True),
    ProcessedCol("signature", "curve.highergenus.aut.signature", "Signature", lambda sig: sign_display(ast.literal_eval(sig)), default=True, mathmode=True)])
hgcwa_columns.languages = ['gap', 'magma']

@search_wrap(
    table=db.hgcwa_passports,
    title='Family of higher genus curves with automorphisms search results',
    err_title='Family of higher genus curves with automorphisms search input error',
    columns=hgcwa_columns,
    per_page=50,
    url_for_label=url_for_label,
    random_projection="passport_label",
    shortcuts={'jump': higher_genus_w_automorphisms_jump,
Beispiel #22
0
hmf_columns = SearchColumns([
    MultiProcessedCol(
        "label",
        "mf.hilbert.label",
        "Label", ["field_label", "label", "short_label"],
        lambda fld, label, short: '<a href="%s">%s</a>' % (url_for(
            'hmf.render_hmf_webpage', field_label=fld, label=label), short),
        default=True),
    ProcessedCol("field_label",
                 "nf",
                 "Base field",
                 lambda fld: nf_display_knowl(fld, field_pretty(fld)),
                 default=True),
    MathCol("deg", "nf.degree", "Field degree"),
    MathCol("disc", "nf.discriminant", "Field discriminant"),
    ProcessedCol("level_ideal",
                 "mf.hilbert.level_norm",
                 "Level",
                 teXify_pol,
                 mathmode=True,
                 default=True),
    MathCol("level_norm", "mf.level_norm", "Level norm"),
    MathCol("weight", "mf.hilbert.weight_vector", "Weight"),
    MathCol("dimension", "mf.hilbert.dimension", "Dimension", default=True),
    ProcessedCol("is_CM",
                 "mf.cm",
                 "CM",
                 lambda cm: "&#x2713;" if cm == "yes" else "",
                 align="center"),
    ProcessedCol("is_base_change",
                 "mf.base_change",
                 "Base change",
                 lambda bc: "&#x2713;" if bc == "yes" else "",
                 align="center")
])
Beispiel #23
0
g2c_columns = SearchColumns([
    LinkCol("label", "g2c.label", "Label", url_for_curve_label, default=True),
    ProcessedLinkCol(
        "class",
        "g2c.isogeny_class",
        "Class",
        lambda v: url_for_isogeny_class_label(class_from_curve_label(v)),
        class_from_curve_label,
        default=True,
        orig="label"),
    ProcessedCol("eqn",
                 "g2c.minimal_equation",
                 "Equation",
                 lambda v: min_eqn_pretty(literal_eval(v)),
                 default=True,
                 mathmode=True),
    ProcessedCol("st_group",
                 "g2c.st_group",
                 "Sato-Tate",
                 lambda v: st_link_by_name(1, 4, v),
                 default=True,
                 align="center"),
    ProcessedCol("end_alg",
                 "g2c.end_alg",
                 r"\(\Q\)-end algebra",
                 lambda v: r"\(%s\)" % end_alg_name(v),
                 short_title="Q-end algebra",
                 align="center"),
    ProcessedCol("geom_end_alg",
                 "g2c.geom_end_alg",
                 r"\(\overline{\Q}\)-end algebra",
                 lambda v: r"\(%s\)" % geom_end_alg_name(v),
                 short_title="Qbar-end algebra",
                 align="center"),
    CheckCol("is_simple_base",
             "ag.simple",
             r"\(\Q\)-simple",
             short_title="Q-simple"),
    CheckCol("is_simple_geom",
             "ag.geom_simple",
             r"\(\overline{\Q}\)-simple",
             short_title="Qbar-simple",
             default=True),
    CheckCol("is_gl2_type",
             "g2c.gl2type",
             r"\(\GL_2\)-type",
             short_title="GL2-type",
             default=True),
    MathCol("analytic_rank", "g2c.analytic_rank", "Rank*", default=True),
    MathCol("aut_grp_tex",
            "g2c.aut_grp",
            r"\(\Aut(X)\)",
            short_title="Q-Automorphisms"),
    MathCol("geom_aut_grp_tex",
            "g2c.geom_aut_grp",
            r"\(\Aut(X_{\overline{\Q}})\)",
            short_title="Qbar-Automorphisms"),
    CheckCol("locally_solvable", "g2c.locally_solvable", "Locally solvable"),
    MathCol("num_rat_pts", "g2c.all_rational_points", "Q-points*"),
    MathCol("num_rat_wpts", "g2c.num_rat_wpts", "Q-Weierstrass pts"),
    CheckCol("has_square_sha", "g2c.analytic_sha", "Square ле*"),
    MathCol("analytic_sha", "g2c.analytic_sha", "Analytic ле*"),
    ProcessedCol("torsion_subgroup",
                 "g2c.torsion",
                 "Torsion subgroup",
                 lambda v: "trivial" if v == "[]" else r"\(%s\)" % v,
                 align="center"),
    MathCol("two_selmer_rank", "g2c.two_selmer_rank", "2-Selmer rank"),
    MathCol("tamagawa_product", "g2c.tamagawa", "Tamagawa product"),
    ProcessedCol("regulator",
                 "g2c.regulator",
                 "Regulator",
                 lambda v: r"\(%.6f\)" % v,
                 align="right"),
    ProcessedCol("real_period",
                 "g2c.real_period",
                 "Real period",
                 lambda v: r"\(%.6f\)" % v,
                 align="right"),
    ProcessedCol("leading_coeff",
                 "g2c.bsd_invariants",
                 "Leading coeff",
                 lambda v: r"\(%.6f\)" % v,
                 align="right"),
])