diff --git a/lmfdb/ecnf/WebEllipticCurve.py b/lmfdb/ecnf/WebEllipticCurve.py index 5992ac678c..85e3228bd6 100644 --- a/lmfdb/ecnf/WebEllipticCurve.py +++ b/lmfdb/ecnf/WebEllipticCurve.py @@ -483,6 +483,13 @@ def make_E(self): except AttributeError: self.qc = "not determined" + # Mordell-Weil group + try: + invs = [0 for a in range(self.rank)] + list(self.torsion_structure) + self.mw_struct = "trivial" if len(invs) == 0 else r'\(' + r' \oplus '.join((r'\Z' if n == 0 else r'\Z/{%s}\Z' % n) for n in invs) + r'\)' + except AttributeError: # if self.rank not set + self.mw_struct = "unknown" + # Torsion self.ntors = web_latex(self.torsion_order) self.tr = len(self.torsion_structure) @@ -494,6 +501,7 @@ def make_E(self): self.tor_struct_pretty = r"\(\Z/%s\Z\oplus\Z/%s\Z\)" % tuple(self.torsion_structure) self.torsion_gens = [web_point(parse_point(K,P)) for P in self.torsion_gens] + self.tor_gens_and_orders = list(zip(self.torsion_gens, self.torsion_structure)) # BSD data # @@ -568,8 +576,10 @@ def make_E(self): # Generators try: self.gens = [web_point(parse_point(K, P)) for P in self.gens] + self.gens_and_heights = list(zip(self.gens,self.heights)) except AttributeError: self.gens = [] + self.gens_and_orders = [] # Global period try: diff --git a/lmfdb/ecnf/templates/ecnf-curve.html b/lmfdb/ecnf/templates/ecnf-curve.html index 4d030ff796..baed8cc381 100644 --- a/lmfdb/ecnf/templates/ecnf-curve.html +++ b/lmfdb/ecnf/templates/ecnf-curve.html @@ -70,6 +70,37 @@

{{ KNOWL('ec.weierstrass_coeffs', title='Weierstrass equation') }}

{{ place_code('is_min') }}

+

{{ KNOWL('ec.mordell_weil_group', title='Mordell-Weil group') }} structure

+

+ {% if ec.rk == "not available" %} + Not computed ($ {{ec.rk_lb}} \le r \le {{ec.rk_ub}} $) + {% else %} + {{ ec.mw_struct}} + {%endif%} +

+ +{% if ec.ngens > 0 or ec.torsion_order > 1 %} + +

{{ KNOWL('ec.mw_generators', title="Mordell-Weil generators") }}

+
+

+ {% if ec.ngens < ec.rk_ub %} + {% if ec.ngens > 0 %} Only {{ec.ngens}} {% else %} No {% endif %} non-torsion + {% if ec.ngens == 1 %} generator is {% else %} generators are {% endif %} known. + {% endif %} + + + {% for P,h in ec.gens_and_heights %} + + {% endfor %} + {% for T,n in ec.tor_gens_and_orders %} + + {% endfor %} +
$P${{ KNOWL('ec.canonical_height', title="$\hat{h}(P)$")}}Order
{{P}}${{h}}$$\infty$
{{T}}$0$${{n}}$
+

+
+{%endif%} +

{{ KNOWL('ec.invariants', title='Invariants')}}

@@ -189,85 +220,6 @@

{{ KNOWL('ec.invariants', title='Invariants')}}

-

{{ KNOWL('ec.mordell_weil_group', title="Mordell-Weil group") }}

-
-

