Set of homomorphisms between two projective schemes - Schemes

Skip to content
Back to top
View this page
Edit this page

# Set of homomorphisms between two projective schemes

For schemes \(X\) and \(Y\), this module implements the set of morphisms \(Hom(X,Y)\). This is done by `SchemeHomset_generic`.

As a special case, the Hom-sets can also represent the points of a scheme. Recall that the \(K\)-rational points of a scheme \(X\) over \(k\) can be identified with the set of morphisms \(Spec(K) \to X\). In Sage the rational points are implemented by such scheme morphisms. This is done by `SchemeHomset_points` and its subclasses.

Note

You should not create the Hom-sets manually. Instead, use the `Hom()` method that is inherited by all schemes.

AUTHORS:

- William Stein (2006): initial version.

- Volker Braun (2011-08-11): significant improvement and refactoring.

- Ben Hutz (June 2012): added support for projective ring

- Ben Hutz (2018): add numerical point support

class sage.schemes.projective.projective_homset.SchemeHomset_points_abelian_variety_field(X, Y, category=None, check=True, base=Integer Ring)

  Bases: `SchemeHomset_points_projective_field`

  Set of rational points of an Abelian variety.

  INPUT:

  See `SchemeHomset_generic`.

  base_extend(R)

    Extend the base ring.

    This is currently not implemented except for the trivial case `R==ZZ`.

    INPUT:

    - `R` – a ring

    EXAMPLES:

    Sage

        sage: # needs sage.schemes
        sage: E = EllipticCurve('37a')
        sage: Hom = E.point_homset();  Hom
        Abelian group of points on Elliptic Curve defined
         by y^2 + y = x^3 - x over Rational Field
        sage: Hom.base_ring()
        Rational Field
        sage: Hom.base_extend(QQ)
        Traceback (most recent call last):
        ...
        NotImplementedError: Abelian variety point sets are not
        implemented as modules over rings other than ZZ

    Python

        >>> from sage.all import *
        >>> # needs sage.schemes
        >>> E = EllipticCurve('37a')
        >>> Hom = E.point_homset();  Hom
        Abelian group of points on Elliptic Curve defined
         by y^2 + y = x^3 - x over Rational Field
        >>> Hom.base_ring()
        Rational Field
        >>> Hom.base_extend(QQ)
        Traceback (most recent call last):
        ...
        NotImplementedError: Abelian variety point sets are not
        implemented as modules over rings other than ZZ

  zero()

    Return the neutral element in this group of points.

    EXAMPLES:

    Sage

        sage: S = EllipticCurve(GF(5), [1,1]).point_homset()
        sage: S.zero()
        (0 : 1 : 0)
        sage: S = EllipticCurve(Zmod(15), [1,1]).point_homset()
        sage: S.zero()
        (0 : 1 : 0)

    Python

        >>> from sage.all import *
        >>> S = EllipticCurve(GF(Integer(5)), [Integer(1),Integer(1)]).point_homset()
        >>> S.zero()
        (0 : 1 : 0)
        >>> S = EllipticCurve(Zmod(Integer(15)), [Integer(1),Integer(1)]).point_homset()
        >>> S.zero()
        (0 : 1 : 0)

