Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
c09a90a
sage.schemes: Add # optional - sage.rings.{number_field,finite_rings,…
mkoeppe Mar 20, 2023
e5e29f7
src/sage/schemes/generic/algebraic_scheme.py: Fix up # optional
mkoeppe Mar 20, 2023
5e7d3f0
sage.schemes: More # optional
mkoeppe Mar 21, 2023
4f53f6e
sage.schemes.curves: Add # optional
mkoeppe Mar 22, 2023
7f6ea46
sage.schemes: Fix up # optional
mkoeppe Mar 22, 2023
b778689
sage.schemes: More cosmetic changes to doctests
mkoeppe Mar 22, 2023
919ed50
sage.schemes: More # optional and cosmetic doctest changes
mkoeppe Mar 22, 2023
47bca76
sage.schemes: More # optional and cosmetic doctest changes (fixup)
mkoeppe Mar 23, 2023
d97da6f
sage.schemes: More cosmetic doctest changes
mkoeppe Mar 23, 2023
0eaf7b1
sage.schemes: More cosmetic doctest changes
mkoeppe Mar 23, 2023
6d21c17
sage.schemes: More # optional and cosmetic doctest changes
mkoeppe Mar 24, 2023
fdb625e
sage.schemes: More # optional and cosmetic doctest changes (fixup)
mkoeppe Mar 24, 2023
a658137
sage.schemes: More cosmetic doctest changes
mkoeppe Mar 24, 2023
2507c8f
sage.schemes: Even more cosmetic doctest changes
mkoeppe Mar 24, 2023
9c7ae71
sage.schemes: Yet more cosmetic doctest changes
mkoeppe Mar 25, 2023
3781322
sage.schemes: Yet more cosmetic doctest changes (fixup)
mkoeppe Mar 25, 2023
61a7aeb
src/sage/schemes/toric/points.py: Fix typo
mkoeppe Mar 25, 2023
7bc90fc
sage.schemes: Some more cosmetic doctest changes
mkoeppe Mar 25, 2023
fbfbd28
src/sage/schemes/affine/affine_homset.py: Add missing space
mkoeppe Mar 29, 2023
0f935d0
src/sage/schemes/elliptic_curves: Revise indentation of multiline doc…
mkoeppe Mar 29, 2023
20bb0f6
src/sage/schemes/curves: Revise indentation of multiline doctest output
mkoeppe Mar 29, 2023
50cc089
src/sage/schemes/elliptic_curves: Revise indentation of multiline doc…
mkoeppe Mar 29, 2023
9cc0865
src/sage/schemes/elliptic_curves/{ell_number_field,height,hom_composi…
mkoeppe Mar 29, 2023
e934a4c
src/sage/schemes: Revise indentation of multiline doctest output
mkoeppe Mar 29, 2023
7e48c64
src/sage/schemes/elliptic_curves/ell_number_field.py: Fix RST markup
mkoeppe Mar 29, 2023
7bc2783
src/sage/schemes: More revisions to the indentation of multiline doct…
mkoeppe Mar 29, 2023
ad35577
src/sage/schemes/berkovich/berkovich_space.py: Fix up # optional
mkoeppe Mar 30, 2023
2564510
src/sage/schemes/elliptic_curves/hom_frobenius.py: Mark sage.doctest:…
mkoeppe Mar 30, 2023
fcdd127
src/sage/schemes/elliptic_curves/isogeny_class.py: Mark sage.doctest:…
mkoeppe Mar 30, 2023
7f9cb68
src/sage/schemes/elliptic_curves/isogeny_small_degree.py: Add # optio…
mkoeppe Mar 30, 2023
3b34a78
src/sage/schemes/overview.py: Fix up # optional
mkoeppe Mar 30, 2023
a9588d1
src/sage/schemes/{affine,projective}: Cosmetic changes to doctests
mkoeppe Mar 30, 2023
912e520
src/sage/schemes/elliptic_curves/ell_generic.py: Fix up doctest
mkoeppe Apr 2, 2023
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
32 changes: 18 additions & 14 deletions src/sage/schemes/affine/affine_homset.py
Original file line number Diff line number Diff line change
Expand Up @@ -210,14 +210,14 @@ def points(self, **kwds):
EXAMPLES: The bug reported at #11526 is fixed::

sage: A2 = AffineSpace(ZZ, 2)
sage: F = GF(3)
sage: A2(F).points()
sage: F = GF(3) # optional - sage.rings.finite_rings
sage: A2(F).points() # optional - sage.rings.finite_rings
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

::

sage: A.<x,y> = ZZ[]
sage: I = A.ideal(x^2-y^2-1)
sage: I = A.ideal(x^2 - y^2 - 1)
sage: V = AffineSpace(ZZ, 2)
sage: X = V.subscheme(I)
sage: M = X(ZZ)
Expand All @@ -227,9 +227,9 @@ def points(self, **kwds):
::

sage: u = QQ['u'].0
sage: K.<v> = NumberField(u^2 + 3)
sage: A.<x,y> = AffineSpace(K, 2)
sage: len(A(K).points(bound=2))
sage: K.<v> = NumberField(u^2 + 3) # optional - sage.rings.number_field
sage: A.<x,y> = AffineSpace(K, 2) # optional - sage.rings.number_field
sage: len(A(K).points(bound=2)) # optional - sage.rings.number_field
1849

::
Expand All @@ -244,16 +244,20 @@ def points(self, **kwds):
sage: A.<x,y> = AffineSpace(CC, 2)
sage: E = A.subscheme([y^3 - x^3 - x^2, x*y])
sage: E(A.base_ring()).points()
verbose 0 (...: affine_homset.py, points) Warning: computations in the numerical fields are inexact;points may be computed partially or incorrectly.
verbose 0 (...: affine_homset.py, points)
Warning: computations in the numerical fields are inexact;points
may be computed partially or incorrectly.
[(-1.00000000000000, 0.000000000000000),
(0.000000000000000, 0.000000000000000)]
(0.000000000000000, 0.000000000000000)]

