Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 18 additions & 6 deletions src/doc/en/reference/curves/index.rst
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
Plane and Space Curves
======================

Sage enables computations with curves in affine and projective ambient spaces,
curves over `\CC` as Riemann surfaces, and Jacobians of projective curves.

Curves
======
------

.. toctree::
:maxdepth: 1
Expand All @@ -12,10 +18,8 @@ Curves
sage/schemes/curves/closed_point
sage/schemes/curves/zariski_vankampen

sage/schemes/jacobians/abstract_jacobian

Plane conics
============
------------

.. toctree::
:maxdepth: 1
Expand All @@ -28,7 +32,7 @@ Plane conics
sage/schemes/plane_conics/con_rational_function_field

Plane quartics
=========================
--------------

.. toctree::
:maxdepth: 1
Expand All @@ -37,11 +41,19 @@ Plane quartics
sage/schemes/plane_quartics/quartic_generic

Riemann surfaces
================
----------------

.. toctree::
:maxdepth: 1

sage/schemes/riemann_surfaces/riemann_surface

Jacobians
---------

.. toctree::
:maxdepth: 1

sage/schemes/jacobians/abstract_jacobian

.. include:: ../footer.txt
13 changes: 13 additions & 0 deletions src/doc/en/reference/function_fields/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,19 @@ algebraic closure of `\QQ`.

A basic reference for the theory of algebraic function fields is [Stich2009]_.

Jacobians of function fields
----------------------------

Arithmetic in Jacobians of function fields are available in two flavors.

.. toctree::
:maxdepth: 1

sage/rings/function_field/jacobian_base
sage/rings/function_field/jacobian_hess
sage/rings/function_field/jacobian_khuri_makdisi
sage/rings/function_field/khuri_makdisi

A Support Module
----------------

Expand Down
6 changes: 6 additions & 0 deletions src/doc/en/reference/references/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -3181,6 +3181,9 @@ REFERENCES:
Cryptanalysis* ; 2002' available at
http://www.engr.mun.ca/~howard/PAPERS/ldc_tutorial.pdf

.. [Hes2004] Florian Hess, "Computing relations in divisor class groups of
algebraic curves over finite fields," Preprint, 2004.

.. [Hes2002] Florian Hess, "Computing Riemann-Roch spaces in algebraic
function fields and related topics," J. Symbolic
Comput. 33 (2002), no. 4, 425--445.
Expand Down Expand Up @@ -3776,6 +3779,9 @@ REFERENCES:
block cipher*, Lightweight Cryptography Workshop, 2016.
https://www.nist.gov/sites/default/files/documents/2016/10/18/karpman-paper-lwc2016.pdf

.. [Khu2004] \K. Khuri-Makdisi. *Linear algebra algorithms for divisors on an algebraic curve*,
Mathematics of Computation 73, no. 245 (2004) pp. 333-357.

.. [Kin1992] Nancy G. Kinnersley, *The vertex separation number of a graph
equals its path-width*, Information Processing Letters
42(6):345-350, 1992. :doi:`10.1016/0020-0190(92)90234-M`.
Expand Down
2 changes: 1 addition & 1 deletion src/sage/categories/all.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@

# schemes and varieties
from sage.categories.modular_abelian_varieties import ModularAbelianVarieties
from sage.categories.schemes import Schemes, AbelianVarieties
from sage.categories.schemes import Schemes, AbelianVarieties, Jacobians

# * with basis
from sage.categories.modules_with_basis import ModulesWithBasis
Expand Down
1 change: 1 addition & 0 deletions src/sage/categories/category.py
Original file line number Diff line number Diff line change
Expand Up @@ -2598,6 +2598,7 @@ def category_sample():
Category of Hecke modules over Rational Field,
Category of Hopf algebras over Rational Field,
Category of Hopf algebras with basis over Rational Field,
Category of Jacobians over Rational Field,
Category of Lie algebras over Rational Field,
Category of Weyl groups,
Category of abelian varieties over Rational Field,
Expand Down
129 changes: 112 additions & 17 deletions src/sage/categories/schemes.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,18 @@
r"""
Schemes
"""

# ****************************************************************************
# Copyright (C) 2005 David Kohel <kohel@maths.usyd.edu>
# Copyright (C) 2005 David Kohel <kohel@maths.usyd.edu>
# William Stein <wstein@math.ucsd.edu>
# 2008-2012 Nicolas M. Thiery <nthiery at users.sf.net>
# 2008-2012 Nicolas M. Thiery <nthiery@users.sf.net>
#
# Distributed under the terms of the GNU General Public License (GPL)
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
# https://www.gnu.org/licenses/
# *****************************************************************************
# ****************************************************************************

from sage.categories.category import Category
from sage.categories.category_types import Category_over_base
Expand All @@ -19,6 +23,7 @@
from sage.categories.rings import Rings
from sage.categories.fields import Fields
from sage.categories.homsets import HomsetsCategory
from sage.misc.abstract_method import abstract_method