class sage.schemes.projective.projective_homset.SchemeHomset_points_projective_field(X, Y, category=None, check=True, base=Integer Ring)

  Bases: `SchemeHomset_points`

  Set of rational points of a projective variety over a field.

  INPUT:

  See `SchemeHomset_generic`.

  EXAMPLES:

  Sage

      sage: from sage.schemes.projective.projective_homset import SchemeHomset_points_projective_field
      sage: SchemeHomset_points_projective_field(Spec(QQ), ProjectiveSpace(QQ,2))
      Set of rational points of Projective Space of dimension 2 over Rational Field

  Python

      >>> from sage.all import *
      >>> from sage.schemes.projective.projective_homset import SchemeHomset_points_projective_field
      >>> SchemeHomset_points_projective_field(Spec(QQ), ProjectiveSpace(QQ,Integer(2)))
      Set of rational points of Projective Space of dimension 2 over Rational Field

  numerical_points(F=None, **kwds)

    Return some or all numerical approximations of rational points of a projective scheme.

    This is for dimension 0 subschemes only and the points are determined through a groebner calculation over the base ring and then numerically approximating the roots of the resulting polynomials. If the base ring is a number field, the embedding into `F` must be known.

    INPUT:

    - `F` – numerical ring

    kwds:

    - `point_tolerance` – positive real number (default: \(10^{-10}\)). For numerically inexact fields, two points are considered the same if their coordinates are within tolerance.

    - `zero_tolerance` – positive real number (default: \(10^{-10}\)). For numerically inexact fields, points are on the subscheme if they satisfy the equations to within tolerance.

    OUTPUT: list of points in the ambient space

    Warning

    For numerically inexact fields the list of points returned may contain repeated or be missing points due to tolerance.

    EXAMPLES:

    Sage

        sage: P.<x,y,z> = ProjectiveSpace(QQ, 2)
        sage: E = P.subscheme([y^3 - x^3 - x*z^2, x*y*z])
        sage: L = E(QQ).numerical_points(F=RR); L                                   # needs sage.libs.singular
        [(0.000000000000000 : 0.000000000000000 : 1.00000000000000),
         (1.00000000000000 : 1.00000000000000 : 0.000000000000000)]
        sage: L[0].codomain()                                                       # needs sage.libs.singular
        Projective Space of dimension 2 over Real Field with 53 bits of precision

    Python

        >>> from sage.all import *
        >>> P = ProjectiveSpace(QQ, Integer(2), names=('x', 'y', 'z',)); (x, y, z,) = P._first_ngens(3)
        >>> E = P.subscheme([y**Integer(3) - x**Integer(3) - x*z**Integer(2), x*y*z])
        >>> L = E(QQ).numerical_points(F=RR); L                                   # needs sage.libs.singular
        [(0.000000000000000 : 0.000000000000000 : 1.00000000000000),
         (1.00000000000000 : 1.00000000000000 : 0.000000000000000)]
        >>> L[Integer(0)].codomain()                                                       # needs sage.libs.singular
        Projective Space of dimension 2 over Real Field with 53 bits of precision

    Sage

        sage: S.<a> = QQ[]
        sage: K.<v> = NumberField(a^5 - 7, embedding=CC(7)**(1/5))                  # needs sage.rings.number_field
        sage: P.<x,y,z> = ProjectiveSpace(K, 2)                                     # needs sage.rings.number_field
        sage: X = P.subscheme([x^2 - v^2*z^2, y - v*z])                             # needs sage.rings.number_field
        sage: len(X(K).numerical_points(F=CDF))                                     # needs sage.libs.singular sage.rings.number_field
        2

    [Python]

        >>> from sage.all import *
        >>> S = QQ['a']; (a,) = S._first_ngens(1)
        >>> K = NumberField(a**Integer(5) - Integer(7), embedding=CC(Integer(7))**(Integer(1)/Integer(5)), names=('v',)); (v,) = K._first_ngens(1)# needs sage.rings.number_field
        >>> P = ProjectiveSpace(K, Integer(2), names=('x', 'y', 'z',)); (x, y, z,) = P._first_ngens(3)# needs sage.rings.number_field
        >>> X = P.subscheme([x**Integer(2) - v**Integer(2)*z**Integer(2), y - v*z])                             # needs sage.rings.number_field
        >>> len(X(K).numerical_points(F=CDF))                                     # needs sage.libs.singular sage.rings.number_field
        2

    Sage

        sage: P.<x1, x2, x3> = ProjectiveSpace(QQ, 2)
        sage: E = P.subscheme([3000*x1^50 + 9875643*x2^2*x3^48 + 12334545*x2^50, x1 + x2])
        sage: len(E(P.base_ring()).numerical_points(F=CDF, zero_tolerance=1e-6))    # needs sage.libs.singular
        49

    Python

        >>> from sage.all import *
        >>> P = ProjectiveSpace(QQ, Integer(2), names=('x1', 'x2', 'x3',)); (x1, x2, x3,) = P._first_ngens(3)
        >>> E = P.subscheme([Integer(3000)*x1**Integer(50) + Integer(9875643)*x2**Integer(2)*x3**Integer(48) + Integer(12334545)*x2**Integer(50), x1 + x2])
        >>> len(E(P.base_ring()).numerical_points(F=CDF, zero_tolerance=RealNumber('1e-6')))    # needs sage.libs.singular
        49

  points(**kwds)

    Return some or all rational points of a projective scheme.

    For dimension 0 subschemes points are determined through a groebner basis calculation. For schemes or subschemes with dimension greater than 1 points are determined through enumeration up to the specified bound.

    INPUT: keyword arguments:

    - `bound` – real number (default: 0); the bound for the coordinates for subschemes with dimension at least 1

    - `precision` – integer (default: 53); the precision to use to compute the elements of bounded height for number fields

    - `point_tolerance` – positive real number (default: \(10^{-10}\)); for numerically inexact fields, two points are considered the same if their coordinates are within tolerance

    - `zero_tolerance` – positive real number (default: \(10^{-10}\)); for numerically inexact fields, points are on the subscheme if they satisfy the equations to within tolerance

    - `tolerance` – a rational number in (0,1] used in Doyle-Krumm algorithm-4 for enumeration over number fields

    OUTPUT: list of rational points of a projective scheme

    Warning

    For numerically inexact fields such as ComplexField or RealField the list of points returned is very likely to be incomplete. It may also contain repeated points due to tolerances.

    EXAMPLES:

    Sage

        sage: P.<x,y> = ProjectiveSpace(QQ, 1)
        sage: P(QQ).points(bound=4)
        [(-4 : 1), (-3 : 1), (-2 : 1), (-3/2 : 1), (-4/3 : 1), (-1 : 1),
         (-3/4 : 1), (-2/3 : 1), (-1/2 : 1), (-1/3 : 1), (-1/4 : 1), (0 : 1),
         (1/4 : 1), (1/3 : 1), (1/2 : 1), (2/3 : 1), (3/4 : 1), (1 : 0), (1 : 1),
         (4/3 : 1), (3/2 : 1), (2 : 1), (3 : 1), (4 : 1)]

    Python

        >>> from sage.all import *
        >>> P = ProjectiveSpace(QQ, Integer(1), names=('x', 'y',)); (x, y,) = P._first_ngens(2)
        >>> P(QQ).points(bound=Integer(4))
        [(-4 : 1), (-3 : 1), (-2 : 1), (-3/2 : 1), (-4/3 : 1), (-1 : 1),
         (-3/4 : 1), (-2/3 : 1), (-1/2 : 1), (-1/3 : 1), (-1/4 : 1), (0 : 1),
         (1/4 : 1), (1/3 : 1), (1/2 : 1), (2/3 : 1), (3/4 : 1), (1 : 0), (1 : 1),
         (4/3 : 1), (3/2 : 1), (2 : 1), (3 : 1), (4 : 1)]

    Sage

        sage: u = QQ['u'].0
        sage: K.<v> = NumberField(u^2 + 3)                                          # needs sage.rings.number_field
        sage: P.<x,y,z> = ProjectiveSpace(K, 2)                                     # needs sage.rings.number_field
        sage: len(P(K).points(bound=1.8))                                           # needs sage.rings.number_field
        309

    [Python]

        >>> from sage.all import *
        >>> u = QQ['u'].gen(0)
        >>> K = NumberField(u**Integer(2) + Integer(3), names=('v',)); (v,) = K._first_ngens(1)# needs sage.rings.number_field
        >>> P = ProjectiveSpace(K, Integer(2), names=('x', 'y', 'z',)); (x, y, z,) = P._first_ngens(3)# needs sage.rings.number_field
        >>> len(P(K).points(bound=RealNumber('1.8')))                                           # needs sage.rings.number_field
        309

    Sage

        sage: P1 = ProjectiveSpace(GF(2), 1)
        sage: F.<a> = GF(4, 'a')                                                    # needs sage.rings.finite_rings
        sage: P1(F).points()                                                        # needs sage.libs.singular sage.rings.finite_rings
        [(0 : 1), (1 : 0), (1 : 1), (a : 1), (a + 1 : 1)]

    Python

        >>> from sage.all import *
        >>> P1 = ProjectiveSpace(GF(Integer(2)), Integer(1))
        >>> F = GF(Integer(4), 'a', names=('a',)); (a,) = F._first_ngens(1)# needs sage.rings.finite_rings
        >>> P1(F).points()                                                        # needs sage.libs.singular sage.rings.finite_rings
        [(0 : 1), (1 : 0), (1 : 1), (a : 1), (a + 1 : 1)]

    Sage

        sage: P.<x,y,z> = ProjectiveSpace(QQ, 2)
        sage: E = P.subscheme([(y^3-y*z^2) - (x^3-x*z^2), (y^3-y*z^2) + (x^3-x*z^2)])
        sage: E(P.base_ring()).points()                                             # needs sage.libs.singular
        [(-1 : -1 : 1), (-1 : 0 : 1), (-1 : 1 : 1), (0 : -1 : 1), (0 : 0 : 1),
         (0 : 1 : 1), (1 : -1 : 1), (1 : 0 : 1), (1 : 1 : 1)]

    [Python]

        >>> from sage.all import *
        >>> P = ProjectiveSpace(QQ, Integer(2), names=('x', 'y', 'z',)); (x, y, z,) = P._first_ngens(3)
        >>> E = P.subscheme([(y**Integer(3)-y*z**Integer(2)) - (x**Integer(3)-x*z**Integer(2)), (y**Integer(3)-y*z**Integer(2)) + (x**Integer(3)-x*z**Integer(2))])
        >>> E(P.base_ring()).points()                                             # needs sage.libs.singular
        [(-1 : -1 : 1), (-1 : 0 : 1), (-1 : 1 : 1), (0 : -1 : 1), (0 : 0 : 1),
         (0 : 1 : 1), (1 : -1 : 1), (1 : 0 : 1), (1 : 1 : 1)]

    Sage

        sage: # needs sage.rings.real_mpfr
        sage: P.<x,y,z> = ProjectiveSpace(CC, 2)
        sage: E = P.subscheme([y^3 - x^3 - x*z^2, x*y*z])
        sage: L = E(P.base_ring()).points(); sorted(L, key=str)                     # needs sage.libs.singular
        verbose 0 (...: projective_homset.py, points) Warning: computations in
        the numerical fields are inexact;points may be computed partially or incorrectly.
        [(-0.500000000000000 + 0.866025403784439*I : 1.00000000000000 : 0.000000000000000),
         (-0.500000000000000 - 0.866025403784439*I : 1.00000000000000 : 0.000000000000000),
         (-1.00000000000000*I : 0.000000000000000 : 1.00000000000000),
         (0.000000000000000 : 0.000000000000000 : 1.00000000000000),
         (1.00000000000000 : 1.00000000000000 : 0.000000000000000),
         (1.00000000000000*I : 0.000000000000000 : 1.00000000000000)]
        sage: L[0].codomain()                                                       # needs sage.libs.singular
        Projective Space of dimension 2 over Complex Field with 53 bits of precision

    Python

        >>> from sage.all import *
        >>> # needs sage.rings.real_mpfr
        >>> P = ProjectiveSpace(CC, Integer(2), names=('x', 'y', 'z',)); (x, y, z,) = P._first_ngens(3)
        >>> E = P.subscheme([y**Integer(3) - x**Integer(3) - x*z**Integer(2), x*y*z])
        >>> L = E(P.base_ring()).points(); sorted(L, key=str)                     # needs sage.libs.singular
        verbose 0 (...: projective_homset.py, points) Warning: computations in
        the numerical fields are inexact;points may be computed partially or incorrectly.
        [(-0.500000000000000 + 0.866025403784439*I : 1.00000000000000 : 0.000000000000000),
         (-0.500000000000000 - 0.866025403784439*I : 1.00000000000000 : 0.000000000000000),
         (-1.00000000000000*I : 0.000000000000000 : 1.00000000000000),
         (0.000000000000000 : 0.000000000000000 : 1.00000000000000),
         (1.00000000000000 : 1.00000000000000 : 0.000000000000000),
         (1.00000000000000*I : 0.000000000000000 : 1.00000000000000)]
        >>> L[Integer(0)].codomain()                                                       # needs sage.libs.singular
        Projective Space of dimension 2 over Complex Field with 53 bits of precision

    Sage

        sage: # needs sage.rings.complex_double
        sage: P.<x,y,z> = ProjectiveSpace(CDF, 2)
        sage: E = P.subscheme([y^2 + x^2 + z^2, x*y*z])
        sage: len(E(P.base_ring()).points())                                        # needs sage.libs.singular
        verbose 0 (...: projective_homset.py, points) Warning: computations in
        the numerical fields are inexact;points may be computed partially or incorrectly.
        6

    [Python]

        >>> from sage.all import *
        >>> # needs sage.rings.complex_double
        >>> P = ProjectiveSpace(CDF, Integer(2), names=('x', 'y', 'z',)); (x, y, z,) = P._first_ngens(3)
        >>> E = P.subscheme([y**Integer(2) + x**Integer(2) + z**Integer(2), x*y*z])
        >>> len(E(P.base_ring()).points())                                        # needs sage.libs.singular
        verbose 0 (...: projective_homset.py, points) Warning: computations in
        the numerical fields are inexact;points may be computed partially or incorrectly.
        6

