diff --git a/lmfdb/modular_curves/templates/modcurve.html b/lmfdb/modular_curves/templates/modcurve.html index d46381c1a2..f447112e68 100644 --- a/lmfdb/modular_curves/templates/modcurve.html +++ b/lmfdb/modular_curves/templates/modcurve.html @@ -8,185 +8,260 @@

{{ KNOWL('modcurve.invariants', 'Invariants') }}

- {% if curve.genus > 0 %}{% endif %} - - - - + + + + + + {% if curve.genus > 0 %} + + + {% endif %} + + + + + + + + + + + + + + + + + + + {% if curve.genus > 0 %} - + + + + {% endif %} - - - - + + + + + + + + + + + + + + + +
{{ KNOWL("modcurve.level", "Level") }}: ${{ curve.level }}$ {{ KNOWL("modcurve.sl2level", "$\SL_2$-level") }}:${{ curve.sl2level }}${{ KNOWL("modcurve.newform_level", "Newform level:") }}${{ curve.newform_level }}$
{{ KNOWL("modcurve.index", "Index") }}: ${{ curve.index }}$ {{ KNOWL("modcurve.psl2index", "$\PSL_2$-index") }}:${{ curve.psl2index }}$
{{ KNOWL("modcurve.genus", "Genus") }}: ${{ curve.genus }} = 1 + \frac{ {{curve.psl2index}} }{12} - \frac{ {{curve.nu2}} }{4} - \frac{ {{curve.nu3}} }{3} - \frac{ {{curve.cusps}} }{2}$
{{ KNOWL("modcurve.cusps", "Cusps") }}: {{ curve.cusps_display }}{{ KNOWL("modcurve.cusp_widths", "Cusp widths") }}{{ curve.cusp_widths_display }}{{ KNOWL("modcurve.cusp_orbits", "Cusp orbits") }}{{ curve.cusp_orbits_display }}
{{ KNOWL("modcurve.elliptic_points", "Elliptic points") }}: ${{curve.nu2}}$ of order $2$ and ${{curve.nu3}}$ of order $3$
{{ KNOWL("modcurve.level", "Level") }}: ${{ curve.level }}$ {{ KNOWL("modcurve.sl2level", "$\SL_2$-level") }}:${{ curve.sl2level }}${{ KNOWL("modcurve.newform_level", "Newform level:") }}${{ curve.newform_level }}$
{{ KNOWL("modcurve.index", "Index") }}: ${{ curve.index }}$ {{ KNOWL("modcurve.psl2index", "$\PSL_2$-index") }}:${{ curve.psl2index }}$
{{ KNOWL("modcurve.genus", "Genus") }}: ${{ curve.genus }} = 1 + \frac{ {{curve.psl2index}} }{12} - \frac{ {{curve.nu2}} }{4} - \frac{ {{curve.nu3}} }{3} - \frac{ {{curve.cusps}} }{2}$
{{ KNOWL("modcurve.cusps", "Cusps") }}: {{ curve.cusps_display }}{{ KNOWL("modcurve.cusp_widths", "Cusp widths") }}{{ curve.cusp_widths_display }}{{ KNOWL("modcurve.cusp_orbits", "Cusp orbits") }}{{ curve.cusp_orbits_display }}
{{ KNOWL("modcurve.elliptic_points", "Elliptic points") }}: ${{curve.nu2}}$ of order $2$ and ${{curve.nu3}}$ of order $3$
{{ KNOWL('modcurve.rank', 'Analytic rank') }}: {% if curve.rank is not none %} ${{ curve.rank }}$ {% else %} not computed {% endif %}
{{ KNOWL('modcurve.rank', 'Analytic rank') }}: {% if curve.rank is not none %} ${{ curve.rank }}$ {% else %} not computed {% endif %}
{{ KNOWL("modcurve.gonality", "$\Q$-gonality")}}: ${{ curve.q_gonality if curve.q_gonality else "%s \\le \\gamma \\le %s"%(curve.q_gonality_bounds[0],curve.q_gonality_bounds[1]) }}$
{{ KNOWL("modcurve.gonality", "$\overline{\Q}$-gonality")}}: ${{ curve.qbar_gonality if curve.qbar_gonality else "%s \\le \\gamma \\le %s"%(curve.qbar_gonality_bounds[0],curve.qbar_gonality_bounds[1]) }}$
{{ KNOWL("modcurve.cusps", "Rational cusps") }}: ${{ curve.rational_cusps }}$
{{ KNOWL("modcurve.cm_discriminants", "Rational CM points") }}: {{ "yes $\quad(D =$ $%s$)"%(curve.cm_discriminant_list) if curve.cm_discriminants else "none" }}
{{ KNOWL("modcurve.gonality", "$\Q$-gonality")}}: ${{ curve.q_gonality if curve.q_gonality else "%s \\le \\gamma \\le %s"%(curve.q_gonality_bounds[0],curve.q_gonality_bounds[1]) }}$
{{ KNOWL("modcurve.gonality", "$\overline{\Q}$-gonality")}}: ${{ curve.qbar_gonality if curve.qbar_gonality else "%s \\le \\gamma \\le %s"%(curve.qbar_gonality_bounds[0],curve.qbar_gonality_bounds[1]) }}$
{{ KNOWL("modcurve.cusps", "Rational cusps") }}: ${{ curve.rational_cusps }}$
{{ KNOWL("modcurve.cm_discriminants", "Rational CM points") }}: {{ "yes $\quad(D =$ $%s$)"%(curve.cm_discriminant_list) if curve.cm_discriminants else "none" }}
{% if curve.CPlabel or curve.SZlabel or curve.RZBlabel or curve.RSZBlabel or curve.Slabel %} -