class Schemes(Category):
Expand Down Expand Up @@ -56,7 +61,6 @@ class Schemes(Category):
sage: Schemes().Homsets().super_categories()
[Category of homsets]
"""

@staticmethod
def __classcall_private__(cls, X=None):
"""
Expand All @@ -74,8 +78,7 @@ def __classcall_private__(cls, X=None):
Category of schemes over Integer Ring
"""
if X is not None:
from sage.schemes.generic.scheme import is_Scheme
if not is_Scheme(X):
if X not in Schemes():
X = Schemes()(X)
return Schemes_over_base(X)
return super().__classcall__(cls)
Expand Down Expand Up @@ -156,9 +159,6 @@ def _call_(self, x):
raise TypeError("No way to create an object or morphism in %s from %s" % (self, x))


#############################################################
# Schemes over a given base scheme.
#############################################################
class Schemes_over_base(Category_over_base):
"""
The category of schemes over a given base scheme.
Expand All @@ -173,7 +173,6 @@ class Schemes_over_base(Category_over_base):
sage: C = Schemes(ZZ)
sage: TestSuite(C).run()
"""

def base_scheme(self):
"""
EXAMPLES::
Expand All @@ -199,12 +198,12 @@ def _repr_object_names(self):
sage: Schemes(Spec(ZZ)) # indirect doctest
Category of schemes over Integer Ring
"""
# To work around the name of the class (schemes_over_base)
from sage.schemes.generic.scheme import is_AffineScheme
if is_AffineScheme(self.base_scheme()):
return "schemes over %s" % self.base_scheme().coordinate_ring()
else:
return "schemes over %s" % self.base_scheme()
base = self.base()
if is_AffineScheme(base):
base = base.coordinate_ring()
return f"schemes over {base}"


class AbelianVarieties(Schemes_over_base):
r"""
Expand Down Expand Up @@ -237,6 +236,18 @@ def __init__(self, base):
raise ValueError('category of abelian varieties is only defined over fields')
super().__init__(base)

def base_scheme(self):
"""
EXAMPLES::

sage: Schemes(Spec(ZZ)).base_scheme()
Spectrum of Integer Ring
"""
base = self.base()
if base not in Schemes():
base = Schemes()(base)
return base

def super_categories(self):
"""
EXAMPLES::
Expand All @@ -254,7 +265,7 @@ def _repr_object_names(self):
sage: AbelianVarieties(Spec(QQ)) # indirect doctest
Category of abelian varieties over Rational Field
"""
return "abelian varieties over %s" % self.base_scheme()
return "abelian varieties over %s" % self.base()

class Homsets(HomsetsCategory):
r"""
Expand Down Expand Up @@ -295,3 +306,87 @@ def extra_super_categories(self):
True
"""
return [Rings()]


class Jacobians(Schemes_over_base):
"""
The category of Jacobians attached to curves or function fields.

EXAMPLES::

sage: Jacobians(QQ)
Category of Jacobians over Rational Field

TESTS::

sage: TestSuite(Jacobians(QQ)).run()
"""
Comment thread
kwankyu marked this conversation as resolved.
def __init__(self, base):
r"""
Constructor of this category.

EXAMPLES::

sage: Jacobians(QQ)
Category of Jacobians over Rational Field
sage: Jacobians(Spec(QQ))
Category of Jacobians over Rational Field
"""
from sage.schemes.generic.scheme import is_AffineScheme
if is_AffineScheme(base):
base = base.coordinate_ring()
if base not in Fields():
raise ValueError('category of Jacobians is only defined over fields')
super().__init__(base)

def base_scheme(self):
"""
Return the base scheme of this Jacobians category.

EXAMPLES::

sage: Jacobians(QQ).base_scheme()
Spectrum of Rational Field
"""
base = self.base()
if base not in Schemes():
base = Schemes()(base)
return base

def super_categories(self):
"""
Return the super categories of this Jacobians category.

EXAMPLES::

sage: Jacobians(QQ).super_categories()
[Category of abelian varieties over Rational Field]
"""
return [AbelianVarieties(self.base_scheme())]

def _repr_object_names(self):
"""
Return the string representation of this category.

EXAMPLES::

sage: Jacobians(Spec(QQ)) # indirect doctest
Category of Jacobians over Rational Field
"""
return "Jacobians over %s" % self.base()

class ParentMethods:

@abstract_method
def base_curve(self):
"""
Return the curve to which this Jacobian is attached.

EXAMPLES::

sage: # needs sage.rings.function_field
sage: K.<x> = FunctionField(GF(2))
sage: J = K.jacobian()
sage: J.base_curve()
Rational function field in x over Finite Field of size 2
"""
Original file line number Diff line number Diff line change
Expand Up @@ -2066,7 +2066,7 @@ def scalar_multiplication(self, x):
sage: phi = DrinfeldModule(A, [z, 0, 1, z])
sage: phi
Drinfeld module defined by T |--> z*t^3 + t^2 + z
sage: phi.hom(T)
sage: phi.hom(T) # indirect doctest
Endomorphism of Drinfeld module defined by T |--> z*t^3 + t^2 + z
Defn: z*t^3 + t^2 + z

Expand Down
Loading