class sage.schemes.projective.projective_homset.SchemeHomset_points_projective_ring(X, Y, category=None, check=True, base=Integer Ring)

  Bases: `SchemeHomset_points`

  Set of rational points of a projective variety over a commutative ring.

  INPUT:

  See `SchemeHomset_generic`.

  EXAMPLES:

  Sage

      sage: from sage.schemes.projective.projective_homset import SchemeHomset_points_projective_ring
      sage: SchemeHomset_points_projective_ring(Spec(ZZ), ProjectiveSpace(ZZ,2))
      Set of rational points of Projective Space of dimension 2 over Integer Ring

  Python

      >>> from sage.all import *
      >>> from sage.schemes.projective.projective_homset import SchemeHomset_points_projective_ring
      >>> SchemeHomset_points_projective_ring(Spec(ZZ), ProjectiveSpace(ZZ,Integer(2)))
      Set of rational points of Projective Space of dimension 2 over Integer Ring

  points(B=0)

    Return some or all rational points of a projective scheme.

    INPUT:

    - `B` – integer (default: 0); the bound for the coordinates

    EXAMPLES:

    Sage

        sage: from sage.schemes.projective.projective_homset import SchemeHomset_points_projective_ring
        sage: H = SchemeHomset_points_projective_ring(Spec(ZZ), ProjectiveSpace(ZZ, 2))
        sage: H.points(3)
        [(0 : 0 : 1), (0 : 1 : -3), (0 : 1 : -2), (0 : 1 : -1), (0 : 1 : 0), (0 : 1 : 1),
         (0 : 1 : 2), (0 : 1 : 3), (0 : 2 : -3), (0 : 2 : -1), (0 : 2 : 1), (0 : 2 : 3),
         (0 : 3 : -2), (0 : 3 : -1), (0 : 3 : 1), (0 : 3 : 2), (1 : -3 : -3),
         (1 : -3 : -2), (1 : -3 : -1), (1 : -3 : 0), (1 : -3 : 1), (1 : -3 : 2),
         (1 : -3 : 3), (1 : -2 : -3), (1 : -2 : -2), (1 : -2 : -1), (1 : -2 : 0),
         (1 : -2 : 1), (1 : -2 : 2), (1 : -2 : 3), (1 : -1 : -3), (1 : -1 : -2),
         (1 : -1 : -1), (1 : -1 : 0), (1 : -1 : 1), (1 : -1 : 2), (1 : -1 : 3),
         (1 : 0 : -3), (1 : 0 : -2), (1 : 0 : -1), (1 : 0 : 0), (1 : 0 : 1), (1 : 0 : 2),
         (1 : 0 : 3), (1 : 1 : -3), (1 : 1 : -2), (1 : 1 : -1), (1 : 1 : 0), (1 : 1 : 1),
         (1 : 1 : 2), (1 : 1 : 3), (1 : 2 : -3), (1 : 2 : -2), (1 : 2 : -1), (1 : 2 : 0),
         (1 : 2 : 1), (1 : 2 : 2), (1 : 2 : 3), (1 : 3 : -3), (1 : 3 : -2), (1 : 3 : -1),
         (1 : 3 : 0), (1 : 3 : 1), (1 : 3 : 2), (1 : 3 : 3), (2 : -3 : -3),
         (2 : -3 : -2), (2 : -3 : -1), (2 : -3 : 0), (2 : -3 : 1), (2 : -3 : 2),
         (2 : -3 : 3), (2 : -2 : -3), (2 : -2 : -1), (2 : -2 : 1), (2 : -2 : 3),
         (2 : -1 : -3), (2 : -1 : -2), (2 : -1 : -1), (2 : -1 : 0), (2 : -1 : 1),
         (2 : -1 : 2), (2 : -1 : 3), (2 : 0 : -3), (2 : 0 : -1), (2 : 0 : 1),
         (2 : 0 : 3), (2 : 1 : -3), (2 : 1 : -2), (2 : 1 : -1), (2 : 1 : 0), (2 : 1 : 1),
         (2 : 1 : 2), (2 : 1 : 3), (2 : 2 : -3), (2 : 2 : -1), (2 : 2 : 1), (2 : 2 : 3),
         (2 : 3 : -3), (2 : 3 : -2), (2 : 3 : -1), (2 : 3 : 0), (2 : 3 : 1), (2 : 3 : 2),
         (2 : 3 : 3), (3 : -3 : -2), (3 : -3 : -1), (3 : -3 : 1), (3 : -3 : 2),
         (3 : -2 : -3), (3 : -2 : -2), (3 : -2 : -1), (3 : -2 : 0), (3 : -2 : 1),
         (3 : -2 : 2), (3 : -2 : 3), (3 : -1 : -3), (3 : -1 : -2), (3 : -1 : -1),
         (3 : -1 : 0), (3 : -1 : 1), (3 : -1 : 2), (3 : -1 : 3), (3 : 0 : -2),
         (3 : 0 : -1), (3 : 0 : 1), (3 : 0 : 2), (3 : 1 : -3), (3 : 1 : -2),
         (3 : 1 : -1), (3 : 1 : 0), (3 : 1 : 1), (3 : 1 : 2), (3 : 1 : 3), (3 : 2 : -3),
         (3 : 2 : -2), (3 : 2 : -1), (3 : 2 : 0), (3 : 2 : 1), (3 : 2 : 2), (3 : 2 : 3),
         (3 : 3 : -2), (3 : 3 : -1), (3 : 3 : 1), (3 : 3 : 2)]

    Python

        >>> from sage.all import *
        >>> from sage.schemes.projective.projective_homset import SchemeHomset_points_projective_ring
        >>> H = SchemeHomset_points_projective_ring(Spec(ZZ), ProjectiveSpace(ZZ, Integer(2)))
        >>> H.points(Integer(3))
        [(0 : 0 : 1), (0 : 1 : -3), (0 : 1 : -2), (0 : 1 : -1), (0 : 1 : 0), (0 : 1 : 1),
         (0 : 1 : 2), (0 : 1 : 3), (0 : 2 : -3), (0 : 2 : -1), (0 : 2 : 1), (0 : 2 : 3),
         (0 : 3 : -2), (0 : 3 : -1), (0 : 3 : 1), (0 : 3 : 2), (1 : -3 : -3),
         (1 : -3 : -2), (1 : -3 : -1), (1 : -3 : 0), (1 : -3 : 1), (1 : -3 : 2),
         (1 : -3 : 3), (1 : -2 : -3), (1 : -2 : -2), (1 : -2 : -1), (1 : -2 : 0),
         (1 : -2 : 1), (1 : -2 : 2), (1 : -2 : 3), (1 : -1 : -3), (1 : -1 : -2),
         (1 : -1 : -1), (1 : -1 : 0), (1 : -1 : 1), (1 : -1 : 2), (1 : -1 : 3),
         (1 : 0 : -3), (1 : 0 : -2), (1 : 0 : -1), (1 : 0 : 0), (1 : 0 : 1), (1 : 0 : 2),
         (1 : 0 : 3), (1 : 1 : -3), (1 : 1 : -2), (1 : 1 : -1), (1 : 1 : 0), (1 : 1 : 1),
         (1 : 1 : 2), (1 : 1 : 3), (1 : 2 : -3), (1 : 2 : -2), (1 : 2 : -1), (1 : 2 : 0),
         (1 : 2 : 1), (1 : 2 : 2), (1 : 2 : 3), (1 : 3 : -3), (1 : 3 : -2), (1 : 3 : -1),
         (1 : 3 : 0), (1 : 3 : 1), (1 : 3 : 2), (1 : 3 : 3), (2 : -3 : -3),
         (2 : -3 : -2), (2 : -3 : -1), (2 : -3 : 0), (2 : -3 : 1), (2 : -3 : 2),
         (2 : -3 : 3), (2 : -2 : -3), (2 : -2 : -1), (2 : -2 : 1), (2 : -2 : 3),
         (2 : -1 : -3), (2 : -1 : -2), (2 : -1 : -1), (2 : -1 : 0), (2 : -1 : 1),
         (2 : -1 : 2), (2 : -1 : 3), (2 : 0 : -3), (2 : 0 : -1), (2 : 0 : 1),
         (2 : 0 : 3), (2 : 1 : -3), (2 : 1 : -2), (2 : 1 : -1), (2 : 1 : 0), (2 : 1 : 1),
         (2 : 1 : 2), (2 : 1 : 3), (2 : 2 : -3), (2 : 2 : -1), (2 : 2 : 1), (2 : 2 : 3),
         (2 : 3 : -3), (2 : 3 : -2), (2 : 3 : -1), (2 : 3 : 0), (2 : 3 : 1), (2 : 3 : 2),
         (2 : 3 : 3), (3 : -3 : -2), (3 : -3 : -1), (3 : -3 : 1), (3 : -3 : 2),
         (3 : -2 : -3), (3 : -2 : -2), (3 : -2 : -1), (3 : -2 : 0), (3 : -2 : 1),
         (3 : -2 : 2), (3 : -2 : 3), (3 : -1 : -3), (3 : -1 : -2), (3 : -1 : -1),
         (3 : -1 : 0), (3 : -1 : 1), (3 : -1 : 2), (3 : -1 : 3), (3 : 0 : -2),
         (3 : 0 : -1), (3 : 0 : 1), (3 : 0 : 2), (3 : 1 : -3), (3 : 1 : -2),
         (3 : 1 : -1), (3 : 1 : 0), (3 : 1 : 1), (3 : 1 : 2), (3 : 1 : 3), (3 : 2 : -3),
         (3 : 2 : -2), (3 : 2 : -1), (3 : 2 : 0), (3 : 2 : 1), (3 : 2 : 2), (3 : 2 : 3),
         (3 : 3 : -2), (3 : 3 : -1), (3 : 3 : 1), (3 : 3 : 2)]