{{ KNOWL('modcurve.other_labels', 'Other labels') }}

- - - {% if curve.CPlabel %} - - {% endif %} - {% if curve.SZlabel %} - - {% endif %} - {% if curve.RZBlabel %} - - {% endif %} - {% if curve.RSZBlabel %} - - {% endif %} - {% if curve.Slabel %} - - {% endif %} -
{{ KNOWL('modcurve.other_labels', 'Cummins and Pauli (CP) label') }}:{{curve.CPlabel}}
{{ KNOWL('modcurve.other_labels', 'Sutherland and Zywina (SZ) label') }}:{{curve.SZlabel}}
{{ KNOWL('modcurve.other_labels', 'Rouse and Zureick-Brown (RZB) label') }}:{{curve.RZBlabel}}
{{ KNOWL('modcurve.other_labels', 'Rouse, Sutherland, and Zureick-Brown (RSZB) label') }}:{{curve.RSZBlabel}}
{{ KNOWL('ec.galois_rep_modell_image', 'Sutherland (S) label') }}:{{curve.Slabel}}
+

{{ KNOWL('modcurve.other_labels', 'Other labels') }}

+ + {% if curve.CPlabel %} + + + + + {% endif %} + {% if curve.SZlabel %} + + + + + {% endif %} + {% if curve.RZBlabel %} + + + + + {% endif %} + {% if curve.RSZBlabel %} + + + + + {% endif %} + {% if curve.Slabel %} + + + + + {% endif %} +
{{ KNOWL('modcurve.other_labels', 'Cummins and Pauli (CP) label') }}:{{curve.CPlabel}}
{{ KNOWL('modcurve.other_labels', 'Sutherland and Zywina (SZ) label') }}:{{curve.SZlabel}}
{{ KNOWL('modcurve.other_labels', 'Rouse and Zureick-Brown (RZB) label') }}:{{curve.RZBlabel}}
{{ KNOWL('modcurve.other_labels', 'Rouse, Sutherland, and Zureick-Brown (RSZB) label') }}:{{curve.RSZBlabel}}
{{ KNOWL('ec.galois_rep_modell_image', 'Sutherland (S) label') }}:{{curve.Slabel}}
{% endif %} {% if curve.level != 1 %} -

{{ KNOWL('modcurve.level_structure', 'Level structure') }}

+

{{ KNOWL('modcurve.level_structure', 'Level structure') }}