- - - -{% if ec.rk == "not available" %} -{% if ec.rank_bounds != "not available" %} - -{% else %} - - - -{% endif %} -{% else %} - - - -{% endif %} - - -{% if ec.ngens %} - - - {% if ec.gens == 'not available' %} - - {% else %} - - {% for gen in ec.gens %} - - {% endfor %} -{% endif %} - -{% endif %} - -{% if ec.heights %} - - - - {% for h in ec.heights %} - - {% endfor %} - -{% endif %} - - - - - - - - - - {% if ec.tr %} - - - - -{% for gen in ec.torsion_gens %} - -{% endfor %} - - - {% endif %} -
{{ KNOWL('ec.rank', title="Rank")}}:\({{ ec.rk_lb }} \le r \le {{ec.rk_ub}}\)$r$ not available$r$=\({{ ec.rank }}\)
- {% if ec.ngens==1 %} - {{KNOWL('ec.mw_generators','Non-torsion generator')}}: - {% else %} - {{KNOWL('ec.mw_generators','Non-torsion generators')}}: - {% endif %} - not available$P$={{ gen }}
- {% if ec.ngens==1 %} - {{ KNOWL('ec.canonical_height', title="Height") }}: - {% else %} - {{ KNOWL('ec.canonical_height', title="Heights") }}: - {% endif %} - $\hat{h}(P)$\({{ h }}\)
{{KNOWL('ec.torsion_subgroup','Torsion structure')}}:$E(K)_{\mathrm{tor}}$$\cong${{ ec.tor_struct_pretty }}
{{ place_code('tors') }}
{% if ec.tr==1 %}{{KNOWL('ec.mw_generators','Torsion generator')}}{% else %}{{KNOWL('ec.mw_generators','Torsion generators')}}{% endif %}:$T$={{ gen }}
{{ place_code('torgens') }}
-

-

{{ KNOWL('ec.bsdconjecture', title='BSD invariants') }}

@@ -341,12 +293,12 @@

{{ KNOWL('ec.bsdconjecture', title='BSD invariants') }}

{{ KNOWL('ec.torsion_order', title='Torsion order') }}: - $E(K)_{\mathrm{tors}}$= + $\#E(K)_{\mathrm{tor}}$= \({{ ec.torsion_order }}\) - {{ KNOWL('lfunction.leading_coeff', title='Leading coefficient') }}: + {{ KNOWL('ec.special_value', title='Special value') }}: $L^{(r)}(E/K,1)/r!$ {% if ec.Lvalue=='not available' %} not available diff --git a/lmfdb/elliptic_curves/templates/ec-curve.html b/lmfdb/elliptic_curves/templates/ec-curve.html index fbecf34b2e..e49ec675c7 100644 --- a/lmfdb/elliptic_curves/templates/ec-curve.html +++ b/lmfdb/elliptic_curves/templates/ec-curve.html @@ -102,6 +102,24 @@

{{ KNOWL('ec.mordell_weil_group', title='Mordell-Weil group') }} structure<

{{ place_code('mwgroup') }}

+ {% if data.mwbsd.rank > 0 or data.mwbsd.torsion > 1 %} +

{{ KNOWL('ec.mw_generators', title="Mordell-Weil generators") }}

+
+

+ + + {% for P,h in data.mwbsd.gens_and_heights %} + + {% endfor %} + {% for T,n in data.mwbsd.tor_gens_and_orders %} + + {% endfor %} +
$P${{ KNOWL('ec.canonical_height', title="$\hat{h}(P)$")}}Order
${{P}}$${{h}}$$\infty$
${{T}}$$0$${{n}}$
+

