Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

sage.rings.finite_rings: Modularization fixes, # needs #36056

Merged
merged 23 commits into from
Aug 13, 2023
Merged
Changes from 1 commit
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
bfc5cdf
src/sage/rings/finite_rings/integer_mod.pyx: Move import from sage.gr…
mkoeppe Feb 20, 2023
4c437cb
sage.rings: More # optional
mkoeppe Jun 4, 2023
97b5398
More # optional
mkoeppe Jun 9, 2023
d1f5704
sage.rings.finite_rings: More # optional
mkoeppe Jun 28, 2023
a1e4409
sage.rings.finite_rings: ./sage -fixdoctests --only-tags
mkoeppe Jun 28, 2023
a44af4d
sage.schemes: Update # needs
mkoeppe Jun 30, 2023
1f7e48a
Update # optional/needs
mkoeppe Jul 1, 2023
173d3c3
sage.rings: Update # optional / # needs
mkoeppe Jul 2, 2023
c0118ba
src/sage/rings/polynomial/polynomial_ring.py: Use '# needs sage.libs.…
mkoeppe Jul 8, 2023
19222fb
./sage -fixdoctests --distribution sagemath-categories --probe sage.r…
mkoeppe Jul 13, 2023
a04dbbc
src/sage/rings/finite_rings/conway_polynomials.py: Use lazy_import fo…
mkoeppe Jul 15, 2023
e78d4ea
sage.rings: Update # needs
mkoeppe Jul 16, 2023
6042ff7
sage.rings.{finite_rings,polynomial}: Modularization fixes for imports
mkoeppe Jul 17, 2023
1bc26c2
sage.rings.finite_rings: Update # needs
mkoeppe Jul 17, 2023
1b54228
src/sage/rings/finite_rings/conway_polynomials.py: Add # needs
mkoeppe Jul 22, 2023
baca60e
sage.rings: Update # needs
mkoeppe Jul 22, 2023
1810daf
sage.rings.finite_rings: Update # needs
mkoeppe Aug 6, 2023
a3ef387
sage.rings.finite_rings: Update # needs
mkoeppe Aug 7, 2023
a18e1ab
src/sage/rings: sage -fixdoctests --only-tags
mkoeppe Aug 8, 2023
e9630a6
pkgs/sagemath-categories/MANIFEST.in.m4: Add sage.rings.finite_rings.…
mkoeppe Jan 27, 2023
8a823ff
src/sage/rings/finite_rings: Use more block tags
mkoeppe Aug 10, 2023
98283ea
src/sage/rings/finite_rings/conway_polynomials.py: Fix # needs
mkoeppe Aug 11, 2023
744ddf8
src/sage/rings/finite_rings/residue_field.pyx: Make a doctest work wh…
mkoeppe Aug 12, 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
101 changes: 51 additions & 50 deletions src/sage/rings/finite_rings/hom_finite_field.pyx
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# sage.doctest: optional - sage.rings.finite_rings
"""
Finite field morphisms
@@ -13,8 +14,8 @@ EXAMPLES::
Construction of an embedding::
sage: k.<t> = GF(3^7) # optional - sage.rings.finite_rings
sage: K.<T> = GF(3^21) # optional - sage.rings.finite_rings
sage: k.<t> = GF(3^7)
sage: K.<T> = GF(3^21)
sage: f = FiniteFieldHomomorphism_generic(Hom(k, K)); f
Ring morphism:
From: Finite Field in t of size 3^7
@@ -44,8 +45,8 @@ map which is the inverse of `f` on the image of `f`::
There is no embedding of `GF(5^6)` into `GF(5^11)`::
sage: k.<t> = GF(5^6) # optional - sage.rings.finite_rings
sage: K.<T> = GF(5^11) # optional - sage.rings.finite_rings
sage: k.<t> = GF(5^6)
sage: K.<T> = GF(5^11)
sage: FiniteFieldHomomorphism_generic(Hom(k, K))
Traceback (most recent call last):
...
@@ -54,7 +55,7 @@ There is no embedding of `GF(5^6)` into `GF(5^11)`::
Construction of Frobenius endomorphisms::
sage: k.<t> = GF(7^14) # optional - sage.rings.finite_rings
sage: k.<t> = GF(7^14)
sage: Frob = k.frobenius_endomorphism(); Frob
Frobenius endomorphism t |--> t^7 on Finite Field in t of size 7^14
sage: Frob(t)
@@ -125,8 +126,8 @@ cdef class SectionFiniteFieldHomomorphism_generic(Section):
TESTS::
sage: from sage.rings.finite_rings.hom_finite_field import FiniteFieldHomomorphism_generic
sage: k.<t> = GF(3^7) # optional - sage.rings.finite_rings
sage: K.<T> = GF(3^21) # optional - sage.rings.finite_rings
sage: k.<t> = GF(3^7)
sage: K.<T> = GF(3^21)
sage: f = FiniteFieldHomomorphism_generic(Hom(k, K))
sage: g = f.section()
sage: g(f(t^3+t^2+1))
@@ -153,8 +154,8 @@ cdef class SectionFiniteFieldHomomorphism_generic(Section):
EXAMPLES::
sage: from sage.rings.finite_rings.hom_finite_field import FiniteFieldHomomorphism_generic
sage: k.<t> = GF(3^7) # optional - sage.rings.finite_rings
sage: K.<T> = GF(3^21) # optional - sage.rings.finite_rings
sage: k.<t> = GF(3^7)
sage: K.<T> = GF(3^21)
sage: f = FiniteFieldHomomorphism_generic(Hom(k, K))
sage: g = f.section()
sage: g._repr_()
@@ -170,8 +171,8 @@ cdef class SectionFiniteFieldHomomorphism_generic(Section):
EXAMPLES::
sage: from sage.rings.finite_rings.hom_finite_field import FiniteFieldHomomorphism_generic
sage: k.<t> = GF(3^7) # optional - sage.rings.finite_rings
sage: K.<T> = GF(3^21) # optional - sage.rings.finite_rings
sage: k.<t> = GF(3^7)
sage: K.<T> = GF(3^21)
sage: f = FiniteFieldHomomorphism_generic(Hom(k, K))
sage: g = f.section()
sage: g._latex_()
@@ -188,8 +189,8 @@ cdef class FiniteFieldHomomorphism_generic(RingHomomorphism_im_gens):
TESTS::
sage: from sage.rings.finite_rings.hom_finite_field import FiniteFieldHomomorphism_generic
sage: k.<t> = GF(3^7) # optional - sage.rings.finite_rings
sage: K.<T> = GF(3^21) # optional - sage.rings.finite_rings
sage: k.<t> = GF(3^7)
sage: K.<T> = GF(3^21)
sage: f = FiniteFieldHomomorphism_generic(Hom(k, K))
sage: TestSuite(f).run()
@@ -199,16 +200,16 @@ cdef class FiniteFieldHomomorphism_generic(RingHomomorphism_im_gens):
TESTS::
sage: from sage.rings.finite_rings.hom_finite_field import FiniteFieldHomomorphism_generic
sage: k.<t> = GF(3^7) # optional - sage.rings.finite_rings
sage: K.<T> = GF(3^21) # optional - sage.rings.finite_rings
sage: k.<t> = GF(3^7)
sage: K.<T> = GF(3^21)
sage: f = FiniteFieldHomomorphism_generic(Hom(k, K)); f
Ring morphism:
From: Finite Field in t of size 3^7
To: Finite Field in T of size 3^21
Defn: t |--> T^20 + 2*T^18 + T^16 + 2*T^13 + T^9 + 2*T^8 + T^7 + T^6 + T^5 + T^3 + 2*T^2 + T
sage: k.<t> = GF(3^6) # optional - sage.rings.finite_rings
sage: K.<t> = GF(3^9) # optional - sage.rings.finite_rings
sage: k.<t> = GF(3^6)
sage: K.<t> = GF(3^9)
sage: FiniteFieldHomomorphism_generic(Hom(k, K))
Traceback (most recent call last):
...
@@ -249,8 +250,8 @@ cdef class FiniteFieldHomomorphism_generic(RingHomomorphism_im_gens):
TESTS::
sage: from sage.rings.finite_rings.hom_finite_field import FiniteFieldHomomorphism_generic
sage: k.<t> = GF(3^7) # optional - sage.rings.finite_rings
sage: K.<T> = GF(3^21) # optional - sage.rings.finite_rings
sage: k.<t> = GF(3^7)
sage: K.<T> = GF(3^21)
sage: f = FiniteFieldHomomorphism_generic(Hom(k, K))
sage: g = copy(f)
sage: g.section()(g(t)) == f.section()(f(t))
@@ -282,8 +283,8 @@ cdef class FiniteFieldHomomorphism_generic(RingHomomorphism_im_gens):
EXAMPLES::
sage: from sage.rings.finite_rings.hom_finite_field import FiniteFieldHomomorphism_generic
sage: k.<t> = GF(3^7) # optional - sage.rings.finite_rings
sage: K.<T> = GF(3^21) # optional - sage.rings.finite_rings
sage: k.<t> = GF(3^7)
sage: K.<T> = GF(3^21)
sage: f = FiniteFieldHomomorphism_generic(Hom(k, K))
sage: f._latex_()
'\\Bold{F}_{3^{7}} \\hookrightarrow \\Bold{F}_{3^{21}}'
@@ -295,8 +296,8 @@ cdef class FiniteFieldHomomorphism_generic(RingHomomorphism_im_gens):
TESTS::
sage: from sage.rings.finite_rings.hom_finite_field import FiniteFieldHomomorphism_generic
sage: k.<t> = GF(3^3) # optional - sage.rings.finite_rings
sage: K.<T> = GF(3^9) # optional - sage.rings.finite_rings
sage: k.<t> = GF(3^3)
sage: K.<T> = GF(3^9)
sage: f = FiniteFieldHomomorphism_generic(Hom(k, K))
sage: f(t)
2*T^6 + 2*T^4 + T^2 + T
@@ -323,8 +324,8 @@ cdef class FiniteFieldHomomorphism_generic(RingHomomorphism_im_gens):
EXAMPLES::
sage: from sage.rings.finite_rings.hom_finite_field import FiniteFieldHomomorphism_generic
sage: k.<t> = GF(3^3) # optional - sage.rings.finite_rings
sage: K.<T> = GF(3^9) # optional - sage.rings.finite_rings
sage: k.<t> = GF(3^3)
sage: K.<T> = GF(3^9)
sage: f = FiniteFieldHomomorphism_generic(Hom(k, K))
sage: f.is_injective()
True
@@ -340,8 +341,8 @@ cdef class FiniteFieldHomomorphism_generic(RingHomomorphism_im_gens):
EXAMPLES::
sage: from sage.rings.finite_rings.hom_finite_field import FiniteFieldHomomorphism_generic
sage: k.<t> = GF(3^3) # optional - sage.rings.finite_rings
sage: K.<T> = GF(3^9) # optional - sage.rings.finite_rings
sage: k.<t> = GF(3^3)
sage: K.<T> = GF(3^9)
sage: f = FiniteFieldHomomorphism_generic(Hom(k, K))
sage: f.is_surjective()
False
@@ -364,8 +365,8 @@ cdef class FiniteFieldHomomorphism_generic(RingHomomorphism_im_gens):
EXAMPLES::
sage: from sage.rings.finite_rings.hom_finite_field import FiniteFieldHomomorphism_generic
sage: k.<t> = GF(3^7) # optional - sage.rings.finite_rings
sage: K.<T> = GF(3^21) # optional - sage.rings.finite_rings
sage: k.<t> = GF(3^7)
sage: K.<T> = GF(3^21)
sage: f = FiniteFieldHomomorphism_generic(Hom(k, K))
sage: g = f.section(); g
Section of Ring morphism:
@@ -395,7 +396,7 @@ cdef class FiniteFieldHomomorphism_generic(RingHomomorphism_im_gens):
EXAMPLES::
sage: k.<t> = GF(3^7) # optional - sage.rings.finite_rings
sage: k.<t> = GF(3^7)
sage: K.<T>, f = k.extension(3, map=True)
sage: b = f(t^2); b
2*T^20 + 2*T^19 + T^18 + T^15 + 2*T^14 + 2*T^13 + 2*T^12 + T^8 + 2*T^6 + T^5 + 2*T^4 + T^3 + 2*T^2 + T
@@ -417,7 +418,7 @@ cdef class FiniteFieldHomomorphism_generic(RingHomomorphism_im_gens):
TESTS::
sage: k.<t> = GF(5^3) # optional - sage.rings.finite_rings
sage: k.<t> = GF(5^3)
sage: Frob = k.frobenius_endomorphism()
sage: embed = Frob.fixed_field()[1]
sage: hash(embed) # random
@@ -431,7 +432,7 @@ cdef class FiniteFieldHomomorphism_generic(RingHomomorphism_im_gens):
TESTS::
sage: k.<t> = GF(5^3) # optional - sage.rings.finite_rings
sage: k.<t> = GF(5^3)
sage: Frob = k.frobenius_endomorphism()
sage: embed = Frob.fixed_field()[1]
sage: embed.__reduce__() # indirect doctest
@@ -459,7 +460,7 @@ cdef class FiniteFieldHomomorphism_generic(RingHomomorphism_im_gens):
TESTS::
sage: k.<t> = GF(5^3) # optional - sage.rings.finite_rings
sage: k.<t> = GF(5^3)
sage: Frob = k.frobenius_endomorphism()
sage: embed = Frob.fixed_field()[1]
sage: f = loads(dumps(embed))
@@ -481,7 +482,7 @@ cdef class FrobeniusEndomorphism_finite_field(FrobeniusEndomorphism_generic):
TESTS::
sage: k.<a> = GF(7^11) # optional - sage.rings.finite_rings
sage: k.<a> = GF(7^11)
sage: Frob = k.frobenius_endomorphism(5)
sage: TestSuite(Frob).run()
@@ -506,7 +507,7 @@ cdef class FrobeniusEndomorphism_finite_field(FrobeniusEndomorphism_generic):
TESTS::
sage: from sage.rings.finite_rings.hom_finite_field import FrobeniusEndomorphism_finite_field
sage: k.<t> = GF(5^3) # optional - sage.rings.finite_rings
sage: k.<t> = GF(5^3)
sage: FrobeniusEndomorphism_finite_field(k)
Frobenius endomorphism t |--> t^5 on Finite Field in t of size 5^3
sage: FrobeniusEndomorphism_finite_field(k, 2)
@@ -543,7 +544,7 @@ cdef class FrobeniusEndomorphism_finite_field(FrobeniusEndomorphism_generic):
EXAMPLES::
sage: k.<t> = GF(5^3) # optional - sage.rings.finite_rings
sage: k.<t> = GF(5^3)
sage: Frob = k.frobenius_endomorphism(); Frob
Frobenius endomorphism t |--> t^5 on Finite Field in t of size 5^3
@@ -567,7 +568,7 @@ cdef class FrobeniusEndomorphism_finite_field(FrobeniusEndomorphism_generic):
EXAMPLES::
sage: k.<t> = GF(5^3) # optional - sage.rings.finite_rings
sage: k.<t> = GF(5^3)
sage: Frob = k.frobenius_endomorphism(); Frob
Frobenius endomorphism t |--> t^5 on Finite Field in t of size 5^3
@@ -590,7 +591,7 @@ cdef class FrobeniusEndomorphism_finite_field(FrobeniusEndomorphism_generic):
EXAMPLES::
sage: k.<t> = GF(5^3) # optional - sage.rings.finite_rings
sage: k.<t> = GF(5^3)
sage: Frob = k.frobenius_endomorphism()
sage: Frob._latex_()
't \\mapsto t^{5}'
@@ -612,7 +613,7 @@ cdef class FrobeniusEndomorphism_finite_field(FrobeniusEndomorphism_generic):
"""
TESTS::
sage: k.<t> = GF(5^3) # optional - sage.rings.finite_rings
sage: k.<t> = GF(5^3)
sage: Frob = k.frobenius_endomorphism()
sage: Frob(t)
2*t^2 + 4*t + 4
@@ -631,7 +632,7 @@ cdef class FrobeniusEndomorphism_finite_field(FrobeniusEndomorphism_generic):
EXAMPLES::
sage: k.<t> = GF(5^12) # optional - sage.rings.finite_rings
sage: k.<t> = GF(5^12)
sage: Frob = k.frobenius_endomorphism()
sage: Frob.order()
12
@@ -654,7 +655,7 @@ cdef class FrobeniusEndomorphism_finite_field(FrobeniusEndomorphism_generic):
EXAMPLES::
sage: k.<t> = GF(5^12) # optional - sage.rings.finite_rings
sage: k.<t> = GF(5^12)
sage: Frob = k.frobenius_endomorphism()
sage: Frob.power()
1
@@ -672,7 +673,7 @@ cdef class FrobeniusEndomorphism_finite_field(FrobeniusEndomorphism_generic):
EXAMPLES::
sage: k.<t> = GF(5^12) # optional - sage.rings.finite_rings
sage: k.<t> = GF(5^12)
sage: Frob = k.frobenius_endomorphism(); Frob
Frobenius endomorphism t |--> t^5 on Finite Field in t of size 5^12
sage: Frob^2
@@ -694,7 +695,7 @@ cdef class FrobeniusEndomorphism_finite_field(FrobeniusEndomorphism_generic):
EXAMPLES::
sage: k.<a> = GF(7^11) # optional - sage.rings.finite_rings
sage: k.<a> = GF(7^11)
sage: f = k.frobenius_endomorphism(5)
sage: (f.inverse() * f).is_identity()
True
@@ -707,7 +708,7 @@ cdef class FrobeniusEndomorphism_finite_field(FrobeniusEndomorphism_generic):
EXAMPLES::
sage: k.<t> = GF(5^12) # optional - sage.rings.finite_rings
sage: k.<t> = GF(5^12)
sage: f = k.frobenius_endomorphism(); f
Frobenius endomorphism t |--> t^5 on Finite Field in t of size 5^12
sage: g = k.frobenius_endomorphism(2); g
@@ -745,7 +746,7 @@ cdef class FrobeniusEndomorphism_finite_field(FrobeniusEndomorphism_generic):
EXAMPLES::
sage: k.<t> = GF(5^6) # optional - sage.rings.finite_rings
sage: k.<t> = GF(5^6)
sage: f = k.frobenius_endomorphism(2)
sage: kfixed, embed = f.fixed_field()
sage: kfixed
@@ -778,7 +779,7 @@ cdef class FrobeniusEndomorphism_finite_field(FrobeniusEndomorphism_generic):
EXAMPLES::
sage: k.<t> = GF(5^3) # optional - sage.rings.finite_rings
sage: k.<t> = GF(5^3)
sage: Frob = k.frobenius_endomorphism()
sage: Frob.is_injective()
True
@@ -793,7 +794,7 @@ cdef class FrobeniusEndomorphism_finite_field(FrobeniusEndomorphism_generic):
EXAMPLES::
sage: k.<t> = GF(5^3) # optional - sage.rings.finite_rings
sage: k.<t> = GF(5^3)
sage: Frob = k.frobenius_endomorphism()
sage: Frob.is_surjective()
True
@@ -807,7 +808,7 @@ cdef class FrobeniusEndomorphism_finite_field(FrobeniusEndomorphism_generic):
EXAMPLES::
sage: k.<t> = GF(5^3) # optional - sage.rings.finite_rings
sage: k.<t> = GF(5^3)
sage: Frob = k.frobenius_endomorphism()
sage: Frob.is_identity()
False
@@ -822,7 +823,7 @@ cdef class FrobeniusEndomorphism_finite_field(FrobeniusEndomorphism_generic):
EXAMPLES::
sage: k.<t> = GF(5^3) # optional - sage.rings.finite_rings
sage: k.<t> = GF(5^3)
sage: Frob = k.frobenius_endomorphism()
sage: hash(Frob) # random
383183030479672104
@@ -835,7 +836,7 @@ cdef class FrobeniusEndomorphism_finite_field(FrobeniusEndomorphism_generic):
TESTS::
sage: k.<t> = GF(5^3) # optional - sage.rings.finite_rings
sage: k.<t> = GF(5^3)
sage: Frob = k.frobenius_endomorphism(2)
sage: Frob
Frobenius endomorphism t |--> t^(5^2) on Finite Field in t of size 5^3
6 changes: 3 additions & 3 deletions src/sage/rings/finite_rings/hom_prime_finite_field.pyx
Original file line number Diff line number Diff line change
@@ -54,15 +54,15 @@ cdef class FiniteFieldHomomorphism_prime(FiniteFieldHomomorphism_generic):
sage: from sage.rings.finite_rings.hom_prime_finite_field import FiniteFieldHomomorphism_prime
sage: k = GF(3)
sage: K.<T> = GF(3^4) # optional - sage.rings.finite_rings
sage: f = FiniteFieldHomomorphism_prime(Hom(k, K)); f
sage: f = FiniteFieldHomomorphism_prime(Hom(k, K)); f # optional - sage.rings.finite_rings
Ring morphism:
From: Finite Field of size 3
To: Finite Field in T of size 3^4
Defn: 1 |--> 1
sage: k.<t> = GF(3^2) # optional - sage.rings.finite_rings
sage: K.<T> = GF(3^4) # optional - sage.rings.finite_rings
sage: f = FiniteFieldHomomorphism_prime(Hom(k, K)); f
sage: f = FiniteFieldHomomorphism_prime(Hom(k, K)); f # optional - sage.rings.finite_rings
Traceback (most recent call last):
...
TypeError: The domain is not a finite prime field
@@ -82,7 +82,7 @@ cdef class FiniteFieldHomomorphism_prime(FiniteFieldHomomorphism_generic):
sage: from sage.rings.finite_rings.hom_prime_finite_field import FiniteFieldHomomorphism_prime
sage: k = GF(3)
sage: K.<t> = GF(3^5) # optional - sage.rings.finite_rings
sage: f = FiniteFieldHomomorphism_prime(Hom(k, K))
sage: f = FiniteFieldHomomorphism_prime(Hom(k, K)) # optional - sage.rings.finite_rings
sage: a = f(4); a
1
sage: a.parent()
67 changes: 34 additions & 33 deletions src/sage/rings/finite_rings/homset.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# sage.doctest: optional - sage.rings.finite_rings
"""
Homset for finite fields
@@ -6,8 +7,8 @@
EXAMPLES::
sage: R.<t> = ZZ[]
sage: E.<a> = GF(25, modulus = t^2 - 2) # optional - sage.rings.finite_rings
sage: F.<b> = GF(625) # optional - sage.rings.finite_rings
sage: E.<a> = GF(25, modulus = t^2 - 2)
sage: F.<b> = GF(625)
sage: H = Hom(E, F)
sage: f = H([4*b^3 + 4*b^2 + 4*b]); f
Ring morphism:
@@ -27,10 +28,10 @@
sage: End(E)
Automorphism group of Finite Field in a of size 5^2
sage: End(GF(7))[0] # optional - sage.rings.finite_rings
sage: End(GF(7))[0]
Ring endomorphism of Finite Field of size 7
Defn: 1 |--> 1
sage: H = Hom(GF(7), GF(49, 'c')) # optional - sage.rings.finite_rings
sage: H = Hom(GF(7), GF(49, 'c'))
sage: H[0](2)
2
"""
@@ -59,8 +60,8 @@ def __call__(self, im_gens, base_map=None, check=True):
EXAMPLES::
sage: R.<t> = ZZ[]
sage: E.<a> = GF(25, modulus = t^2 - 2) # optional - sage.rings.finite_rings
sage: F.<b> = GF(625) # optional - sage.rings.finite_rings
sage: E.<a> = GF(25, modulus = t^2 - 2)
sage: F.<b> = GF(625)
sage: End(E)
Automorphism group of Finite Field in a of size 5^2
sage: list(Hom(E, F))
@@ -74,17 +75,17 @@ def __call__(self, im_gens, base_map=None, check=True):
Defn: a |--> b^3 + b^2 + b]
sage: [phi(2*a)^2 for phi in Hom(E, F)]
[3, 3]
sage: End(GF(7))[0] # optional - sage.rings.finite_rings
sage: End(GF(7))[0]
Ring endomorphism of Finite Field of size 7
Defn: 1 |--> 1
sage: H = Hom(GF(7), GF(49, 'c')) # optional - sage.rings.finite_rings
sage: H = Hom(GF(7), GF(49, 'c'))
sage: H[0](2)
2
sage: Hom(GF(49, 'c'), GF(7)).list() # optional - sage.rings.finite_rings
sage: Hom(GF(49, 'c'), GF(7)).list()
[]
sage: Hom(GF(49, 'c'), GF(81, 'd')).list() # optional - sage.rings.finite_rings
sage: Hom(GF(49, 'c'), GF(81, 'd')).list()
[]
sage: H = Hom(GF(9, 'a'), GF(81, 'b')) # optional - sage.rings.finite_rings
sage: H = Hom(GF(9, 'a'), GF(81, 'b'))
sage: H == loads(dumps(H))
True
"""
@@ -116,8 +117,8 @@ def _coerce_impl(self, x):
EXAMPLES::
sage: k.<a> = GF(25) # optional - sage.rings.finite_rings
sage: l.<b> = GF(625) # optional - sage.rings.finite_rings
sage: k.<a> = GF(25)
sage: l.<b> = GF(625)
sage: H = Hom(k, l)
sage: G = loads(dumps(H))
sage: H is G
@@ -142,11 +143,11 @@ def _repr_(self):
EXAMPLES::
sage: Hom(GF(4, 'a'), GF(16, 'b'))._repr_() # optional - sage.rings.finite_rings
sage: Hom(GF(4, 'a'), GF(16, 'b'))._repr_()
'Set of field embeddings from Finite Field in a of size 2^2 to Finite Field in b of size 2^4'
sage: Hom(GF(4, 'a'), GF(4, 'c'))._repr_() # optional - sage.rings.finite_rings
sage: Hom(GF(4, 'a'), GF(4, 'c'))._repr_()
'Set of field embeddings from Finite Field in a of size 2^2 to Finite Field in c of size 2^2'
sage: Hom(GF(4, 'a'), GF(4, 'a'))._repr_() # optional - sage.rings.finite_rings
sage: Hom(GF(4, 'a'), GF(4, 'a'))._repr_()
'Automorphism group of Finite Field in a of size 2^2'
"""
D = self.domain()
@@ -162,11 +163,11 @@ def is_aut(self):
EXAMPLES::
sage: Hom(GF(4, 'a'), GF(16, 'b')).is_aut() # optional - sage.rings.finite_rings
sage: Hom(GF(4, 'a'), GF(16, 'b')).is_aut()
False
sage: Hom(GF(4, 'a'), GF(4, 'c')).is_aut() # optional - sage.rings.finite_rings
sage: Hom(GF(4, 'a'), GF(4, 'c')).is_aut()
False
sage: Hom(GF(4, 'a'), GF(4, 'a')).is_aut() # optional - sage.rings.finite_rings
sage: Hom(GF(4, 'a'), GF(4, 'a')).is_aut()
True
"""
return self.domain() == self.codomain()
@@ -177,12 +178,12 @@ def order(self):
EXAMPLES::
sage: K.<a> = GF(125) # optional - sage.rings.finite_rings
sage: K.<a> = GF(125)
sage: End(K)
Automorphism group of Finite Field in a of size 5^3
sage: End(K).order()
3
sage: L.<b> = GF(25) # optional - sage.rings.finite_rings
sage: L.<b> = GF(25)
sage: Hom(L, K).order() == Hom(K, L).order() == 0
True
"""
@@ -200,7 +201,7 @@ def __len__(self):
EXAMPLES::
sage: K.<a> = GF(25) # optional - sage.rings.finite_rings
sage: K.<a> = GF(25)
sage: len(End(K))
2
"""
@@ -212,15 +213,15 @@ def list(self):
EXAMPLES::
sage: K.<a> = GF(25) # optional - sage.rings.finite_rings
sage: K.<a> = GF(25)
sage: End(K)
Automorphism group of Finite Field in a of size 5^2
sage: list(End(K))
[Ring endomorphism of Finite Field in a of size 5^2
Defn: a |--> 4*a + 1,
Ring endomorphism of Finite Field in a of size 5^2
Defn: a |--> a]
sage: L.<z> = GF(7^6) # optional - sage.rings.finite_rings
sage: L.<z> = GF(7^6)
sage: [g for g in End(L) if (g^3)(z) == z]
[Ring endomorphism of Finite Field in z of size 7^6
Defn: z |--> z,
@@ -231,8 +232,8 @@ def list(self):
Between isomorphic fields with different moduli::
sage: k1 = GF(1009) # optional - sage.rings.finite_rings
sage: k2 = GF(1009, modulus="primitive") # optional - sage.rings.finite_rings
sage: k1 = GF(1009)
sage: k2 = GF(1009, modulus="primitive")
sage: Hom(k1, k2).list()
[
Ring morphism:
@@ -248,8 +249,8 @@ def list(self):
Defn: 11 |--> 11
]
sage: k1.<a> = GF(1009^2, modulus="first_lexicographic") # optional - sage.rings.finite_rings
sage: k2.<b> = GF(1009^2, modulus="conway") # optional - sage.rings.finite_rings
sage: k1.<a> = GF(1009^2, modulus="first_lexicographic")
sage: k2.<b> = GF(1009^2, modulus="conway")
sage: Hom(k1, k2).list()
[
Ring morphism:
@@ -266,7 +267,7 @@ def list(self):
Check that :trac:`11390` is fixed::
sage: K = GF(1<<16,'a'); L = GF(1<<32,'b') # optional - sage.rings.finite_rings
sage: K = GF(1<<16,'a'); L = GF(1<<32,'b')
sage: K.Hom(L)[0]
Ring morphism:
From: Finite Field in a of size 2^16
@@ -294,7 +295,7 @@ def __getitem__(self, n):
"""
EXAMPLES::
sage: H = Hom(GF(32, 'a'), GF(1024, 'b')) # optional - sage.rings.finite_rings
sage: H = Hom(GF(32, 'a'), GF(1024, 'b'))
sage: H[1]
Ring morphism:
From: Finite Field in a of size 2^5
@@ -320,7 +321,7 @@ def index(self, item):
EXAMPLES::
sage: K.<z> = GF(1024) # optional - sage.rings.finite_rings
sage: K.<z> = GF(1024)
sage: g = End(K)[3]
sage: End(K).index(g) == 3
True
@@ -333,13 +334,13 @@ def _an_element_(self):
TESTS::
sage: Hom(GF(3^3, 'a'), GF(3^6, 'b')).an_element() # optional - sage.rings.finite_rings
sage: Hom(GF(3^3, 'a'), GF(3^6, 'b')).an_element()
Ring morphism:
From: Finite Field in a of size 3^3
To: Finite Field in b of size 3^6
Defn: a |--> 2*b^5 + 2*b^4
sage: Hom(GF(3^3, 'a'), GF(3^2, 'c')).an_element() # optional - sage.rings.finite_rings
sage: Hom(GF(3^3, 'a'), GF(3^2, 'c')).an_element()
Traceback (most recent call last):
...
EmptySetError: no homomorphisms from Finite Field in a of size 3^3 to Finite Field in c of size 3^2