Jacobians of curves#

This module defines the base class of Jacobians as an abstract scheme.

AUTHORS:

  • William Stein (2005)

sage.schemes.jacobians.abstract_jacobian.Jacobian(C)[source]#

EXAMPLES:

sage: from sage.schemes.jacobians.abstract_jacobian import Jacobian
sage: P2.<x, y, z> = ProjectiveSpace(QQ, 2)
sage: C = Curve(x^3 + y^3 + z^3)
sage: Jacobian(C)
Jacobian of Projective Plane Curve over Rational Field defined by x^3 + y^3 + z^3
>>> from sage.all import *
>>> from sage.schemes.jacobians.abstract_jacobian import Jacobian
>>> P2 = ProjectiveSpace(QQ, Integer(2), names=('x', 'y', 'z',)); (x, y, z,) = P2._first_ngens(3)
>>> C = Curve(x**Integer(3) + y**Integer(3) + z**Integer(3))
>>> Jacobian(C)
Jacobian of Projective Plane Curve over Rational Field defined by x^3 + y^3 + z^3
class sage.schemes.jacobians.abstract_jacobian.Jacobian_generic(C, category=None)[source]#

Bases: Scheme

Base class for Jacobians of projective curves.

The input must be a projective curve over a field.

EXAMPLES:

sage: from sage.schemes.jacobians.abstract_jacobian import Jacobian
sage: P2.<x, y, z> = ProjectiveSpace(QQ, 2)
sage: C = Curve(x^3 + y^3 + z^3)
sage: J = Jacobian(C); J
Jacobian of Projective Plane Curve over Rational Field defined by x^3 + y^3 + z^3
>>> from sage.all import *
>>> from sage.schemes.jacobians.abstract_jacobian import Jacobian
>>> P2 = ProjectiveSpace(QQ, Integer(2), names=('x', 'y', 'z',)); (x, y, z,) = P2._first_ngens(3)
>>> C = Curve(x**Integer(3) + y**Integer(3) + z**Integer(3))
>>> J = Jacobian(C); J
Jacobian of Projective Plane Curve over Rational Field defined by x^3 + y^3 + z^3
base_curve()[source]#

Return the curve of which self is the Jacobian.

EXAMPLES:

sage: from sage.schemes.jacobians.abstract_jacobian import Jacobian
sage: P2.<x, y, z> = ProjectiveSpace(QQ, 2)
sage: J = Jacobian(Curve(x^3 + y^3 + z^3))
sage: J.curve()
Projective Plane Curve over Rational Field defined by x^3 + y^3 + z^3
>>> from sage.all import *
>>> from sage.schemes.jacobians.abstract_jacobian import Jacobian
>>> P2 = ProjectiveSpace(QQ, Integer(2), names=('x', 'y', 'z',)); (x, y, z,) = P2._first_ngens(3)
>>> J = Jacobian(Curve(x**Integer(3) + y**Integer(3) + z**Integer(3)))
>>> J.curve()
Projective Plane Curve over Rational Field defined by x^3 + y^3 + z^3
base_extend(R)[source]#

Return the natural extension of self over \(R\).

INPUT:

  • R – a field. The new base field.

OUTPUT: The Jacobian over the ring \(R\).

EXAMPLES:

sage: R.<x> = QQ['x']
sage: H = HyperellipticCurve(x^3 - 10*x + 9)
sage: Jac = H.jacobian();   Jac
Jacobian of Hyperelliptic Curve over Rational Field
 defined by y^2 = x^3 - 10*x + 9

sage: # needs sage.rings.number_field
sage: F.<a> = QQ.extension(x^2 + 1)
sage: Jac.base_extend(F)
Jacobian of Hyperelliptic Curve over Number Field in a with defining
 polynomial x^2 + 1 defined by y^2 = x^3 - 10*x + 9
>>> from sage.all import *
>>> R = QQ['x']; (x,) = R._first_ngens(1)
>>> H = HyperellipticCurve(x**Integer(3) - Integer(10)*x + Integer(9))
>>> Jac = H.jacobian();   Jac
Jacobian of Hyperelliptic Curve over Rational Field
 defined by y^2 = x^3 - 10*x + 9