- - - {% if curve.Glabel %} - - {% endif %} - - {% if curve.contains_negative_one %} - - {% endif %} - - - -
{{ KNOWL('modcurve.level_structure', '$\GL_2(\Z/%s\Z)$-generators'%(curve.level)) }}:{{ curve.show_generators()}}
{{ KNOWL('modcurve.level_structure', '$\GL_2(\Z/%s\Z)$-subgroup'%(curve.level)) }}:{{ curve.show_subgroup() | safe}}
{{ KNOWL('modcurve.contains_negative_one', 'Contains $-I$') }}: {{ curve.coarse_description | safe }}
{{ KNOWL('modcurve.quadratic_refinements', 'Quadratic refinements') }}: {{ curve.quadratic_refinements | safe }}
{{ KNOWL('modcurve.level_structure', 'Cyclic '+(curve.level|string)+'-isogeny field degree') }}:${{ curve.cyclic_isogeny_field_degree() }}$
{{ KNOWL('modcurve.level_structure', 'Cyclic '+(curve.level|string)+'-torsion field degree') }}:${{ curve.cyclic_torsion_field_degree() }}$
{{ KNOWL('modcurve.level_structure', 'Full '+(curve.level|string)+'-torsion field degree') }}:${{ curve.full_torsion_field_degree() }}$
+ + + + + + {% if curve.Glabel %} + + + + + {% endif %} + + + + + {% if curve.contains_negative_one %} + + + + + {% endif %} + + + + + + + + + + + + +
{{ KNOWL('modcurve.level_structure', '$\GL_2(\Z/%s\Z)$-generators'%(curve.level)) }}:{{ curve.show_generators()}}
{{ KNOWL('modcurve.level_structure', '$\GL_2(\Z/%s\Z)$-subgroup'%(curve.level)) }}:{{ curve.show_subgroup() | safe}}
{{ KNOWL('modcurve.contains_negative_one', 'Contains $-I$') }}: {{ curve.coarse_description | safe }}
{{ KNOWL('modcurve.quadratic_refinements', 'Quadratic refinements') }}: {{ curve.quadratic_refinements | safe }}
{{ KNOWL('modcurve.level_structure', 'Cyclic '+(curve.level|string)+'-isogeny field degree') }}:${{ curve.cyclic_isogeny_field_degree() }}$
{{ KNOWL('modcurve.level_structure', 'Cyclic '+(curve.level|string)+'-torsion field degree') }}:${{ curve.cyclic_torsion_field_degree() }}$
{{ KNOWL('modcurve.level_structure', 'Full '+(curve.level|string)+'-torsion field degree') }}:${{ curve.full_torsion_field_degree() }}$
{% endif %} {% if curve.genus > 0 and curve.dims is not none %} -

{{ KNOWL('ag.jacobian', 'Jacobian') }}

+

{{ KNOWL('ag.jacobian', 'Jacobian') }}

- - - - - - - - - - - - -
{{ KNOWL('ag.conductor', 'Conductor') }}: ${{ curve.factored_conductor }}$
- {{ KNOWL('av.simple', 'Simple') }}: - - {% if curve.simple %} - yes - {% elif curve.simple is not none %} - no - {% else %} - not computed - {% endif %} -
- {{ KNOWL('av.squarefree', 'Squarefree') }}: - - {% if curve.squarefree %} - yes - {% elif curve.squarefree is not none %} - no - {% else %} - not computed - {% endif %} -
{{ KNOWL('modcurve.decomposition', 'Decomposition') }}: {{ curve.formatted_dims }}
{{ KNOWL('modcurve.decomposition', 'Newforms') }}: {{ curve.formatted_newforms | safe }}
+ + + + + + + + + + + + + + + + + + +
{{ KNOWL('ag.conductor', 'Conductor') }}: ${{ curve.factored_conductor }}$
{{ KNOWL('av.simple', 'Simple') }}: + {% if curve.simple %} + yes + {% elif curve.simple is not none %} + no + {% else %} + not computed + {% endif %} +
{{ KNOWL('av.squarefree', 'Squarefree') }}: + {% if curve.squarefree %} + yes + {% elif curve.squarefree is not none %} + no + {% else %} + not computed + {% endif %} +
{{ KNOWL('modcurve.decomposition', 'Decomposition') }}: {{ curve.formatted_dims }}
{{ KNOWL('modcurve.decomposition', 'Newforms') }}: {{ curve.formatted_newforms | safe }}
{% endif %} {% set models = curve.formatted_models %} {% if models or (curve.genus == 0 and not curve.pointless) or curve.has_more_models %} -

{{ KNOWL('modcurve.model', 'Models') }}

-{% if models %} - -{% for lines, nb_var, type, smooth in models %} -{% if type == 0 %} -

{{ KNOWL('ag.canonical_model', 'Canonical model') }} in $\mathbb{P}^{ {{nb_var-1}} }$:

-{% elif type == 2 %} -

{% if smooth == True %} - {{ KNOWL('modcurve.plane_model', 'Smooth plane model') }}: - {% elif smooth == False %} - {{ KNOWL('modcurve.plane_model', 'Singular plane model') }}: - {% else %} - {{ KNOWL('modcurve.plane_model', 'Plane model') }}: - {% endif %} -

-{% elif type == 5 %} -