::

sage: A.<x1,x2> = AffineSpace(CDF, 2)
sage: E = A.subscheme([x1^2 + x2^2 + x1*x2, x1 + x2])
sage: E(A.base_ring()).points()
verbose 0 (...: affine_homset.py, points) Warning: computations in the numerical fields are inexact;points may be computed partially or incorrectly.
verbose 0 (...: affine_homset.py, points)
Warning: computations in the numerical fields are inexact;points
may be computed partially or incorrectly.
[(0.0, 0.0)]
"""
from sage.schemes.affine.affine_space import is_AffineSpace
Expand Down Expand Up @@ -388,14 +392,14 @@ def numerical_points(self, F=None, **kwds):

EXAMPLES::

sage: K.<v> = QuadraticField(3)
sage: A.<x,y> = AffineSpace(K, 2)
sage: X = A.subscheme([x^3 - v^2*y, y - v*x^2 + 3])
sage: L = X(K).numerical_points(F=RR); L # abs tol 1e-14
sage: K.<v> = QuadraticField(3) # optional - sage.rings.number_field
sage: A.<x,y> = AffineSpace(K, 2) # optional - sage.rings.number_field
sage: X = A.subscheme([x^3 - v^2*y, y - v*x^2 + 3]) # optional - sage.rings.number_field
sage: L = X(K).numerical_points(F=RR); L # abs tol 1e-14 # optional - sage.rings.number_field
[(-1.18738247880014, -0.558021142104134),
(1.57693558184861, 1.30713548084184),
(4.80659931965815, 37.0162574656220)]
sage: L[0].codomain()
sage: L[0].codomain() # optional - sage.rings.number_field
Affine Space of dimension 2 over Real Field with 53 bits of precision

::
Expand Down
431 changes: 209 additions & 222 deletions src/sage/schemes/affine/affine_morphism.py

Large diffs are not rendered by default.

62 changes: 31 additions & 31 deletions src/sage/schemes/affine/affine_point.py
Original file line number Diff line number Diff line change
Expand Up @@ -194,9 +194,9 @@ def global_height(self, prec=None):
::

sage: R.<x> = PolynomialRing(QQ)
sage: k.<w> = NumberField(x^2+5)
sage: A = AffineSpace(k, 2, 'z')
sage: A([3, 5*w+1]).global_height(prec=100)
sage: k.<w> = NumberField(x^2 + 5) # optional - sage.rings.number_field
sage: A = AffineSpace(k, 2, 'z') # optional - sage.rings.number_field
sage: A([3, 5*w + 1]).global_height(prec=100) # optional - sage.rings.number_field
2.4181409534757389986565376694

.. TODO::
Expand Down Expand Up @@ -289,24 +289,24 @@ def weil_restriction(self):

EXAMPLES::

sage: A.<x,y,z> = AffineSpace(GF(5^3, 't'), 3)
sage: X = A.subscheme([y^2-x*z, z^2+y])
sage: Y = X.weil_restriction()
sage: P = X([1, -1, 1])
sage: Q = P.weil_restriction();Q
sage: A.<x,y,z> = AffineSpace(GF(5^3, 't'), 3) # optional - sage.rings.finite_rings
sage: X = A.subscheme([y^2 - x*z, z^2 + y]) # optional - sage.rings.finite_rings
sage: Y = X.weil_restriction() # optional - sage.rings.finite_rings
sage: P = X([1, -1, 1]) # optional - sage.rings.finite_rings
sage: Q = P.weil_restriction();Q # optional - sage.rings.finite_rings
(1, 0, 0, 4, 0, 0, 1, 0, 0)
sage: Q.codomain() == Y
sage: Q.codomain() == Y # optional - sage.rings.finite_rings
True

::

sage: R.<x> = QQ[]
sage: K.<w> = NumberField(x^5-2)
sage: R.<x> = K[]
sage: L.<v> = K.extension(x^2+w)
sage: A.<x,y> = AffineSpace(L, 2)
sage: P = A([w^3-v,1+w+w*v])
sage: P.weil_restriction()
sage: K.<w> = NumberField(x^5 - 2) # optional - sage.rings.number_field
sage: R.<x> = K[] # optional - sage.rings.number_field
sage: L.<v> = K.extension(x^2 + w) # optional - sage.rings.number_field
sage: A.<x,y> = AffineSpace(L, 2) # optional - sage.rings.number_field
sage: P = A([w^3 - v, 1 + w + w*v]) # optional - sage.rings.number_field
sage: P.weil_restriction() # optional - sage.rings.number_field
(w^3, -1, w + 1, w)
"""
L = self.codomain().base_ring()
Expand Down Expand Up @@ -356,14 +356,14 @@ def intersection_multiplicity(self, X):

