Jacobians in the Unique Hess model

This module implements Jacobian arithmetic based on divisor representation by ideals, much like sage.rings.function_field.jacobian_hess. This approach to Jacobian arithmetic implementation is attributed to Hess [Hes2002].

The Unique Hess variant implemented here is a modification due to Macri [Mac2025] of Hess’ maximally reduced divisors, but with a linear search reduction algorithm that performs better in practice when doing a sequence of many Jacobian arithmetic operations.

The Unique Hess model is the only Jacobian model implemented in Sage that uses unique representatives of divisor classes. To the best of the author’s knowledge at time of writing, this module makes SageMath the only computer algebra system that includes a model of Jacobian arithmetic that uses unique representatives of divisor classes.

Jacobian

To create a Jacobian in the Unique Hess model, specify 'unique_hess' model and provide a base place of degree 1.

AUTHORS:

  • Vincent Macri (2025-10-10): initial version

class sage.rings.function_field.jacobian_unique_hess.Jacobian(function_field: FunctionField, base_div: FunctionFieldDivisor | FunctionFieldPlace, cache_infinite_ideals: bool = True, **kwds)[source]

Bases: Jacobian_base, UniqueRepresentation

group(k_ext=None)[source]

Raise an error if k_ext is not self.function_field().constant_base_field(), otherwise call Jacobian_base.group().

class sage.rings.function_field.jacobian_unique_hess.JacobianGroup(parent, function_field: FunctionField, base_div: FunctionFieldDivisor)[source]

Bases: UniqueRepresentation, JacobianGroup_base

Element[source]

alias of JacobianPoint

point(divisor)[source]

Return the point represented by the divisor of degree zero.

zero()[source]

Return the zero element of this group.

class sage.rings.function_field.jacobian_unique_hess.JacobianGroup_finite_field(parent, function_field: FunctionField, base_div: FunctionFieldDivisor)[source]

Bases: JacobianGroup, JacobianGroup_finite_field_base

Element[source]

alias of JacobianPoint_finite_field

class sage.rings.function_field.jacobian_unique_hess.JacobianPoint(parent: JacobianGroup, finite_ideal: FiniteIdeal, infinite_ideal: InfiniteIdeal)[source]

Bases: JacobianPoint_base

A Jacobian point in the “Unique Hess” model. Points are represented by pairs of ideals as in the “Hess” model, but we use a different reduction algorithm that guarantees that all points have a unique representative. Unlike the other Jacobian models in Sage, elements of this class are hashable.

additive_order()[source]

Return the order of this point.

divisor()[source]

Return the unique reduced representative of this divisor class in the Unique Hess model with respect to the base place.

EXAMPLES:

sage: P2.<x,y,z> = ProjectiveSpace(GF(29), 2)
sage: C = Curve(x^3 + 5*z^3 - y^2*z, P2)
sage: b = C([0,1,0]).place()
sage: G = C.jacobian(model='unique_hess', base_div=b).group()
sage: p = C([-1,2,1]).place()
sage: D = p - b
sage: pt = G.point(D)
sage: pt.divisor() == D
True
sage: pt == D
False
effective_part()[source]

Return the effective part of this divisor.

EXAMPLES:

sage: P2.<x,y,z> = ProjectiveSpace(GF(29), 2)
sage: C = Curve(x^3 + 5*z^3 - y^2*z, P2)
sage: b = C([0,1,0]).place()
sage: G = C.jacobian(model='unique_hess', base_div=b, extra_caching=False).group()
sage: p = C([-1,2,1]).place()
sage: pt = G.point(p - b)
sage: pt.effective_part() == p
True
class sage.rings.function_field.jacobian_unique_hess.JacobianPoint_finite_field(parent: JacobianGroup, finite_ideal: FiniteIdeal, infinite_ideal: InfiniteIdeal)[source]

Bases: JacobianPoint, JacobianPoint_finite_field_base

Points of Jacobians over finite fields