>>> # needs sage.rings.number_field
>>> F = QQ.extension(x**Integer(2) + Integer(1), names=('a',)); (a,) = F._first_ngens(1)
>>> Jac.base_extend(F)
Jacobian of Hyperelliptic Curve over Number Field in a with defining
 polynomial x^2 + 1 defined by y^2 = x^3 - 10*x + 9
change_ring(R)[source]#

Return the Jacobian over the ring \(R\).

INPUT:

  • R – a field. The new base ring.

OUTPUT: The Jacobian over the ring \(R\).

EXAMPLES:

sage: R.<x> = QQ['x']
sage: H = HyperellipticCurve(x^3 - 10*x + 9)
sage: Jac = H.jacobian();   Jac
Jacobian of Hyperelliptic Curve over Rational Field
 defined by y^2 = x^3 - 10*x + 9
sage: Jac.change_ring(RDF)
Jacobian of Hyperelliptic Curve over Real Double Field
 defined by y^2 = x^3 - 10.0*x + 9.0
>>> from sage.all import *
>>> R = QQ['x']; (x,) = R._first_ngens(1)
>>> H = HyperellipticCurve(x**Integer(3) - Integer(10)*x + Integer(9))
>>> Jac = H.jacobian();   Jac
Jacobian of Hyperelliptic Curve over Rational Field
 defined by y^2 = x^3 - 10*x + 9
>>> Jac.change_ring(RDF)
Jacobian of Hyperelliptic Curve over Real Double Field
 defined by y^2 = x^3 - 10.0*x + 9.0
curve()[source]#

Return the curve of which self is the Jacobian.

EXAMPLES:

sage: from sage.schemes.jacobians.abstract_jacobian import Jacobian
sage: P2.<x, y, z> = ProjectiveSpace(QQ, 2)
sage: J = Jacobian(Curve(x^3 + y^3 + z^3))
sage: J.curve()
Projective Plane Curve over Rational Field defined by x^3 + y^3 + z^3
>>> from sage.all import *
>>> from sage.schemes.jacobians.abstract_jacobian import Jacobian
>>> P2 = ProjectiveSpace(QQ, Integer(2), names=('x', 'y', 'z',)); (x, y, z,) = P2._first_ngens(3)
>>> J = Jacobian(Curve(x**Integer(3) + y**Integer(3) + z**Integer(3)))
>>> J.curve()
Projective Plane Curve over Rational Field defined by x^3 + y^3 + z^3
sage.schemes.jacobians.abstract_jacobian.is_Jacobian(J)[source]#

Return True if \(J\) is of type Jacobian_generic.

EXAMPLES:

sage: from sage.schemes.jacobians.abstract_jacobian import Jacobian, is_Jacobian
sage: P2.<x, y, z> = ProjectiveSpace(QQ, 2)
sage: C = Curve(x^3 + y^3 + z^3)
sage: J = Jacobian(C)
sage: is_Jacobian(J)
...
DeprecationWarning: Use Jacobian_generic directly
See https://github.com/sagemath/sage/issues/35467 for details.
True
>>> from sage.all import *
>>> from sage.schemes.jacobians.abstract_jacobian import Jacobian, is_Jacobian
>>> P2 = ProjectiveSpace(QQ, Integer(2), names=('x', 'y', 'z',)); (x, y, z,) = P2._first_ngens(3)
>>> C = Curve(x**Integer(3) + y**Integer(3) + z**Integer(3))
>>> J = Jacobian(C)
>>> is_Jacobian(J)
...
DeprecationWarning: Use Jacobian_generic directly
See https://github.com/sagemath/sage/issues/35467 for details.
True
sage: E = EllipticCurve('37a1')
sage: is_Jacobian(E)
False
>>> from sage.all import *
>>> E = EllipticCurve('37a1')
>>> is_Jacobian(E)
False