EXAMPLES::

sage: A.<x,y> = AffineSpace(GF(17), 2)
sage: X = A.subscheme([y^2 - x^3 + 2*x^2 - x])
sage: Y = A.subscheme([y - 2*x + 2])
sage: Q1 = Y([1,0])
sage: Q1.intersection_multiplicity(X)
sage: A.<x,y> = AffineSpace(GF(17), 2) # optional - sage.rings.finite_rings
sage: X = A.subscheme([y^2 - x^3 + 2*x^2 - x]) # optional - sage.rings.finite_rings
sage: Y = A.subscheme([y - 2*x + 2]) # optional - sage.rings.finite_rings
sage: Q1 = Y([1,0]) # optional - sage.rings.finite_rings
sage: Q1.intersection_multiplicity(X) # optional - sage.rings.finite_rings
2
sage: Q2 = X([4,6])
sage: Q2.intersection_multiplicity(Y)
sage: Q2 = X([4,6]) # optional - sage.rings.finite_rings
sage: Q2.intersection_multiplicity(Y) # optional - sage.rings.finite_rings
1

::
Expand Down Expand Up @@ -416,27 +416,27 @@ def __hash__(self):

EXAMPLES::

sage: P.<x,y,z> = AffineSpace(GF(5), 3)
sage: hash(P(2, 1, 2))
sage: P.<x,y,z> = AffineSpace(GF(5), 3) # optional - sage.rings.finite_rings
sage: hash(P(2, 1, 2)) # optional - sage.rings.finite_rings
57

::