{% if curve.genus == 1 %} - {{ KNOWL('ec.weierstrass_coeffs', 'Weierstrass model') }}: - {% else %} - {{ KNOWL('ag.hyperelliptic_curve', 'Weierstrass model') }}: +

{{ KNOWL('modcurve.model', 'Models') }}

+ {% if models %} + + {% for lines, nb_var, type, smooth in models %} + {% if type == 0 %} +

{{ KNOWL('ag.canonical_model', 'Canonical model') }} in $\mathbb{P}^{ {{nb_var-1}} }$:

+ {% elif type == 2 %} +

{% if smooth == True %} + {{ KNOWL('modcurve.plane_model', 'Smooth plane model') }}: + {% elif smooth == False %} + {{ KNOWL('modcurve.plane_model', 'Singular plane model') }}: + {% else %} + {{ KNOWL('modcurve.plane_model', 'Plane model') }}: + {% endif %} +

+ {% elif type == 5 %} +

{% if curve.genus == 1 %} + {{ KNOWL('ec.weierstrass_coeffs', 'Weierstrass model') }}: + {% else %} + {{ KNOWL('ag.hyperelliptic_curve', 'Weierstrass model') }}: + {% endif %} +

+ {% elif type == 7 %} +

{{ KNOWL('ag.hyperelliptic_curve', 'Geometric Weierstrass model') }}:

+ {% elif type == 8 %} +

{{ KNOWL('modcurve.embedded_model', 'Embedded model') }} in $\mathbb{P}^{ {{nb_var-1}} } $:

+ {% endif %} + + + + + + + {% if type == 7 %} + + + + + + {% elif lines|length < 7 %} + {% for line in lines[2:] %} + + + + + + {% endfor %} + {% else %} + + + + + + {% for line in lines[3:] %} + + + + + + {% endfor %} + + + + + + + + + + + {% endif %} +
$ {{ lines[0] }}$ $=$ $ {{ lines[1] }}$
${{ lines[2] }}$$=$ ${{ lines[3] }}$
$=$ ${{ line }}$
$=$ ${{ lines[2] }}$
Show {{ (lines|length) - 3 }} more equations
+ {% endfor %} + {% elif curve.genus == 0 and not curve.pointless %} +

This modular curve is isomorphic to $\mathbb{P}^1$.

{% endif %} -

-{% elif type == 7 %} -

{{ KNOWL('ag.hyperelliptic_curve', 'Geometric Weierstrass model') }}:

-{% elif type == 8 %} -

{{ KNOWL('modcurve.embedded_model', 'Embedded model') }} in $\mathbb{P}^{ {{nb_var-1}} } $:

-{% endif %} - - - - - - - {% if type == 7 %} - - - - - - {% elif lines|length < 7 %} - {% for line in lines[2:] %} - - - - - - {% endfor %} - {% else %} - - - - - - {% for line in lines[3:] %} - - - - - - {% endfor %} - - - - - - - - - - + {% if curve.has_more_models %} +

Some stored models are too large to be displayed and are available for download.

{% endif %} -
$ {{ lines[0] }}$ $=$ $ {{ lines[1] }}$
${{ lines[2] }}$$=$ ${{ lines[3] }}$
$=$ ${{ line }}$
$=$ ${{ lines[2] }}$
Show {{ (lines|length) - 3 }} more equations
-{% endfor %} -{% elif curve.genus == 0 and not curve.pointless %} -

This modular curve is isomorphic to $\mathbb{P}^1$.

-{% endif %} -{% if curve.has_more_models %} -

Some stored models are too large to be displayed and are available for download.

-{% endif %} {% endif %}

{{ KNOWL('modcurve.rational_points', 'Rational points') }}

@@ -194,25 +269,34 @@

{{ KNOWL('modcurve.rational_points', 'Rational points') }}

{{curve.rational_points_description | safe}}

