Skip to content

Commit a10cf50

Browse files
author
Release Manager
committed
gh-pr-34967: show explicit formulas in documentation of WeierstrassIsomorphism Fixes #34439. URL: #34967 Reported by: Lorenz Panny Reviewer(s): Kwankyu Lee
2 parents 5a5f0a4 + 83581fa commit a10cf50

File tree

1 file changed

+57
-38
lines changed

1 file changed

+57
-38
lines changed

src/sage/schemes/elliptic_curves/weierstrass_morphism.py

Lines changed: 57 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -372,52 +372,71 @@ def _isomorphisms(E, F):
372372
class WeierstrassIsomorphism(EllipticCurveHom, baseWI):
373373
r"""
374374
Class representing a Weierstrass isomorphism between two elliptic curves.
375-
"""
376-
def __init__(self, E=None, urst=None, F=None):
377-
r"""
378-
Constructor for WeierstrassIsomorphism class,
379375
380-
INPUT:
376+
INPUT:
381377
382-
- ``E`` -- an EllipticCurve, or None (see below).
378+
- ``E`` -- an ``EllipticCurve``, or ``None`` (see below).
383379
384-
- ``urst`` -- a 4-tuple `(u,r,s,t)`, or None (see below).
380+
- ``urst`` -- a 4-tuple `(u,r,s,t)`, a :class:`baseWI` object,
381+
or ``None`` (see below).
385382
386-
- ``F`` -- an EllipticCurve, or None (see below).
383+
- ``F`` -- an ``EllipticCurve``, or ``None`` (see below).
387384
388-
Given two Elliptic Curves ``E`` and ``F`` (represented by
389-
Weierstrass models as usual), and a transformation ``urst``
390-
from ``E`` to ``F``, construct an isomorphism from ``E`` to
391-
``F``. An exception is raised if ``urst(E)!=F``. At most one
392-
of ``E``, ``F``, ``urst`` can be None. If ``F==None`` then
393-
``F`` is constructed as ``urst(E)``. If ``E==None`` then
394-
``E`` is constructed as ``urst^-1(F)``. If ``urst==None``
395-
then an isomorphism from ``E`` to ``F`` is constructed if
396-
possible, and an exception is raised if they are not
397-
isomorphic. Otherwise ``urst`` can be a tuple of length 4 or
398-
a object of type ``baseWI``.
385+
Given two Elliptic Curves ``E`` and ``F`` (represented by Weierstrass
386+
models as usual), and a transformation ``urst`` from ``E`` to ``F``,
387+
construct an isomorphism from ``E`` to ``F``.
388+
An exception is raised if ``urst(E) != F``. At most one of ``E``,
389+
``F``, ``urst`` can be ``None``. In this case, the missing input is
390+
constructed from the others in such a way that ``urst(E) == F`` holds,
391+
and an exception is raised if this is impossible (typically because
392+
``E`` and ``F`` are not isomorphic).
399393
400-
Users will not usually need to use this class directly, but instead use
401-
methods such as ``isomorphism`` of elliptic curves.
394+
Users will not usually need to use this class directly, but instead use
395+
methods such as
396+
:meth:`~sage.schemes.elliptic_curves.ell_generic.EllipticCurve_generic.isomorphism_to`
397+
or
398+
:meth:`~sage.schemes.elliptic_curves.ell_generic.EllipticCurve_generic.isomorphisms`.
402399
403-
EXAMPLES::
400+
Explicitly, the isomorphism defined by `(u,r,s,t)` maps a point `(x,y)`
401+
to the point
404402
405-
sage: from sage.schemes.elliptic_curves.weierstrass_morphism import *
406-
sage: WeierstrassIsomorphism(EllipticCurve([0,1,2,3,4]),(-1,2,3,4))
407-
Elliptic-curve morphism:
408-
From: Elliptic Curve defined by y^2 + 2*y = x^3 + x^2 + 3*x + 4 over Rational Field
409-
To: Elliptic Curve defined by y^2 - 6*x*y - 10*y = x^3 - 2*x^2 - 11*x - 2 over Rational Field
410-
Via: (u,r,s,t) = (-1, 2, 3, 4)
411-
sage: E = EllipticCurve([0,1,2,3,4])
412-
sage: F = EllipticCurve(E.cremona_label())
413-
sage: WeierstrassIsomorphism(E,None,F)
414-
Elliptic-curve morphism:
415-
From: Elliptic Curve defined by y^2 + 2*y = x^3 + x^2 + 3*x + 4 over Rational Field
416-
To: Elliptic Curve defined by y^2 = x^3 + x^2 + 3*x + 5 over Rational Field
417-
Via: (u,r,s,t) = (1, 0, 0, -1)
418-
sage: w = WeierstrassIsomorphism(None,(1,0,0,-1),F)
419-
sage: w._domain==E
420-
True
403+
.. MATH::
404+
405+
((x-r) / u^2, \; (y - s(x-r) - t) / u^3) .
406+
407+
If the domain `E` has Weierstrass coefficients `[a_1,a_2,a_3,a_4,a_6]`,
408+
the codomain `F` is given by
409+
410+
.. MATH::
411+
412+
a_1' &= (a_1 + 2s) / u \\
413+
a_2' &= (a_2 - a_1s + 3r - s^2) / u^2 \\
414+
a_3' &= (a_3 + a_1r + 2t) / u^3 \\
415+
a_4' &= (a_4 + 2a_2r - a_1(rs+t) - a_3s + 3r^2 - 2st) / u^4 \\
416+
a_6' &= (a_6 - a_1rt + a_2r^2 - a_3t + a_4r + r^3 - t^2) / u^6 .
417+
418+
EXAMPLES::
419+
420+
sage: from sage.schemes.elliptic_curves.weierstrass_morphism import *
421+
sage: WeierstrassIsomorphism(EllipticCurve([0,1,2,3,4]), (-1,2,3,4))
422+
Elliptic-curve morphism:
423+
From: Elliptic Curve defined by y^2 + 2*y = x^3 + x^2 + 3*x + 4 over Rational Field
424+
To: Elliptic Curve defined by y^2 - 6*x*y - 10*y = x^3 - 2*x^2 - 11*x - 2 over Rational Field
425+
Via: (u,r,s,t) = (-1, 2, 3, 4)
426+
sage: E = EllipticCurve([0,1,2,3,4])
427+
sage: F = EllipticCurve(E.cremona_label())
428+
sage: WeierstrassIsomorphism(E, None, F)
429+
Elliptic-curve morphism:
430+
From: Elliptic Curve defined by y^2 + 2*y = x^3 + x^2 + 3*x + 4 over Rational Field
431+
To: Elliptic Curve defined by y^2 = x^3 + x^2 + 3*x + 5 over Rational Field
432+
Via: (u,r,s,t) = (1, 0, 0, -1)
433+
sage: w = WeierstrassIsomorphism(None, (1,0,0,-1), F)
434+
sage: w._domain == E
435+
True
436+
"""
437+
def __init__(self, E=None, urst=None, F=None):
438+
r"""
439+
Constructor for the ``WeierstrassIsomorphism`` class.
421440
422441
TESTS:
423442

0 commit comments

Comments
 (0)