sage: P.<x,y,z> = AffineSpace(GF(7), 3)
sage: X = P.subscheme(x^2-y^2)
sage: hash(X(1, 1, 2))
sage: P.<x,y,z> = AffineSpace(GF(7), 3) # optional - sage.rings.finite_rings
sage: X = P.subscheme(x^2 - y^2) # optional - sage.rings.finite_rings
sage: hash(X(1, 1, 2)) # optional - sage.rings.finite_rings
106

::

sage: P.<x,y> = AffineSpace(GF(13), 2)
sage: hash(P(3, 4))
sage: P.<x,y> = AffineSpace(GF(13), 2) # optional - sage.rings.finite_rings
sage: hash(P(3, 4)) # optional - sage.rings.finite_rings
55

::

sage: P.<x,y> = AffineSpace(GF(13^3, 't'), 2)
sage: hash(P(3, 4))
sage: P.<x,y> = AffineSpace(GF(13^3, 't'), 2) # optional - sage.rings.finite_rings
sage: hash(P(3, 4)) # optional - sage.rings.finite_rings
8791
"""
p = self.codomain().base_ring().order()
Expand Down
91 changes: 46 additions & 45 deletions src/sage/schemes/affine/affine_rational_point.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,16 @@

sage: from sage.schemes.affine.affine_rational_point import enum_affine_rational_field
sage: A.<x,y,z> = AffineSpace(3, QQ)
sage: S = A.subscheme([2*x-3*y])
sage: S = A.subscheme([2*x - 3*y])
sage: enum_affine_rational_field(S, 2)
[(0, 0, -2), (0, 0, -1), (0, 0, -1/2), (0, 0, 0),
(0, 0, 1/2), (0, 0, 1), (0, 0, 2)]

Affine over a finite field::

sage: from sage.schemes.affine.affine_rational_point import enum_affine_finite_field
sage: A.<w,x,y,z> = AffineSpace(4, GF(2))
sage: enum_affine_finite_field(A(GF(2)))
sage: A.<w,x,y,z> = AffineSpace(4, GF(2)) # optional - sage.rings.finite_rings
sage: enum_affine_finite_field(A(GF(2))) # optional - sage.rings.finite_rings
[(0, 0, 0, 0), (0, 0, 0, 1), (0, 0, 1, 0), (0, 0, 1, 1), (0, 1, 0, 0),
(0, 1, 0, 1), (0, 1, 1, 0), (0, 1, 1, 1), (1, 0, 0, 0), (1, 0, 0, 1),
(1, 0, 1, 0), (1, 0, 1, 1), (1, 1, 0, 0), (1, 1, 0, 1), (1, 1, 1, 0),
Expand Down Expand Up @@ -77,15 +77,15 @@ def enum_affine_rational_field(X, B):
sage: from sage.schemes.affine.affine_rational_point import enum_affine_rational_field
sage: enum_affine_rational_field(A(QQ), 1)
[(-1, -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), (0, -1, -1), (0, -1, 0), (0, -1, 1),
(0, 0, -1), (0, 0, 0), (0, 0, 1), (0, 1, -1), (0, 1, 0), (0, 1, 1), (1, -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, 1, -1), (-1, 1, 0), (-1, 1, 1), (0, -1, -1), (0, -1, 0), (0, -1, 1),
(0, 0, -1), (0, 0, 0), (0, 0, 1), (0, 1, -1), (0, 1, 0), (0, 1, 1), (1, -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)]

::

sage: A.<w,x,y,z> = AffineSpace(4, QQ)
sage: S = A.subscheme([x^2-y*z+1, w^3+z+y^2])
sage: S = A.subscheme([x^2 - y*z + 1, w^3 + z + y^2])
sage: enum_affine_rational_field(S(QQ), 1)
[(0, 0, -1, -1)]
sage: enum_affine_rational_field(S(QQ), 2)
Expand All @@ -94,11 +94,11 @@ def enum_affine_rational_field(X, B):
::

sage: A.<x,y> = AffineSpace(2, QQ)
sage: C = Curve(x^2+y-x)
sage: C = Curve(x^2 + y - x)
sage: enum_affine_rational_field(C, 10) # long time (3 s)
[(-2, -6), (-1, -2), (-2/3, -10/9), (-1/2, -3/4), (-1/3, -4/9),
(0, 0), (1/3, 2/9), (1/2, 1/4), (2/3, 2/9), (1, 0),
(4/3, -4/9), (3/2, -3/4), (5/3, -10/9), (2, -2), (3, -6)]
(0, 0), (1/3, 2/9), (1/2, 1/4), (2/3, 2/9), (1, 0),
(4/3, -4/9), (3/2, -3/4), (5/3, -10/9), (2, -2), (3, -6)]

AUTHORS:

Expand Down Expand Up @@ -183,31 +183,32 @@ def enum_affine_number_field(X, **kwds):

OUTPUT:

- a list containing the affine points of ``X`` of absolute height up to ``B``,
sorted.
- a list containing the affine points of ``X`` of absolute height up to ``B``,
sorted.

EXAMPLES::

sage: from sage.schemes.affine.affine_rational_point import enum_affine_number_field
sage: u = QQ['u'].0
sage: K = NumberField(u^2 + 2, 'v')
sage: A.<x,y,z> = AffineSpace(K, 3)
sage: X = A.subscheme([y^2 - x])
sage: enum_affine_number_field(X(K), bound=2**0.5)
[(0, 0, -1), (0, 0, -v), (0, 0, -1/2*v), (0, 0, 0), (0, 0, 1/2*v), (0, 0, v), (0, 0, 1),
(1, -1, -1), (1, -1, -v), (1, -1, -1/2*v), (1, -1, 0), (1, -1, 1/2*v), (1, -1, v), (1, -1, 1),
(1, 1, -1), (1, 1, -v), (1, 1, -1/2*v), (1, 1, 0), (1, 1, 1/2*v), (1, 1, v), (1, 1, 1)]
sage: K = NumberField(u^2 + 2, 'v') # optional - sage.rings.number_field
sage: A.<x,y,z> = AffineSpace(K, 3) # optional - sage.rings.number_field
sage: X = A.subscheme([y^2 - x]) # optional - sage.rings.number_field
sage: enum_affine_number_field(X(K), bound=2**0.5) # optional - sage.rings.number_field
[(0, 0, -1), (0, 0, -v), (0, 0, -1/2*v), (0, 0, 0), (0, 0, 1/2*v),
(0, 0, v), (0, 0, 1), (1, -1, -1), (1, -1, -v), (1, -1, -1/2*v),
(1, -1, 0), (1, -1, 1/2*v), (1, -1, v), (1, -1, 1), (1, 1, -1),
(1, 1, -v), (1, 1, -1/2*v), (1, 1, 0), (1, 1, 1/2*v), (1, 1, v), (1, 1, 1)]

::

sage: u = QQ['u'].0
sage: K = NumberField(u^2 + 3, 'v')
sage: A.<x,y> = AffineSpace(K, 2)
sage: X=A.subscheme(x-y)
sage: from sage.schemes.affine.affine_rational_point import enum_affine_number_field
sage: enum_affine_number_field(X, bound=3**0.25)
[(-1, -1), (-1/2*v - 1/2, -1/2*v - 1/2), (1/2*v - 1/2, 1/2*v - 1/2), (0, 0), (-1/2*v + 1/2, -1/2*v + 1/2),
(1/2*v + 1/2, 1/2*v + 1/2), (1, 1)]
sage: u = QQ['u'].0
sage: K = NumberField(u^2 + 3, 'v') # optional - sage.rings.number_field
sage: A.<x,y> = AffineSpace(K, 2) # optional - sage.rings.number_field
sage: X = A.subscheme(x - y) # optional - sage.rings.number_field
sage: enum_affine_number_field(X, bound=3**0.25) # optional - sage.rings.number_field
[(-1, -1), (-1/2*v - 1/2, -1/2*v - 1/2), (1/2*v - 1/2, 1/2*v - 1/2),
(0, 0), (-1/2*v + 1/2, -1/2*v + 1/2), (1/2*v + 1/2, 1/2*v + 1/2), (1, 1)]
"""
B = kwds.pop('bound')
tol = kwds.pop('tolerance', 1e-2)
Expand Down Expand Up @@ -248,31 +249,31 @@ def enum_affine_finite_field(X):