{% if (curve.genus > 1 or curve.genus == 1 and curve.rank == 0) and curve.db_rational_points %} - - - {% if curve.known_degree1_points > 0 %} - {{ curve.rational_point_coord_headers |safe}} - - - {% for label, url, cm, jinv, jfac, jheight, coords in curve.db_rational_points %} - {{coords | safe}} - {% endfor %} - {% else %} - {{ curve.rational_point_coord_headers |safe}} - - - {% for label, url, cm, jinv, jfac, jheight, coords in curve.db_rational_points %} - {{coords | safe}} - {% endfor %} - {% endif %} - -
{{ KNOWL('ec.q.lmfdb_label', 'Elliptic curve') }}{{ KNOWL('ec.complex_multiplication', 'CM') }}{{ KNOWL('ec.q.j_invariant', '$j$-invariant') }}{{ KNOWL('nf.weil_height', '$j$-height') }}
{% if url %}{{label}}{% endif %}{{ cm | safe}}{{jinv | safe}}{{jfac | safe}}${{"%.3f"%jheight}}$
+ + + {% if curve.known_degree1_points > 0 %} + + + + + {{ curve.rational_point_coord_headers |safe}} + + + + {% for label, url, cm, jinv, jfac, jheight, coords in curve.db_rational_points %} + + + + {{coords | safe}} + + {% endfor %} + {% else %} + {{ curve.rational_point_coord_headers |safe}} + + + {% for label, url, cm, jinv, jfac, jheight, coords in curve.db_rational_points %} + {{coords | safe}} + {% endfor %} + {% endif %} + +
{{ KNOWL('ec.q.lmfdb_label', 'Elliptic curve') }}{{ KNOWL('ec.complex_multiplication', 'CM') }}{{ KNOWL('ec.q.j_invariant', '$j$-invariant') }}{{ KNOWL('nf.weil_height', '$j$-height') }}
{% if url %}{{label}}{% endif %}{{ cm | safe}}{{jinv | safe}}{{jfac | safe}}${{"%.3f"%jheight}}$
{% endif %} {# @@ -222,263 +306,294 @@

{{ KNOWL('modcurve.nonrational_point', 'Non-rational points') }}

{{ curve.low_degree_points_description | safe }}

{% if (curve.genus > 1 or curve.genus == 1 and curve.rank == 0) and curve.db_nf_points %} - - - {% if curve.known_low_degree_points %} - {% if not curve.contains_negative_one %}{% endif %}{{curve.nf_point_coord_headers|safe}} - - - {% for ec_label, ec_url, cm, isolated, jinv, res_field, j_field, degree, j_height, coords in curve.db_nf_points %} - {% if not curve.contains_negative_one %}{% endif %}{{coords | safe}} - {% endfor %} - {% else %} - {{curve.nf_point_coord_headers|safe}} - - - {% for ec_label, ec_url, cm, isolated, jinv, res_field, j_field, degree, j_height, coords in curve.db_nf_points %} - {{coords | safe}} - {% endfor %} - {% endif %} - -
{{ KNOWL('modcurve.point_degree', 'Degree') }}{{ KNOWL('modcurve.point_residue_field', 'Residue field') }}{{ KNOWL('ec.j_invariant', '$j$-invariant') }}{{ KNOWL('ec.j_invariant', '$\\Q(j)$') }}{{ KNOWL('nf.weil_height', '$j$-height') }}{{ KNOWL('ec.complex_multiplication', 'CM') }}{{ KNOWL('ag.isolated_point', 'Isolated') }}{{ KNOWL('ec.curve_label', 'Elliptic Curve') }}
${{degree}}${{res_field | safe}}{{jinv | safe}}{{j_field | safe}}${{"%.3f"%j_height}}${{ cm | safe}}{{isolated | safe}}{{ec_label}}
{{ KNOWL('modcurve.point_degree', 'Degree') }}{{ KNOWL('modcurve.point_residue_field', 'Residue field') }}
${{degree}}${{res_field | safe}}
+ + + {% if curve.known_low_degree_points %} + + + + + + + {% if not curve.contains_negative_one %} + + {% endif %} + {{curve.nf_point_coord_headers|safe}} + + + + {% for ec_label, ec_url, cm, isolated, jinv, res_field, j_field, degree, j_height, coords in curve.db_nf_points %} + + + + + + + + + {% if not curve.contains_negative_one %} + + {% endif %} + {{coords | safe}} + + {% endfor %} + {% else %} + + + {{curve.nf_point_coord_headers|safe}} + + + + {% for ec_label, ec_url, cm, isolated, jinv, res_field, j_field, degree, j_height, coords in curve.db_nf_points %} + + + + {{coords | safe}} + + {% endfor %} + {% endif %} + +
{{ KNOWL('modcurve.point_degree', 'Degree') }}{{ KNOWL('modcurve.point_residue_field', 'Residue field') }}{{ KNOWL('ec.j_invariant', '$j$-invariant') }}{{ KNOWL('ec.j_invariant', '$\\Q(j)$') }}{{ KNOWL('nf.weil_height', '$j$-height') }}{{ KNOWL('ec.complex_multiplication', 'CM') }}{{ KNOWL('ag.isolated_point', 'Isolated') }}{{ KNOWL('ec.curve_label', 'Elliptic Curve') }}
${{degree}}${{res_field | safe}}{{jinv | safe}}{{j_field | safe}}${{"%.3f"%j_height}}${{ cm | safe}}{{isolated | safe}}{{ec_label}}
{{ KNOWL('modcurve.point_degree', 'Degree') }}{{ KNOWL('modcurve.point_residue_field', 'Residue field') }}
${{degree}}${{res_field | safe}}
{% endif %} #} {% set modelisos = curve.formatted_modelisos %} {% if modelisos %} -

Maps between models of this curve

-{% for degree, domain_model_type, codomain_label, codomain_model_type, codomain_name, codomain_equation, coord_names, equations in modelisos %} -

Birational map from {{ curve.model_type_str(domain_model_type) }} to {{ curve.model_type_str(codomain_model_type) }}:

- - {% for coord, eq in zip(coord_names,equations) %} - - - - - +

Maps between models of this curve

+ {% for degree, domain_model_type, codomain_label, codomain_model_type, codomain_name, codomain_equation, coord_names, equations in modelisos %} +

Birational map from {{ curve.model_type_str(domain_model_type) }} to {{ curve.model_type_str(codomain_model_type) }}:

+
$\displaystyle {{ coord }}$ $=$ $\displaystyle {{ eq }}$
+ {% for coord, eq in zip(coord_names,equations) %} + + + + + + {% endfor %} +
$\displaystyle {{ coord }}$ $=$ $\displaystyle {{ eq }}$
{% endfor %} - -{% endfor %} {% endif %} {% set modelmaps = curve.all_formatted_maps %} {% if modelmaps or curve.has_more_modelmaps %} -

Maps to other modular curves

-{% if modelmaps %} -{% for degree, domain_model_type, codomain_label, codomain_model_type, codomain_name, codomain_equation, coord_names, equations in modelmaps %} -

- {% if codomain_label == "1.1.0.a.1" and codomain_model_type == 4 %} - where the projective coordinates $(E_4:E_6)$ of weights $4$ and $6$ are as follows - {% else %} - {% if codomain_label == "1.1.0.a.1" and codomain_model_type == 1 %} - {{ KNOWL('modcurve.j_invariant_map', '$j$-invariant map') }} - {% else %} - Map - {% endif %} - of degree {{degree}} {{ curve.model_type_domain(domain_model_type) }} to {{ curve.model_type_codomain(codomain_model_type) }} the modular curve - {% if codomain_name %} - {{name_to_latex(codomain_name)}} - {% else %} - {{codomain_label}} - {% endif %} - {% if codomain_model_type == 1 and codomain_label != "1.1.0.a.1" %} - isomorphic to $P^1$ +

Maps to other modular curves

+ {% if modelmaps %} + {% for degree, domain_model_type, codomain_label, codomain_model_type, codomain_name, codomain_equation, coord_names, equations in modelmaps %} +

+ {% if codomain_label == "1.1.0.a.1" and codomain_model_type == 4 %} + where the projective coordinates $(E_4:E_6)$ of weights $4$ and $6$ are as follows + {% else %} + {% if codomain_label == "1.1.0.a.1" and codomain_model_type == 1 %} + {{ KNOWL('modcurve.j_invariant_map', '$j$-invariant map') }} + {% else %} + Map + {% endif %} + of degree {{degree}} {{ curve.model_type_domain(domain_model_type) }} to {{ curve.model_type_codomain(codomain_model_type) }} the modular curve + {% if codomain_name %} + {{name_to_latex(codomain_name)}} + {% else %} + {{codomain_label}} + {% endif %} + {% if codomain_model_type == 1 and codomain_label != "1.1.0.a.1" %} + isomorphic to $P^1$ + {% endif %} + {% endif %} + :

+ + {% for coord, eq in zip(coord_names, equations) %} + + + + + + {% endfor %} +
$\displaystyle {{ coord }}$ $=$ $\displaystyle {{ eq }}$
+ {% if codomain_model_type in [0,2] %} +

Equation of the image curve:

+ + + + + + + {% for line in codomain_equation[2:] %} + + + + + + {% endfor %} +
${{codomain_equation[0]}}$ $=$ $ {{codomain_equation[1]}} $
$=$ $ {{line}} $
+ {% endif %} + {% endfor %} {% endif %} + {% if curve.has_more_modelmaps %} +

Some stored maps are too large to be displayed and are available for download.

{% endif %} - :

- - {% for coord, eq in zip(coord_names,equations) %} - - - - - - {% endfor %} -
$\displaystyle {{ coord }}$ $=$ $\displaystyle {{ eq }}$
-{% if codomain_model_type in [0,2] %} -

Equation of the image curve:

- - - - - - - {% for line in codomain_equation[2:] %} - - - - - - {% endfor %} -
${{codomain_equation[0]}}$ $=$ $ {{codomain_equation[1]}} $
$=$ $ {{line}} $
-{% endif %} -{% endfor %} -{% endif %} -{% if curve.has_more_modelmaps %} -

Some stored maps are too large to be displayed and are available for download.

-{% endif %} {% endif %} {% if curve.fiber_product_of or curve.modular_covers or curve.modular_covered_by %} -

{{ KNOWL('modcurve.modular_cover', 'Modular covers') }}

+

{{ KNOWL('modcurve.modular_cover', 'Modular covers') }}

-{% if curve.lattice_labels %} + {% if curve.lattice_labels %} -{# An invisible span to get the select color in the diagram into the DOM #} -
- -
+ {# An invisible span to get the select color in the diagram into the DOM #} +
+ +
-{% if wide %} - - Sorry, your browser does not support the subgroup diagram. - + {% if wide %} + + Sorry, your browser does not support the subgroup diagram. + -
- See a full page version of the diagram -
+
+ See a full page version of the diagram +
-

Cover information

-
- Click on a modular curve in the diagram to see information about it. -
-{% else %} {# not wide #} - - - - -
- - Sorry, your browser does not support the nearby lattice. - -

Cover information

Click on a modular curve in the diagram to see information about it.
-
-
- See a full page version of the diagram -
-{% endif %} {# wide #} + {% else %} {# not wide #} + + + + +
+ + Sorry, your browser does not support the nearby lattice. + + +

Cover information

+
+ Click on a modular curve in the diagram to see information about it. +
+
+
+ See a full page version of the diagram +
+ {% endif %} + {# wide #} - + -{% endif %} {# curve.lattice_labels #} + {% endif %} + {# curve.lattice_labels #} -{% if curve.fiber_product_of %} -

The following {{ KNOWL('modcurve.modular_cover','modular covers') }} realize this modular curve as a {{ KNOWL('modcurve.fiber_product','fiber product') }} over $X(1)$. - - - - - - - - - - {% if curve.dims %} - - {% endif %} - - - - {% for label, disp, level, index, degree, genus, rank, kernel in curve.fiber_product_of %} - - - - - - - - {% if curve.dims %} - {% if genus > 0 %} - - {% elif curve.genus > 0 %} - - {% endif %} - {% endif %} - - {% endfor %} - -
{{ KNOWL('modcurve.modular_cover','Factor curve') }}{{ KNOWL('modcurve.level','Level') }}{{ KNOWL('modcurve.relative_index', 'Index') }}{{ KNOWL('modcurve.modular_cover','Degree') }}{{ KNOWL('modcurve.genus','Genus') }}{{ KNOWL('modcurve.rank','Rank') }}{{ KNOWL('modcurve.modular_cover','Kernel decomposition') }}
{{disp}}${{ level }}$${{ index }}$${{ degree }}$${{ genus }}$${{ rank }}${{ kernel if kernel else "dimension zero" | safe }}full Jacobian
-{% endif %} + {% if curve.fiber_product_of %} +

The following {{ KNOWL('modcurve.modular_cover','modular covers') }} realize this modular curve as a {{ KNOWL('modcurve.fiber_product','fiber product') }} over $X(1)$. + + + + + + + + + + {% if curve.dims %} + + {% endif %} + + + + {% for label, disp, level, index, degree, genus, rank, kernel in curve.fiber_product_of %} + + + + + + + + {% if curve.dims %} + {% if genus > 0 %} + + {% elif curve.genus > 0 %} + + {% endif %} + {% endif %} + + {% endfor %} + +
{{ KNOWL('modcurve.modular_cover','Factor curve') }}{{ KNOWL('modcurve.level','Level') }}{{ KNOWL('modcurve.relative_index', 'Index') }}{{ KNOWL('modcurve.modular_cover','Degree') }}{{ KNOWL('modcurve.genus','Genus') }}{{ KNOWL('modcurve.rank','Rank') }}{{ KNOWL('modcurve.modular_cover','Kernel decomposition') }}
{{disp}}${{ level }}$${{ index }}$${{ degree }}$${{ genus }}$${{ rank }}${{ kernel if kernel else "dimension zero" | safe }}full Jacobian
+ {% endif %} -{% if curve.modular_covers %} -

This modular curve {{ KNOWL('modcurve.modular_cover','minimally covers') }} the modular curves listed below. - - - - - - - - - - {% if curve.dims %} - - {% endif %} - - - - {% for label, disp, level, index, degree, genus, rank, kernel in curve.modular_covers %} - - - - - - - - {% if curve.dims %} - {% if genus > 0 %} - - {% elif curve.genus > 0 %} - - {% endif %} - {% endif %} - - {% endfor %} - -
{{ KNOWL('modcurve.modular_cover','Covered curve') }}{{ KNOWL('modcurve.level','Level') }}{{ KNOWL('modcurve.relative_index', 'Index') }}{{ KNOWL('modcurve.modular_cover','Degree') }}{{ KNOWL('modcurve.genus','Genus') }}{{ KNOWL('modcurve.rank','Rank') }}{{ KNOWL('modcurve.modular_cover','Kernel decomposition') }}
{{disp}}${{ level }}$${{ index }}$${{ degree }}$${{ genus }}$${{ rank }}${{ kernel if kernel else "dimension zero" | safe }}full Jacobian
-{% endif %} + {% if curve.modular_covers %} +

This modular curve {{ KNOWL('modcurve.modular_cover','minimally covers') }} the modular curves listed below. + + + + + + + + + + {% if curve.dims %} + + {% endif %} + + + + {% for label, disp, level, index, degree, genus, rank, kernel in curve.modular_covers %} + + + + + + + + {% if curve.dims %} + {% if genus > 0 %} + + {% elif curve.genus > 0 %} + + {% endif %} + {% endif %} + + {% endfor %} + +
{{ KNOWL('modcurve.modular_cover','Covered curve') }}{{ KNOWL('modcurve.level','Level') }}{{ KNOWL('modcurve.relative_index', 'Index') }}{{ KNOWL('modcurve.modular_cover','Degree') }}{{ KNOWL('modcurve.genus','Genus') }}{{ KNOWL('modcurve.rank','Rank') }}{{ KNOWL('modcurve.modular_cover','Kernel decomposition') }}
{{disp}}${{ level }}$${{ index }}$${{ degree }}$${{ genus }}$${{ rank }}${{ kernel if kernel else "dimension zero" | safe }}full Jacobian
+ {% endif %} -{% if curve.modular_covered_by %} -

This modular curve is {{ KNOWL('modcurve.modular_cover','minimally covered by') }} the modular curves in the database listed below. - - - - - - - - - {% if curve.dims %} - - - {% endif %} - - - - {% for label, disp, level, index, degree, genus, rank, kernel in curve.modular_covered_by %} - - - - - - - {% if curve.dims %} - - - {% endif %} - - {% endfor %} - -
{{ KNOWL('modcurve.modular_cover','Covering curve') }}{{ KNOWL('modcurve.level','Level') }}{{ KNOWL('modcurve.relative_index', 'Index') }}{{ KNOWL('modcurve.modular_cover','Degree') }}{{ KNOWL('modcurve.genus','Genus') }}{{ KNOWL('modcurve.rank','Rank') }}{{ KNOWL('modcurve.modular_cover','Kernel decomposition') }}
{{disp}}${{ level }}$${{ index }}$${{ degree }}$${{ genus }}$${{ rank }}${{ kernel if kernel else "dimension zero" | safe }}
-{% endif %} + {% if curve.modular_covered_by %} +

This modular curve is {{ KNOWL('modcurve.modular_cover','minimally covered by') }} the modular curves in the database listed below. + + + + + + + + + {% if curve.dims %} + + + {% endif %} + + + + {% for label, disp, level, index, degree, genus, rank, kernel in curve.modular_covered_by %} + + + + + + + {% if curve.dims %} + + + {% endif %} + + {% endfor %} + +
{{ KNOWL('modcurve.modular_cover','Covering curve') }}{{ KNOWL('modcurve.level','Level') }}{{ KNOWL('modcurve.relative_index', 'Index') }}{{ KNOWL('modcurve.modular_cover','Degree') }}{{ KNOWL('modcurve.genus','Genus') }}{{ KNOWL('modcurve.rank','Rank') }}{{ KNOWL('modcurve.modular_cover','Kernel decomposition') }}
{{disp}}${{ level }}$${{ index }}$${{ degree }}$${{ genus }}$${{ rank }}${{ kernel if kernel else "dimension zero" | safe }}
+ {% endif %} {% endif %}