Skip to content

Commit

Permalink
sagemathgh-38474: Implement period_lattice for elliptic curves over R…
Browse files Browse the repository at this point in the history
…ealField, ComplexField, etc.

    
Implement `E.period_lattice()` method for elliptic curves over other
fields.

(The code is mostly already there, just need minor adaptation.)

### 📝 Checklist

- [x] The title is concise and informative.
- [x] The description explains in detail what this PR is about.
- [x] I have linked a relevant issue or discussion. (not aware of one)
- [x] I have created tests covering the changes.
- [x] I have updated the documentation and checked the documentation
preview.
    
URL: sagemath#38474
Reported by: user202729
Reviewer(s): John Cremona
  • Loading branch information
Release Manager committed Dec 12, 2024
2 parents 6fdddbb + 31441ba commit 3d11c7c
Show file tree
Hide file tree
Showing 2 changed files with 181 additions and 53 deletions.
49 changes: 49 additions & 0 deletions src/sage/schemes/elliptic_curves/ell_field.py
Original file line number Diff line number Diff line change
Expand Up @@ -1529,6 +1529,55 @@ def isogeny_codomain(self, kernel):
E._fetch_cached_order(self)
return E

def period_lattice(self):
r"""
Return the period lattice of the elliptic curve for the given
embedding of its base field with respect to the differential
`dx/(2y + a_1x + a_3)`.
Only supported for some base rings.
EXAMPLES::
sage: EllipticCurve(RR, [1, 6]).period_lattice()
Period lattice associated to Elliptic Curve defined by y^2 = x^3 + 1.00000000000000*x + 6.00000000000000 over Real Field with 53 bits of precision
TESTS::
sage: EllipticCurve(QQ, [1, 6]).period_lattice()
Period lattice associated to Elliptic Curve defined by y^2 = x^3 + x + 6 over Rational Field
sage: EllipticCurve(RR, [1, 6]).period_lattice()
Period lattice associated to Elliptic Curve defined by y^2 = x^3 + 1.00000000000000*x + 6.00000000000000 over Real Field with 53 bits of precision
sage: EllipticCurve(RealField(100), [1, 6]).period_lattice()
Period lattice associated to Elliptic Curve defined by y^2 = x^3 + 1.0000000000000000000000000000*x + 6.0000000000000000000000000000 over Real Field with 100 bits of precision
sage: EllipticCurve(CC, [1, 6]).period_lattice()
Period lattice associated to Elliptic Curve defined by y^2 = x^3 + 1.00000000000000*x + 6.00000000000000 over Complex Field with 53 bits of precision
sage: EllipticCurve(ComplexField(100), [1, 6]).period_lattice()
Period lattice associated to Elliptic Curve defined by y^2 = x^3 + 1.0000000000000000000000000000*x + 6.0000000000000000000000000000 over Complex Field with 100 bits of precision
sage: EllipticCurve(AA, [1, 6]).period_lattice()
Period lattice associated to Elliptic Curve defined by y^2 = x^3 + x + 6 over Algebraic Real Field
sage: EllipticCurve(QQbar, [1, 6]).period_lattice()
Period lattice associated to Elliptic Curve defined by y^2 = x^3 + x + 6 over Algebraic Field
Unsupported cases (the exact error being raised may change in the future)::
sage: EllipticCurve(ZZ, [1, 6]).period_lattice()
Traceback (most recent call last):
...
AttributeError: 'EllipticCurve_generic_with_category' object has no attribute 'period_lattice'
sage: QQt.<t> = QQ[]
sage: EllipticCurve(QQt.fraction_field(), [1, 6]).period_lattice()
Traceback (most recent call last):
...
AttributeError: 'FractionField_1poly_field_with_category' object has no attribute ...
sage: EllipticCurve(GF(7), [1, 6]).period_lattice()
Traceback (most recent call last):
...
IndexError: list index out of range
"""
from sage.schemes.elliptic_curves.period_lattice import PeriodLattice_ell
return PeriodLattice_ell(self)

def kernel_polynomial_from_point(self, P, *, algorithm=None):
r"""
Given a point `P` on this curve which generates a rational subgroup,
Expand Down
Loading

0 comments on commit 3d11c7c

Please sign in to comment.