EXAMPLES::

sage: F = GF(7)
sage: A.<w,x,y,z> = AffineSpace(4, F)
sage: C = A.subscheme([w^2+x+4, y*z*x-6, z*y+w*x])
sage: from sage.schemes.affine.affine_rational_point import enum_affine_finite_field
sage: enum_affine_finite_field(C(F))
sage: F = GF(7) # optional - sage.rings.finite_rings
sage: A.<w,x,y,z> = AffineSpace(4, F) # optional - sage.rings.finite_rings
sage: C = A.subscheme([w^2 + x + 4, y*z*x - 6, z*y + w*x]) # optional - sage.rings.finite_rings
sage: enum_affine_finite_field(C(F)) # optional - sage.rings.finite_rings
[]
sage: C = A.subscheme([w^2+x+4, y*z*x-6])
sage: enum_affine_finite_field(C(F))
sage: C = A.subscheme([w^2 + x + 4, y*z*x - 6]) # optional - sage.rings.finite_rings
sage: enum_affine_finite_field(C(F)) # optional - sage.rings.finite_rings
[(0, 3, 1, 2), (0, 3, 2, 1), (0, 3, 3, 3), (0, 3, 4, 4), (0, 3, 5, 6),
(0, 3, 6, 5), (1, 2, 1, 3), (1, 2, 2, 5), (1, 2, 3, 1), (1, 2, 4, 6),
(1, 2, 5, 2), (1, 2, 6, 4), (2, 6, 1, 1), (2, 6, 2, 4), (2, 6, 3, 5),
(2, 6, 4, 2), (2, 6, 5, 3), (2, 6, 6, 6), (3, 1, 1, 6), (3, 1, 2, 3),
(3, 1, 3, 2), (3, 1, 4, 5), (3, 1, 5, 4), (3, 1, 6, 1), (4, 1, 1, 6),
(4, 1, 2, 3), (4, 1, 3, 2), (4, 1, 4, 5), (4, 1, 5, 4), (4, 1, 6, 1),
(5, 6, 1, 1), (5, 6, 2, 4), (5, 6, 3, 5), (5, 6, 4, 2), (5, 6, 5, 3),
(5, 6, 6, 6), (6, 2, 1, 3), (6, 2, 2, 5), (6, 2, 3, 1), (6, 2, 4, 6),
(6, 2, 5, 2), (6, 2, 6, 4)]
(0, 3, 6, 5), (1, 2, 1, 3), (1, 2, 2, 5), (1, 2, 3, 1), (1, 2, 4, 6),
(1, 2, 5, 2), (1, 2, 6, 4), (2, 6, 1, 1), (2, 6, 2, 4), (2, 6, 3, 5),
(2, 6, 4, 2), (2, 6, 5, 3), (2, 6, 6, 6), (3, 1, 1, 6), (3, 1, 2, 3),
(3, 1, 3, 2), (3, 1, 4, 5), (3, 1, 5, 4), (3, 1, 6, 1), (4, 1, 1, 6),
(4, 1, 2, 3), (4, 1, 3, 2), (4, 1, 4, 5), (4, 1, 5, 4), (4, 1, 6, 1),
(5, 6, 1, 1), (5, 6, 2, 4), (5, 6, 3, 5), (5, 6, 4, 2), (5, 6, 5, 3),
(5, 6, 6, 6), (6, 2, 1, 3), (6, 2, 2, 5), (6, 2, 3, 1), (6, 2, 4, 6),
(6, 2, 5, 2), (6, 2, 6, 4)]

::

sage: A.<x,y,z> = AffineSpace(3, GF(3))
sage: S = A.subscheme(x+y)
sage: enum_affine_finite_field(S)
sage: A.<x,y,z> = AffineSpace(3, GF(3)) # optional - sage.rings.finite_rings
sage: S = A.subscheme(x + y) # optional - sage.rings.finite_rings
sage: enum_affine_finite_field(S) # optional - sage.rings.finite_rings
[(0, 0, 0), (0, 0, 1), (0, 0, 2), (1, 2, 0), (1, 2, 1), (1, 2, 2),
(2, 1, 0), (2, 1, 1), (2, 1, 2)]
(2, 1, 0), (2, 1, 1), (2, 1, 2)]

ALGORITHM:

Expand Down
Loading