Skip to content

Commit f67d72d

Browse files
committed
Fix finite field GF(p).extension(1, names=tuple)
1 parent f4adc25 commit f67d72d

File tree

2 files changed

+46
-2
lines changed

2 files changed

+46
-2
lines changed

src/sage/rings/finite_rings/finite_field_base.pyx

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1421,6 +1421,21 @@ cdef class FiniteField(Field):
14211421
sage: L.<v> = K.extension(b)
14221422
sage: L(u).minpoly() == u.minpoly()
14231423
True
1424+
1425+
Check the test above when `a=b=1`, see :issue:`40926`.
1426+
While in general it doesn't make much sense to talk about the generator
1427+
of a prime finite field (:meth:`gen` returns 1), generic code may find
1428+
it convenient to always specify the variable name when it is not known
1429+
in advance whether the exponent is 1.
1430+
1431+
The reason why one may want to specify ``name`` is :issue:`38376`.
1432+
1433+
::
1434+
1435+
sage: K.<u> = GF((random_prime(10^100), 1))
1436+
sage: L.<v> = K.extension(1)
1437+
sage: L(u).minpoly() == u.minpoly()
1438+
True
14241439
"""
14251440
from sage.rings.finite_rings.finite_field_constructor import GF
14261441
from sage.rings.polynomial.polynomial_element import Polynomial

src/sage/rings/finite_rings/finite_field_constructor.py

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -597,7 +597,7 @@ def create_key_and_extra_args(self, order, name=None, modulus=None, names=None,
597597
sage: GF((5, 1), 3)
598598
Traceback (most recent call last):
599599
...
600-
TypeError: variable name 3 must be a string, not <class 'sage.rings.integer.Integer'>
600+
TypeError: 'sage.rings.integer.Integer' object is not iterable
601601
sage: GF((5, 2), 3)
602602
Traceback (most recent call last):
603603
...
@@ -610,6 +610,35 @@ def create_key_and_extra_args(self, order, name=None, modulus=None, names=None,
610610
Traceback (most recent call last):
611611
...
612612
ValueError: the order of a finite field must be a prime power
613+
614+
We expect ``name`` to be a string (if it is a single name) and ``names`` to be
615+
a tuple of strings, but for backwards compatibility this is not enforced.
616+
This behavior might change in the future. ::
617+
618+
sage: GF(7, name='aa')
619+
Finite Field of size 7
620+
sage: GF(7^2, name='aa')
621+
Finite Field in aa of size 7^2
622+
sage: GF(7, name=('aa',))
623+
Finite Field of size 7
624+
sage: GF(7^2, name=('aa',))
625+
Finite Field in aa of size 7^2
626+
sage: GF(7, name=['aa'])
627+
Finite Field of size 7
628+
sage: GF(7^2, name=['aa'])
629+
Finite Field in aa of size 7^2
630+
sage: GF(7, names='aa')
631+
Finite Field of size 7
632+
sage: GF(7^2, names='aa')
633+
Finite Field in aa of size 7^2
634+
sage: GF(7, names=('aa',))
635+
Finite Field of size 7
636+
sage: GF(7^2, names=('aa',))
637+
Finite Field in aa of size 7^2
638+
sage: GF(7, names=['aa'])
639+
Finite Field of size 7
640+
sage: GF(7^2, names=['aa'])
641+
Finite Field in aa of size 7^2
613642
"""
614643
for key, val in kwds.items():
615644
if key not in ['structure', 'implementation', 'prec', 'embedding', 'latex_names']:
@@ -646,7 +675,7 @@ def create_key_and_extra_args(self, order, name=None, modulus=None, names=None,
646675
if impl is None:
647676
impl = 'modn'
648677
if name is not None:
649-
certify_names((name,))
678+
certify_names((name,) if isinstance(name, str) else name)
650679
name = ('x',) # Ignore name
651680
# Every polynomial of degree 1 is irreducible
652681
check_irreducible = False

0 commit comments

Comments
 (0)