class sage.schemes.projective.projective_homset.SchemeHomset_polynomial_projective_space(X, Y, category=None, check=True, base=None)

  Bases: `SchemeHomset_generic`

  Set of morphisms of a projective space.

  EXAMPLES:

  Sage

      sage: P.<x,y,z> = ProjectiveSpace(2, QQ)
      sage: Hom(P, P)
      Set of morphisms
        From: Projective Space of dimension 2 over Rational Field
        To:   Projective Space of dimension 2 over Rational Field

  Python

      >>> from sage.all import *
      >>> P = ProjectiveSpace(Integer(2), QQ, names=('x', 'y', 'z',)); (x, y, z,) = P._first_ngens(3)
      >>> Hom(P, P)
      Set of morphisms
        From: Projective Space of dimension 2 over Rational Field
        To:   Projective Space of dimension 2 over Rational Field

  identity()

    Return the identity morphism of this hom-set.

    EXAMPLES:

    Sage

        sage: P.<x,y,z> = ProjectiveSpace(2, QQ)
        sage: Hom(P, P)
        Set of morphisms
          From: Projective Space of dimension 2 over Rational Field
          To:   Projective Space of dimension 2 over Rational Field
        sage: _.identity()
        Scheme endomorphism of Projective Space of dimension 2 over Rational Field
          Defn: Identity map

    Python

        >>> from sage.all import *
        >>> P = ProjectiveSpace(Integer(2), QQ, names=('x', 'y', 'z',)); (x, y, z,) = P._first_ngens(3)
        >>> Hom(P, P)
        Set of morphisms
          From: Projective Space of dimension 2 over Rational Field
          To:   Projective Space of dimension 2 over Rational Field
        >>> _.identity()
        Scheme endomorphism of Projective Space of dimension 2 over Rational Field
          Defn: Identity map