+
+ {%endif%} + +{# {% if data.mwbsd.rank!=0 %} {% if data.mwbsd.rank==1 %}

{{ KNOWL('ec.mw_generators', title='Non-torsion Mordell-Weil generator') }} and {{KNOWL('ec.canonical_height','height')}}

@@ -134,8 +152,9 @@

{{ KNOWL('ec.mw_generators', title='Torsion generators') }}

{{ data.mwbsd.tor_gens |safe }}

{{ place_code('tors') }} {%endif %} +#} - + {% if data.mwbsd.rank > 0 or data.mwbsd.torsion > 1 %}

{{ KNOWL('ec.q.integral_points', title='Integral points') }}

@@ -148,6 +167,7 @@

{{ KNOWL('ec.mw_generators', title='Torsion generators') }}

N.B. Only integral points which are combinations of known generators are shown.

{%endif %} + {%endif %}

Invariants

@@ -237,6 +257,13 @@

{{ KNOWL('ec.q.bsdconjecture', title='BSD invariants') }}

+ + + + + + {% if data.mwbsd.reg == '?' %} @@ -269,10 +296,16 @@

{{ KNOWL('ec.q.bsdconjecture', title='BSD invariants') }}

- + + + + + + + @@ -293,15 +326,10 @@

{{ KNOWL('ec.q.bsdconjecture', title='BSD invariants') }}

{% endif %} - - - - -
{{ place_code('analytic_rank') }}
{{ KNOWL('ec.rank', title='Mordell-Weil rank') }}:$r$ = $ {{ data.rank }}$ + {{ place_code('rank') }}
{{ KNOWL('ec.regulator', title='Regulator') }}:
{{ KNOWL('ec.torsion_order', title='Torsion order') }}:$E(\Q)_{\mathrm{tors}}$ = ${{ data.mwbsd.torsion }}$$\#E(\Q)_{\mathrm{tor}}$ = ${{ data.mwbsd.torsion }}$ {{ place_code('ntors') }}
{{KNOWL('ec.special_value', title='Special value', special_value = data.special_value)}}:$ {{ data.mwbsd.lder_name }}$ ≈ ${{ data.mwbsd.special_value }} ${{ place_code('L1') }}
{{ KNOWL('ec.analytic_sha_order', title='Analytic order of Ш') }}: {% if data.mwbsd.sha == '?' %}Not computed{% else %} Ш${}_{\mathrm{an}}$ ${{ data.mwbsd.regsha }}$
{{KNOWL('ec.q.special_value', title='Special value', special_value = data.special_value)}}:$ {{ data.mwbsd.lder_name }}$ ≈ ${{ data.mwbsd.special_value }} ${{ place_code('L1') }}
-

{{ KNOWL('ec.q.bsdconjecture', title='BSD formula') }}

+

{{ KNOWL('ec.bsdconjecture', title='BSD formula') }}

$\displaystyle {{ data.mwbsd.formula|safe }}$

diff --git a/lmfdb/elliptic_curves/templates/sw_ecdb.html b/lmfdb/elliptic_curves/templates/sw_ecdb.html index df74af9404..4f7a352356 100644 --- a/lmfdb/elliptic_curves/templates/sw_ecdb.html +++ b/lmfdb/elliptic_curves/templates/sw_ecdb.html @@ -39,7 +39,7 @@

File and data format

$L^{(r)}(1)/r!$ - The {{ KNOWL('ec.q.special_value', 'special value') }} of $E$ + The {{ KNOWL('ec.special_value', 'special value') }} of $E$ $14.921134$ diff --git a/lmfdb/elliptic_curves/web_ec.py b/lmfdb/elliptic_curves/web_ec.py index 9928118a8f..28c802c175 100644 --- a/lmfdb/elliptic_curves/web_ec.py +++ b/lmfdb/elliptic_curves/web_ec.py @@ -657,9 +657,11 @@ def make_mwbsd(self): mwbsd['int_points'] = "None" # Generators (mod torsion) and heights: - mwbsd['generators'] = [raw_typeset(weighted_proj_to_affine_point(P)) for P in mwbsd['gens']] if mwbsd['ngens'] else '' + #mwbsd['generators'] = [raw_typeset(weighted_proj_to_affine_point(P)) for P in mwbsd['gens']] if mwbsd['ngens'] else [] + mwbsd['generators'] = [weighted_proj_to_affine_point(P) for P in mwbsd['gens']] if mwbsd['ngens'] else [] mwbsd['heights'] = [RR(h) for h in mwbsd['heights']] - + mwbsd['gens_and_heights'] = list(zip(mwbsd['generators'], mwbsd['heights'])) + # Mordell-Weil group invs = [0 for a in range(self.rank)] + list(self.torsion_structure) mwbsd['mw_struct'] = "trivial" if len(invs) == 0 else r'\(' + r' \oplus '.join((r'\Z' if n == 0 else r'\Z/{%s}\Z' % n) for n in invs) + r'\)' @@ -668,11 +670,13 @@ def make_mwbsd(self): if mwbsd['torsion'] == 1: mwbsd['tor_struct'] = '' mwbsd['tor_gens'] = '' + mwbsd['tor_gens_and_orders'] = [] else: mwbsd['tor_struct'] = r' \oplus '.join(r'\Z/{%s}\Z' % n for n in self.torsion_structure) tor_gens_tmp = [weighted_proj_to_affine_point(P) for P in mwbsd['torsion_generators']] mwbsd['tor_gens'] = raw_typeset(', '.join(str(P) for P in tor_gens_tmp), ', '.join(web_latex(P) for P in tor_gens_tmp)) + mwbsd['tor_gens_and_orders'] = list(zip(tor_gens_tmp, self.torsion_structure)) # BSD invariants if r >= 2: