@@ -372,52 +372,71 @@ def _isomorphisms(E, F):
372
372
class WeierstrassIsomorphism (EllipticCurveHom , baseWI ):
373
373
r"""
374
374
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,
379
375
380
- INPUT:
376
+ INPUT:
381
377
382
- - ``E`` -- an EllipticCurve, or None (see below).
378
+ - ``E`` -- an `` EllipticCurve`` , or `` None`` (see below).
383
379
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).
385
382
386
- - ``F`` -- an EllipticCurve, or None (see below).
383
+ - ``F`` -- an `` EllipticCurve`` , or `` None`` (see below).
387
384
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).
399
393
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`.
402
399
403
- EXAMPLES::
400
+ Explicitly, the isomorphism defined by `(u,r,s,t)` maps a point `(x,y)`
401
+ to the point
404
402
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.
421
440
422
441
TESTS:
423
442
0 commit comments