diff --git a/src/sage/categories/pushout.py b/src/sage/categories/pushout.py index e8eee82998d..ed385eabbf1 100644 --- a/src/sage/categories/pushout.py +++ b/src/sage/categories/pushout.py @@ -3359,7 +3359,12 @@ def __init__(self, polys, names, embeddings=None, structures=None, if latex_names[i] == latex_variable_name(name): latex_names[i] = None self.latex_names = latex_names - self.kwds = kwds + kwds_self = dict(kwds.items()) + if 'implementation' in kwds_self: + assert len(self.polys) == 1 + self.implementations = [kwds_self['implementation']] + del kwds_self['implementation'] + self.kwds = kwds_self def _apply_functor(self, R): """ @@ -3596,11 +3601,7 @@ def merge(self, other): # integers to encode degrees of extensions. from sage.rings.integer import Integer kwds_self = dict(self.kwds.items()) - if 'impl' in kwds_self: - del kwds_self['impl'] kwds_other = dict(other.kwds.items()) - if 'impl' in kwds_other: - del kwds_other['impl'] if (isinstance(self.polys[0], Integer) and isinstance(other.polys[0], Integer) and self.embeddings == other.embeddings == [None] diff --git a/src/sage/homology/homology_vector_space_with_basis.py b/src/sage/homology/homology_vector_space_with_basis.py index ace9775d56b..7ad9e3d9c58 100644 --- a/src/sage/homology/homology_vector_space_with_basis.py +++ b/src/sage/homology/homology_vector_space_with_basis.py @@ -1447,7 +1447,7 @@ def is_GF2(R): sage: from sage.homology.homology_vector_space_with_basis import is_GF2 sage: is_GF2(GF(2)) True - sage: is_GF2(GF(2, impl='ntl')) + sage: is_GF2(GF(2, implementation='ntl')) True sage: is_GF2(GF(3)) False diff --git a/src/sage/modules/free_module_element.pyx b/src/sage/modules/free_module_element.pyx index c93c71f195e..805f521d5aa 100644 --- a/src/sage/modules/free_module_element.pyx +++ b/src/sage/modules/free_module_element.pyx @@ -1015,7 +1015,7 @@ cdef class FreeModuleElement(Vector): # abstract base class Create the multiplication table of `GF(4)` using GP:: sage: # needs sage.libs.pari - sage: k. = GF(4, impl="pari_ffelt") + sage: k. = GF(4, implementation="pari_ffelt") sage: v = gp(vector(list(k))) sage: v [0, 1, a, a + 1] diff --git a/src/sage/rings/finite_rings/element_base.pyx b/src/sage/rings/finite_rings/element_base.pyx index f6a450edfa2..aa30f0f1ff4 100755 --- a/src/sage/rings/finite_rings/element_base.pyx +++ b/src/sage/rings/finite_rings/element_base.pyx @@ -740,15 +740,15 @@ cdef class FinitePolyExtElement(FiniteRingElement): EXAMPLES:: - sage: k. = FiniteField(9, impl='givaro', modulus='primitive') # needs sage.libs.linbox + sage: k. = FiniteField(9, implementation='givaro', modulus='primitive') # needs sage.libs.linbox sage: a.is_square() # needs sage.libs.linbox False sage: (a**2).is_square() # needs sage.libs.linbox True - sage: k. = FiniteField(4, impl='ntl', modulus='primitive') # needs sage.libs.ntl + sage: k. = FiniteField(4, implementation='ntl', modulus='primitive') # needs sage.libs.ntl sage: (a**2).is_square() # needs sage.libs.ntl True - sage: k. = FiniteField(17^5, impl='pari_ffelt', modulus='primitive') # needs sage.libs.pari + sage: k. = FiniteField(17^5, implementation='pari_ffelt', modulus='primitive') # needs sage.libs.pari sage: a.is_square() # needs sage.libs.pari False sage: (a**2).is_square() # needs sage.libs.pari @@ -799,7 +799,7 @@ cdef class FinitePolyExtElement(FiniteRingElement): 3 sage: F(4).square_root() 2 - sage: K = FiniteField(7^3, 'alpha', impl='pari_ffelt') + sage: K = FiniteField(7^3, 'alpha', implementation='pari_ffelt') sage: K(3).square_root() Traceback (most recent call last): ... diff --git a/src/sage/rings/finite_rings/element_givaro.pyx b/src/sage/rings/finite_rings/element_givaro.pyx index c9b9e323181..9d56663fcb0 100644 --- a/src/sage/rings/finite_rings/element_givaro.pyx +++ b/src/sage/rings/finite_rings/element_givaro.pyx @@ -585,12 +585,12 @@ cdef class Cache_givaro(Cache_base): sage: k._cache._element_repr(a^20) '2*a^3 + 2*a^2 + 2' - sage: k = FiniteField(3^4,'a', impl='givaro', repr='int') + sage: k = FiniteField(3^4,'a', implementation='givaro', repr='int') sage: a = k.gen() sage: k._cache._element_repr(a^20) '74' - sage: k = FiniteField(3^4,'a', impl='givaro', repr='log') + sage: k = FiniteField(3^4,'a', implementation='givaro', repr='log') sage: a = k.gen() sage: k._cache._element_repr(a^20) '20' diff --git a/src/sage/rings/finite_rings/element_ntl_gf2e.pyx b/src/sage/rings/finite_rings/element_ntl_gf2e.pyx index 399bb76815b..50f665ca375 100644 --- a/src/sage/rings/finite_rings/element_ntl_gf2e.pyx +++ b/src/sage/rings/finite_rings/element_ntl_gf2e.pyx @@ -144,7 +144,7 @@ cdef class Cache_ntl_gf2e(Cache_base): TESTS:: - sage: k. = GF(2^8, impl="ntl") + sage: k. = GF(2^8, implementation="ntl") """ self._parent = parent self._zero_element = self._new() @@ -262,10 +262,10 @@ cdef class Cache_ntl_gf2e(Cache_base): We can coerce from PARI finite field implementations:: - sage: K. = GF(2^19, impl="ntl") + sage: K. = GF(2^19, implementation="ntl") sage: a^20 a^6 + a^3 + a^2 + a - sage: M. = GF(2^19, impl="pari_ffelt") + sage: M. = GF(2^19, implementation="pari_ffelt") sage: K(c^20) a^6 + a^3 + a^2 + a """ @@ -503,7 +503,7 @@ cdef class FiniteField_ntl_gf2eElement(FinitePolyExtElement): EXAMPLES:: - sage: k. = GF(2^8, impl="ntl") # indirect doctest + sage: k. = GF(2^8, implementation="ntl") # indirect doctest """ if parent is None: return @@ -1005,7 +1005,7 @@ cdef class FiniteField_ntl_gf2eElement(FinitePolyExtElement): EXAMPLES:: - sage: k. = GF(2^8, impl="ntl") + sage: k. = GF(2^8, implementation="ntl") sage: b = a^3 + a sage: b.minpoly() x^4 + x^3 + x^2 + x + 1 diff --git a/src/sage/rings/finite_rings/element_pari_ffelt.pyx b/src/sage/rings/finite_rings/element_pari_ffelt.pyx index 989b0e20b9e..371a6830973 100644 --- a/src/sage/rings/finite_rings/element_pari_ffelt.pyx +++ b/src/sage/rings/finite_rings/element_pari_ffelt.pyx @@ -93,7 +93,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): EXAMPLES:: - sage: K = FiniteField(10007^10, 'a', impl='pari_ffelt') + sage: K = FiniteField(10007^10, 'a', implementation='pari_ffelt') sage: a = K.gen(); a a sage: type(a) @@ -103,7 +103,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): sage: n = 63 sage: m = 3 - sage: K. = GF(2^n, impl='pari_ffelt') + sage: K. = GF(2^n, implementation='pari_ffelt') sage: f = conway_polynomial(2, n) sage: f(a) == 0 True @@ -111,7 +111,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): sage: conway_polynomial(2, m)(a^e) == 0 True - sage: K. = FiniteField(2^16, impl='pari_ffelt') + sage: K. = FiniteField(2^16, implementation='pari_ffelt') sage: K(0).is_zero() True sage: (a - a).is_zero() @@ -128,13 +128,13 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): Test creating elements from basic Python types:: - sage: K. = FiniteField(7^20, impl='pari_ffelt') + sage: K. = FiniteField(7^20, implementation='pari_ffelt') sage: K(int(8)) 1 :: - sage: k = FiniteField(3^4, 'a', impl='pari_ffelt') + sage: k = FiniteField(3^4, 'a', implementation='pari_ffelt') sage: b = k(5) # indirect doctest sage: b.parent() Finite Field in a of size 3^4 @@ -146,7 +146,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): the polynomial at the field's generator:: sage: R. = QQ[] - sage: k. = FiniteField(5^2, 'a', impl='pari_ffelt') + sage: k. = FiniteField(5^2, 'a', implementation='pari_ffelt') sage: k(R(2/3)) 4 sage: k(x^2) @@ -160,13 +160,13 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): sage: k(x^25) a - sage: Q. = FiniteField(5^7, 'q', impl='pari_ffelt') + sage: Q. = FiniteField(5^7, 'q', implementation='pari_ffelt') sage: L = GF(5) sage: LL. = L[] sage: Q(xx^2 + 2*xx + 4) q^2 + 2*q + 4 - sage: k = FiniteField(3^11, 't', impl='pari_ffelt') + sage: k = FiniteField(3^11, 't', implementation='pari_ffelt') sage: k.polynomial() t^11 + 2*t^2 + 1 sage: P = k.polynomial_ring() @@ -176,7 +176,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): An element can be specified by its vector of coordinates with respect to the basis consisting of powers of the generator: - sage: k = FiniteField(3^11, 't', impl='pari_ffelt') + sage: k = FiniteField(3^11, 't', implementation='pari_ffelt') sage: V = k.vector_space(map=False) sage: V Vector space of dimension 11 over Finite Field of size 3 @@ -186,7 +186,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): Multivariate polynomials only coerce if constant:: - sage: k = FiniteField(5^2, 'a', impl='pari_ffelt') + sage: k = FiniteField(5^2, 'a', implementation='pari_ffelt') sage: R = k['x,y,z']; R Multivariate Polynomial Ring in x, y, z over Finite Field in a of size 5^2 sage: k(R(2)) @@ -199,7 +199,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): Gap elements can also be coerced into finite fields:: - sage: F = FiniteField(2^3, 'a', impl='pari_ffelt') + sage: F = FiniteField(2^3, 'a', implementation='pari_ffelt') sage: a = F.multiplicative_generator(); a a sage: b = gap(a^3); b # needs sage.libs.gap @@ -214,7 +214,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): sage: a.parent() Finite Field of size 13 - sage: F = FiniteField(2^4, 'a', impl='pari_ffelt') + sage: F = FiniteField(2^4, 'a', implementation='pari_ffelt') sage: F(gap('Z(16)^3')) # needs sage.libs.gap a^3 sage: F(gap('Z(16)^2')) # needs sage.libs.gap @@ -231,7 +231,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): TESTS:: - sage: k = FiniteField(3^2, 'a', impl='pari_ffelt') + sage: k = FiniteField(3^2, 'a', implementation='pari_ffelt') sage: a = k(11); a 2 sage: a.parent() @@ -243,7 +243,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): We create elements using a list and verify that :issue:`10486` has been fixed:: - sage: k = FiniteField(3^11, 't', impl='pari_ffelt') + sage: k = FiniteField(3^11, 't', implementation='pari_ffelt') sage: x = k([1,0,2,1]); x t^3 + 2*t^2 + 1 sage: x + x + x @@ -265,7 +265,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): When initializing from a list, the elements are first coerced to the prime field (:issue:`11685`):: - sage: k = FiniteField(3^11, 't', impl='pari_ffelt') + sage: k = FiniteField(3^11, 't', implementation='pari_ffelt') sage: k([ 0, 1/2 ]) 2*t sage: k([ 0, 1/2, 0, 0, 0, 0, 0, 0, 0, -1, 0 ]) @@ -284,7 +284,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): Check that zeros are created correctly (:issue:`11685`):: - sage: K = FiniteField(3^11, 't', impl='pari_ffelt'); a = K.0 + sage: K = FiniteField(3^11, 't', implementation='pari_ffelt'); a = K.0 sage: v = 0; pari(K(v)) 0 sage: v = Mod(0,3); pari(K(v)) @@ -329,7 +329,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): TESTS:: sage: from sage.rings.finite_rings.element_pari_ffelt import FiniteFieldElement_pari_ffelt - sage: K = FiniteField(101^2, 'a', impl='pari_ffelt') + sage: K = FiniteField(101^2, 'a', implementation='pari_ffelt') sage: x = FiniteFieldElement_pari_ffelt(K, 'a + 1') sage: x a + 1 @@ -537,7 +537,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): EXAMPLES:: - sage: k. = GF(3^17, impl='pari_ffelt') + sage: k. = GF(3^17, implementation='pari_ffelt') sage: c^20 # indirect doctest c^4 + 2*c^3 """ @@ -550,7 +550,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): EXAMPLES:: - sage: k. = GF(3^15, impl='pari_ffelt') + sage: k. = GF(3^15, implementation='pari_ffelt') sage: R = GF(3)['a']; aa = R.gen() sage: hash(a^2 + 1) == hash(aa^2 + 1) True @@ -563,7 +563,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): TESTS:: - sage: K. = FiniteField(10007^10, impl='pari_ffelt') + sage: K. = FiniteField(10007^10, implementation='pari_ffelt') sage: loads(a.dumps()) == a True """ @@ -573,7 +573,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): """ TESTS:: - sage: k. = FiniteField(3^3, impl='pari_ffelt') + sage: k. = FiniteField(3^3, implementation='pari_ffelt') sage: a a sage: b = copy(a); b @@ -588,7 +588,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): """ TESTS:: - sage: k. = FiniteField(3^3, impl='pari_ffelt') + sage: k. = FiniteField(3^3, implementation='pari_ffelt') sage: a a sage: b = deepcopy(a); b @@ -612,7 +612,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): EXAMPLES:: sage: # needs sage.modules - sage: k. = GF(2^20, impl='pari_ffelt') + sage: k. = GF(2^20, implementation='pari_ffelt') sage: e = k.random_element() sage: f = loads(dumps(e)) sage: e is f @@ -624,7 +624,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): :: - sage: K. = GF(2^100, impl='pari_ffelt') + sage: K. = GF(2^100, implementation='pari_ffelt') sage: a < a^2 True sage: a > a^2 @@ -642,7 +642,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): TESTS:: - sage: k. = FiniteField(3^3, impl='pari_ffelt') + sage: k. = FiniteField(3^3, implementation='pari_ffelt') sage: a == 1 False sage: a^0 == 1 @@ -666,7 +666,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): EXAMPLES:: - sage: k. = GF(3^17, impl='pari_ffelt') + sage: k. = GF(3^17, implementation='pari_ffelt') sage: a + a^2 # indirect doctest a^2 + a """ @@ -682,7 +682,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): EXAMPLES:: - sage: k. = GF(3^17, impl='pari_ffelt') + sage: k. = GF(3^17, implementation='pari_ffelt') sage: a - a # indirect doctest 0 """ @@ -698,7 +698,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): EXAMPLES:: - sage: k. = GF(3^17, impl='pari_ffelt') + sage: k. = GF(3^17, implementation='pari_ffelt') sage: (a^12 + 1)*(a^15 - 1) # indirect doctest a^15 + 2*a^12 + a^11 + 2*a^10 + 2 """ @@ -714,7 +714,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): EXAMPLES:: - sage: k. = GF(3^17, impl='pari_ffelt') + sage: k. = GF(3^17, implementation='pari_ffelt') sage: (a - 1) / (a + 1) # indirect doctest 2*a^16 + a^15 + 2*a^14 + a^13 + 2*a^12 + a^11 + 2*a^10 + a^9 + 2*a^8 + a^7 + 2*a^6 + a^5 + 2*a^4 + a^3 + 2*a^2 + a + 1 """ @@ -732,7 +732,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): EXAMPLES:: - sage: F. = FiniteField(5^3, impl='pari_ffelt') + sage: F. = FiniteField(5^3, implementation='pari_ffelt') sage: a.is_zero() False sage: (a - a).is_zero() @@ -746,7 +746,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): EXAMPLES:: - sage: F. = FiniteField(5^3, impl='pari_ffelt') + sage: F. = FiniteField(5^3, implementation='pari_ffelt') sage: a.is_one() False sage: (a/a).is_one() @@ -760,7 +760,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): EXAMPLES:: - sage: F. = FiniteField(5^3, impl='pari_ffelt') + sage: F. = FiniteField(5^3, implementation='pari_ffelt') sage: a.is_unit() True """ @@ -774,7 +774,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): EXAMPLES:: - sage: k. = GF(3^17, impl='pari_ffelt') + sage: k. = GF(3^17, implementation='pari_ffelt') sage: +a a """ @@ -786,7 +786,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): EXAMPLES:: - sage: k. = GF(3^17, impl='pari_ffelt') + sage: k. = GF(3^17, implementation='pari_ffelt') sage: -a 2*a """ @@ -801,7 +801,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): EXAMPLES:: - sage: k. = FiniteField(3^2, impl='pari_ffelt') + sage: k. = FiniteField(3^2, implementation='pari_ffelt') sage: ~a a + 2 sage: (a+1)*a @@ -822,7 +822,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): TESTS:: - sage: K. = GF(5^10, impl='pari_ffelt') + sage: K. = GF(5^10, implementation='pari_ffelt') sage: n = (2*a)/a sage: n^-15 2 @@ -875,7 +875,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): TESTS:: sage: # needs sage.modules - sage: F. = GF(13^64, impl='pari_ffelt'); F + sage: F. = GF(13^64, implementation='pari_ffelt'); F Finite Field in a of size 13^64 sage: x = F.random_element() sage: x.pth_power(0) == x @@ -888,7 +888,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): True sage: # needs sage.modules - sage: F. = GF(127^16, impl='pari_ffelt'); F + sage: F. = GF(127^16, implementation='pari_ffelt'); F Finite Field in a of size 127^16 sage: x = F.random_element() sage: x.pth_power(0) == x @@ -930,7 +930,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): EXAMPLES:: - sage: k. = FiniteField(3^2, impl='pari_ffelt') + sage: k. = FiniteField(3^2, implementation='pari_ffelt') sage: pol = a.polynomial() sage: pol a @@ -939,7 +939,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): :: - sage: k = FiniteField(3^4, 'alpha', impl='pari_ffelt') + sage: k = FiniteField(3^4, 'alpha', implementation='pari_ffelt') sage: a = k.gen() sage: a.polynomial() alpha @@ -965,7 +965,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): EXAMPLES:: sage: R. = PolynomialRing(FiniteField(3)) - sage: F. = FiniteField(3^2, modulus=x^2 + 1, impl='pari_ffelt') + sage: F. = FiniteField(3^2, modulus=x^2 + 1, implementation='pari_ffelt') sage: a.minpoly('y') y^2 + 1 """ @@ -984,7 +984,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): EXAMPLES:: sage: R. = PolynomialRing(FiniteField(3)) - sage: F. = FiniteField(3^2, modulus=x^2 + 1, impl='pari_ffelt') + sage: F. = FiniteField(3^2, modulus=x^2 + 1, implementation='pari_ffelt') sage: a.charpoly('y') y^2 + 1 """ @@ -999,17 +999,17 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): EXAMPLES:: - sage: k. = FiniteField(3^2, impl='pari_ffelt') + sage: k. = FiniteField(3^2, implementation='pari_ffelt') sage: a.is_square() False sage: (a**2).is_square() True - sage: k. = FiniteField(2^2, impl='pari_ffelt') + sage: k. = FiniteField(2^2, implementation='pari_ffelt') sage: (a**2).is_square() True - sage: k. = FiniteField(17^5, impl='pari_ffelt') + sage: k. = FiniteField(17^5, implementation='pari_ffelt') sage: (a**2).is_square() True sage: a.is_square() @@ -1054,7 +1054,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): EXAMPLES:: - sage: F = FiniteField(7^2, 'a', impl='pari_ffelt') + sage: F = FiniteField(7^2, 'a', implementation='pari_ffelt') sage: F(2).sqrt() 4 sage: F(3).sqrt() in (2*F.gen() + 6, 5*F.gen() + 1) @@ -1064,7 +1064,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): sage: F(4).sqrt(all=True) [2, 5] - sage: K = FiniteField(7^3, 'alpha', impl='pari_ffelt') + sage: K = FiniteField(7^3, 'alpha', implementation='pari_ffelt') sage: K(3).sqrt() Traceback (most recent call last): ... @@ -1072,7 +1072,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): sage: K(3).sqrt(all=True) [] - sage: K. = GF(3^17, impl='pari_ffelt') + sage: K. = GF(3^17, implementation='pari_ffelt') sage: (a^3 - a - 1).sqrt() a^16 + 2*a^15 + a^13 + 2*a^12 + a^10 + 2*a^9 + 2*a^8 + a^7 + a^6 + 2*a^5 + a^4 + 2*a^2 + 2*a + 2 """ @@ -1120,7 +1120,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): EXAMPLES:: - sage: F. = FiniteField(2^10, impl='pari_ffelt') + sage: F. = FiniteField(2^10, implementation='pari_ffelt') sage: b = g; a = g^37 sage: a.log(b) 37 @@ -1130,7 +1130,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): :: - sage: F. = FiniteField(5^2, impl='pari_ffelt') + sage: F. = FiniteField(5^2, implementation='pari_ffelt') sage: F(-1).log(F(2)) 2 sage: F(1).log(a) @@ -1155,7 +1155,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): Some cases where the logarithm is not defined or does not exist:: - sage: F. = GF(3^10, impl='pari_ffelt') + sage: F. = GF(3^10, implementation='pari_ffelt') sage: a.log(-1) Traceback (most recent call last): ... @@ -1215,7 +1215,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): EXAMPLES:: - sage: a = FiniteField(5^3, 'a', impl='pari_ffelt').0 + sage: a = FiniteField(5^3, 'a', implementation='pari_ffelt').0 sage: a.multiplicative_order() 124 sage: a**124 @@ -1235,7 +1235,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): EXAMPLES:: - sage: k = FiniteField(next_prime(10^10)^2, 'u', impl='pari_ffelt') + sage: k = FiniteField(next_prime(10^10)^2, 'u', implementation='pari_ffelt') sage: a = k(17)/k(19) sage: b = a.lift(); b 7894736858 @@ -1256,7 +1256,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): EXAMPLES:: - sage: k. = GF(3^17, impl='pari_ffelt') + sage: k. = GF(3^17, implementation='pari_ffelt') sage: b = k(2) sage: b._integer_() 2 @@ -1273,7 +1273,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): EXAMPLES:: - sage: k. = GF(3^17, impl='pari_ffelt') + sage: k. = GF(3^17, implementation='pari_ffelt') sage: b = k(2) sage: int(b) 2 @@ -1290,7 +1290,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): EXAMPLES:: - sage: k. = GF(3^17, impl='pari_ffelt') + sage: k. = GF(3^17, implementation='pari_ffelt') sage: b = k(2) sage: float(b) 2.0 @@ -1303,7 +1303,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): EXAMPLES:: - sage: k. = FiniteField(3^3, impl='pari_ffelt') + sage: k. = FiniteField(3^3, implementation='pari_ffelt') sage: b = a**2 + 2*a + 1 sage: b.__pari__() a^2 + 2*a + 1 @@ -1316,7 +1316,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): EXAMPLES:: - sage: k. = GF(3^17, impl='pari_ffelt') + sage: k. = GF(3^17, implementation='pari_ffelt') sage: a._pari_init_() 'subst(a+3*a,a,ffgen(Mod(1, 3)*x^17 + Mod(2, 3)*x + Mod(1, 3),a))' sage: k(1)._pari_init_() @@ -1371,7 +1371,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): EXAMPLES:: sage: # needs sage.libs.gap - sage: F = FiniteField(2^3, 'aa', impl='pari_ffelt') + sage: F = FiniteField(2^3, 'aa', implementation='pari_ffelt') sage: aa = F.multiplicative_generator() sage: gap(aa) # indirect doctest Z(2^3) @@ -1389,7 +1389,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): You can specify the instance of the Gap interpreter that is used:: sage: # needs sage.libs.gap - sage: F = FiniteField(next_prime(200)^2, 'a', impl='pari_ffelt') + sage: F = FiniteField(next_prime(200)^2, 'a', implementation='pari_ffelt') sage: a = F.multiplicative_generator() sage: a._gap_ (gap) Z(211^2) @@ -1399,7 +1399,7 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): Gap only supports relatively small finite fields:: sage: # needs sage.libs.gap - sage: F = FiniteField(next_prime(1000)^2, 'a', impl='pari_ffelt') + sage: F = FiniteField(next_prime(1000)^2, 'a', implementation='pari_ffelt') sage: a = F.multiplicative_generator() sage: a._gap_init_() Traceback (most recent call last): @@ -1427,7 +1427,7 @@ def unpickle_FiniteFieldElement_pari_ffelt(parent, elem): EXAMPLES:: sage: # needs sage.modules - sage: k. = GF(2^20, impl='pari_ffelt') + sage: k. = GF(2^20, implementation='pari_ffelt') sage: e = k.random_element() sage: f = loads(dumps(e)) # indirect doctest sage: e == f diff --git a/src/sage/rings/finite_rings/finite_field_base.pyx b/src/sage/rings/finite_rings/finite_field_base.pyx index 2c49f3bc9ae..e4a6c646ea1 100644 --- a/src/sage/rings/finite_rings/finite_field_base.pyx +++ b/src/sage/rings/finite_rings/finite_field_base.pyx @@ -123,7 +123,7 @@ cdef class FiniteField(Field): False sage: F == FiniteField(3^2, 'd') False - sage: F == FiniteField(3^2, 'c', impl='pari_ffelt') + sage: F == FiniteField(3^2, 'c', implementation='pari_ffelt') False """ if self is other: @@ -320,14 +320,14 @@ cdef class FiniteField(Field): EXAMPLES:: - sage: k. = FiniteField(9, impl="pari") + sage: k. = FiniteField(9, implementation="pari") sage: list(k) [0, 1, 2, a, a + 1, a + 2, 2*a, 2*a + 1, 2*a + 2] Partial iteration of a very large finite field:: sage: p = next_prime(2^64) - sage: k. = FiniteField(p^2, impl="pari") + sage: k. = FiniteField(p^2, implementation="pari") sage: it = iter(k); it <...generator object at ...> sage: [next(it) for i in range(10)] @@ -339,11 +339,11 @@ cdef class FiniteField(Field): sage: L = [] sage: from sage.rings.finite_rings.finite_field_base import FiniteField - sage: print(list(FiniteField.__iter__(GF(8, impl="givaro", names="z")))) # needs sage.libs.linbox + sage: print(list(FiniteField.__iter__(GF(8, implementation="givaro", names="z")))) # needs sage.libs.linbox [0, 1, z, z + 1, z^2, z^2 + 1, z^2 + z, z^2 + z + 1] - sage: print(list(FiniteField.__iter__(GF(8, impl="pari", names="z")))) + sage: print(list(FiniteField.__iter__(GF(8, implementation="pari", names="z")))) [0, 1, z, z + 1, z^2, z^2 + 1, z^2 + z, z^2 + z + 1] - sage: print(list(FiniteField.__iter__(GF(8, impl="ntl", names="z")))) # needs sage.libs.ntl + sage: print(list(FiniteField.__iter__(GF(8, implementation="ntl", names="z")))) # needs sage.libs.ntl [0, 1, z, z + 1, z^2, z^2 + 1, z^2 + z, z^2 + z + 1] """ cdef Py_ssize_t n = self.degree() @@ -1013,7 +1013,7 @@ cdef class FiniteField(Field): The given modulus is always made monic:: - sage: k. = GF(7^2, modulus=2*x^2 - 3, impl="pari_ffelt") + sage: k. = GF(7^2, modulus=2*x^2 - 3, implementation="pari_ffelt") sage: k.modulus() x^2 + 2 @@ -1021,21 +1021,21 @@ cdef class FiniteField(Field): We test the various finite field implementations:: - sage: GF(2, impl="modn").modulus() + sage: GF(2, implementation="modn").modulus() x + 1 - sage: GF(2, impl="givaro").modulus() # needs sage.libs.linbox + sage: GF(2, implementation="givaro").modulus() # needs sage.libs.linbox x + 1 - sage: GF(2, impl="ntl").modulus() # needs sage.libs.ntl + sage: GF(2, implementation="ntl").modulus() # needs sage.libs.ntl x + 1 - sage: GF(2, impl="modn", modulus=x).modulus() + sage: GF(2, implementation="modn", modulus=x).modulus() x - sage: GF(2, impl="givaro", modulus=x).modulus() # needs sage.libs.linbox + sage: GF(2, implementation="givaro", modulus=x).modulus() # needs sage.libs.linbox x - sage: GF(2, impl="ntl", modulus=x).modulus() # needs sage.libs.ntl + sage: GF(2, implementation="ntl", modulus=x).modulus() # needs sage.libs.ntl x - sage: GF(13^2, 'a', impl="givaro", modulus=x^2 + 2).modulus() # needs sage.libs.linbox + sage: GF(13^2, 'a', implementation="givaro", modulus=x^2 + 2).modulus() # needs sage.libs.linbox x^2 + 2 - sage: GF(13^2, 'a', impl="pari_ffelt", modulus=x^2 + 2).modulus() # needs sage.libs.pari + sage: GF(13^2, 'a', implementation="pari_ffelt", modulus=x^2 + 2).modulus() # needs sage.libs.pari x^2 + 2 """ # Normally, this is set by the constructor of the implementation @@ -1077,18 +1077,18 @@ cdef class FiniteField(Field): sage: k.polynomial() a^2 + 2*a + 2 - sage: F = FiniteField(9, 'a', impl='pari_ffelt') + sage: F = FiniteField(9, 'a', implementation='pari_ffelt') sage: F.polynomial() a^2 + 2*a + 2 - sage: F = FiniteField(7^20, 'a', impl='pari_ffelt') + sage: F = FiniteField(7^20, 'a', implementation='pari_ffelt') sage: f = F.polynomial(); f a^20 + a^12 + 6*a^11 + 2*a^10 + 5*a^9 + 2*a^8 + 3*a^7 + a^6 + 3*a^5 + 3*a^3 + a + 3 sage: f(F.gen()) 0 sage: # needs sage.libs.ntl - sage: k. = GF(2^20, impl='ntl') + sage: k. = GF(2^20, implementation='ntl') sage: k.polynomial() a^20 + a^10 + a^9 + a^7 + a^6 + a^5 + a^4 + a + 1 sage: k.polynomial('FOO') @@ -1429,7 +1429,7 @@ cdef class FiniteField(Field): The implementation is taken into account, by :issue:`15223`:: - sage: k = FiniteField(9, 'a', impl='pari_ffelt') + sage: k = FiniteField(9, 'a', implementation='pari_ffelt') sage: F, R = k.construction() sage: F(R) is k True @@ -1437,7 +1437,7 @@ cdef class FiniteField(Field): """ from sage.categories.pushout import AlgebraicExtensionFunctor try: - kwds = {'impl': self._factory_data[2][3]} + kwds = {'implementation': self._factory_data[2][3]} except (AttributeError, IndexError, TypeError): kwds = {} if self.degree() == 1: diff --git a/src/sage/rings/finite_rings/finite_field_constructor.py b/src/sage/rings/finite_rings/finite_field_constructor.py index 78acc0a8873..9963bc0c0c5 100644 --- a/src/sage/rings/finite_rings/finite_field_constructor.py +++ b/src/sage/rings/finite_rings/finite_field_constructor.py @@ -226,7 +226,7 @@ class FiniteFieldFactory(UniqueFactory): ``modulus="primitive"`` to get a primitive polynomial. You may not specify a modulus if you do not specify a variable name. - - ``impl`` -- (optional) a string specifying the implementation of + - ``implementation`` -- (optional) a string specifying the implementation of the finite field. Possible values are: - ``'modn'`` -- ring of integers modulo `p` (only for prime @@ -241,9 +241,9 @@ class FiniteFieldFactory(UniqueFactory): for extension fields). - ``elem_cache`` -- (default: order < 500) cache all elements to - avoid creation time; ignored unless ``impl='givaro'`` + avoid creation time; ignored unless ``implementation='givaro'`` - - ``repr`` -- (default: ``'poly'``) ignored unless ``impl='givaro'``; + - ``repr`` -- (default: ``'poly'``) ignored unless ``implementation='givaro'``; controls the way elements are printed to the user: - 'log': repr is @@ -465,9 +465,9 @@ class FiniteFieldFactory(UniqueFactory): Check that :issue:`16934` has been fixed:: - sage: k1. = GF(17^14, impl="pari") + sage: k1. = GF(17^14, implementation="pari") sage: _ = a/2 - sage: k2. = GF(17^14, impl="pari") + sage: k2. = GF(17^14, implementation="pari") sage: k1 is k2 True @@ -501,8 +501,10 @@ def __init__(self, *args, **kwds): self._modulus_cache = defaultdict(dict) super().__init__(*args, **kwds) + from sage.misc.decorators import rename_keyword + @rename_keyword(deprecation=30507, impl='implementation') def create_key_and_extra_args(self, order, name=None, modulus=None, names=None, - impl=None, proof=None, + implementation=None, proof=None, check_prime=True, check_irreducible=True, prefix=None, repr=None, elem_cache=None, **kwds): @@ -528,21 +530,21 @@ def create_key_and_extra_args(self, order, name=None, modulus=None, names=None, Moreover, ``repr`` and ``elem_cache`` are ignored when not using givaro:: - sage: GF.create_key_and_extra_args(16, 'a', impl='ntl', repr='poly') # needs sage.libs.ntl + sage: GF.create_key_and_extra_args(16, 'a', implementation='ntl', repr='poly') # needs sage.libs.ntl ((16, ('a',), x^4 + x + 1, 'ntl', 2, 4, True, None, None, None, True, True), {}) - sage: GF.create_key_and_extra_args(16, 'a', impl='ntl', elem_cache=False) # needs sage.libs.ntl + sage: GF.create_key_and_extra_args(16, 'a', implementation='ntl', elem_cache=False) # needs sage.libs.ntl ((16, ('a',), x^4 + x + 1, 'ntl', 2, 4, True, None, None, None, True, True), {}) - sage: GF(16, impl='ntl') is GF(16, impl='ntl', repr='foo') # needs sage.libs.ntl + sage: GF(16, implementation='ntl') is GF(16, implementation='ntl', repr='foo') # needs sage.libs.ntl True We handle extra arguments for the givaro finite field and create unique objects for their defaults:: - sage: GF(25, impl='givaro') is GF(25, impl='givaro', repr='poly') # needs sage.libs.linbox + sage: GF(25, implementation='givaro') is GF(25, implementation='givaro', repr='poly') # needs sage.libs.linbox True - sage: GF(25, impl='givaro') is GF(25, impl='givaro', elem_cache=True) # needs sage.libs.linbox + sage: GF(25, implementation='givaro') is GF(25, implementation='givaro', elem_cache=True) # needs sage.libs.linbox True - sage: GF(625, impl='givaro') is GF(625, impl='givaro', elem_cache=False) # needs sage.libs.linbox + sage: GF(625, implementation='givaro') is GF(625, implementation='givaro', elem_cache=False) # needs sage.libs.linbox True We explicitly take ``structure``, ``implementation`` and ``prec`` attributes @@ -602,8 +604,8 @@ def create_key_and_extra_args(self, order, name=None, modulus=None, names=None, # note that we haven't tested p for primality if n == 1: - if impl is None: - impl = 'modn' + if implementation is None: + implementation = 'modn' name = ('x',) # Ignore name # Every polynomial of degree 1 is irreducible check_irreducible = False @@ -625,19 +627,19 @@ def create_key_and_extra_args(self, order, name=None, modulus=None, names=None, check_irreducible = False name = normalize_names(1, name) - if impl is None: + if implementation is None: if order < zech_log_bound and FiniteField_givaro is not None: - impl = 'givaro' + implementation = 'givaro' elif p == 2 and FiniteField_ntl_gf2e is not None: - impl = 'ntl' + implementation = 'ntl' else: - impl = 'pari_ffelt' + implementation = 'pari_ffelt' # Determine modulus. # For the 'modn' implementation, we use the following # optimization which we also need to avoid an infinite loop: # a modulus of None is a shorthand for x-1. - if modulus is not None or impl != 'modn': + if modulus is not None or implementation != 'modn': from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing R = PolynomialRing(FiniteField(p), 'x') if modulus is None: @@ -655,15 +657,15 @@ def create_key_and_extra_args(self, order, name=None, modulus=None, names=None, if modulus.degree() != n: raise ValueError("the degree of the modulus does not equal the degree of the field") - # If modulus is x - 1 for impl="modn", set it to None - if impl == 'modn' and modulus.list() == [-1,1]: + # If modulus is x - 1 for implementation="modn", set it to None + if implementation == 'modn' and modulus.list() == [-1,1]: modulus = None if modulus is None: check_irreducible = False # Check extra arguments for givaro and setup their defaults # TODO: ntl takes a repr, but ignores it - if impl == 'givaro': + if implementation == 'givaro': if repr is None: repr = 'poly' if elem_cache is None: @@ -673,8 +675,9 @@ def create_key_and_extra_args(self, order, name=None, modulus=None, names=None, repr = None elem_cache = None - return (order, name, modulus, impl, p, n, proof, prefix, repr, elem_cache, check_prime, check_irreducible), {} + return (order, name, modulus, implementation, p, n, proof, prefix, repr, elem_cache, check_prime, check_irreducible), {} + @rename_keyword(deprecation=30507, impl='implementation') def create_object(self, version, key, **kwds): """ EXAMPLES:: @@ -684,37 +687,37 @@ def create_object(self, version, key, **kwds): We try to create finite fields with various implementations:: - sage: k = GF(2, impl='modn') - sage: k = GF(2, impl='givaro') # needs sage.libs.linbox - sage: k = GF(2, impl='ntl') # needs sage.libs.ntl - sage: k = GF(2, impl='pari') + sage: k = GF(2, implementation='modn') + sage: k = GF(2, implementation='givaro') # needs sage.libs.linbox + sage: k = GF(2, implementation='ntl') # needs sage.libs.ntl + sage: k = GF(2, implementation='pari') Traceback (most recent call last): ... ValueError: the degree must be at least 2 - sage: k = GF(2, impl='supercalifragilisticexpialidocious') + sage: k = GF(2, implementation='supercalifragilisticexpialidocious') Traceback (most recent call last): ... ValueError: no such finite field implementation: 'supercalifragilisticexpialidocious' - sage: k. = GF(2^15, impl='modn') + sage: k. = GF(2^15, implementation='modn') Traceback (most recent call last): ... ValueError: the 'modn' implementation requires a prime order - sage: k. = GF(2^15, impl='givaro') # needs sage.libs.linbox - sage: k. = GF(2^15, impl='ntl') # needs sage.libs.ntl - sage: k. = GF(2^15, impl='pari') - sage: k. = GF(3^60, impl='modn') + sage: k. = GF(2^15, implementation='givaro') # needs sage.libs.linbox + sage: k. = GF(2^15, implementation='ntl') # needs sage.libs.ntl + sage: k. = GF(2^15, implementation='pari') + sage: k. = GF(3^60, implementation='modn') Traceback (most recent call last): ... ValueError: the 'modn' implementation requires a prime order - sage: k. = GF(3^60, impl='givaro') # needs sage.libs.linbox + sage: k. = GF(3^60, implementation='givaro') # needs sage.libs.linbox Traceback (most recent call last): ... ValueError: q must be < 2^16 - sage: k. = GF(3^60, impl='ntl') # needs sage.libs.ntl + sage: k. = GF(3^60, implementation='ntl') # needs sage.libs.ntl Traceback (most recent call last): ... ValueError: q must be a 2-power - sage: k. = GF(3^60, impl='pari') + sage: k. = GF(3^60, implementation='pari') """ # IMPORTANT! If you add a new class to the list of classes # that get cached by this factor object, then you *must* add @@ -730,7 +733,7 @@ def create_object(self, version, key, **kwds): if len(key) == 5: # for backward compatibility of pickles (see trac 10975). - order, name, modulus, impl, _ = key + order, name, modulus, implementation, _ = key p, n = Integer(order).factor()[0] proof = True prefix = kwds.get('prefix', None) @@ -741,7 +744,7 @@ def create_object(self, version, key, **kwds): check_prime = check_irreducible = False elif len(key) == 8: # For backward compatibility of pickles (see trac #21433) - order, name, modulus, impl, _, p, n, proof = key + order, name, modulus, implementation, _, p, n, proof = key prefix = kwds.get('prefix', None) # We can set the defaults here to be those for givaro # as they are otherwise ignored @@ -749,10 +752,10 @@ def create_object(self, version, key, **kwds): elem_cache = kwds.get('elem_cache', (order < 500)) check_prime = check_irreducible = False elif len(key) == 10: - order, name, modulus, impl, p, n, proof, prefix, repr, elem_cache = key + order, name, modulus, implementation, p, n, proof, prefix, repr, elem_cache = key check_prime = check_irreducible = False else: - order, name, modulus, impl, p, n, proof, prefix, repr, elem_cache, check_prime, check_irreducible = key + order, name, modulus, implementation, p, n, proof, prefix, repr, elem_cache, check_prime, check_irreducible = key from sage.structure.proof.all import WithProof with WithProof('arithmetic', proof): @@ -761,7 +764,7 @@ def create_object(self, version, key, **kwds): if check_irreducible and not modulus.is_irreducible(): raise ValueError("finite field modulus must be irreducible but it is not") - if impl == 'modn': + if implementation == 'modn': if n != 1: raise ValueError("the 'modn' implementation requires a prime order") from .finite_field_prime_modn import FiniteField_prime_modn @@ -776,15 +779,15 @@ def create_object(self, version, key, **kwds): # Otherwise, we would have to complicate all of their # constructors with check options. with WithProof('arithmetic', proof): - if impl == 'givaro': + if implementation == 'givaro': K = FiniteField_givaro(order, name, modulus, repr, elem_cache) - elif impl == 'ntl': + elif implementation == 'ntl': K = FiniteField_ntl_gf2e(order, name, modulus) - elif impl == 'pari_ffelt' or impl == 'pari': + elif implementation == 'pari_ffelt' or implementation == 'pari': from .finite_field_pari_ffelt import FiniteField_pari_ffelt K = FiniteField_pari_ffelt(p, modulus, name) else: - raise ValueError("no such finite field implementation: %r" % impl) + raise ValueError("no such finite field implementation: %r" % implementation) # Temporary; see create_key_and_extra_args() above. if prefix is not None: diff --git a/src/sage/rings/finite_rings/finite_field_givaro.py b/src/sage/rings/finite_rings/finite_field_givaro.py index 9f6abdb40b4..2662ceed7ca 100644 --- a/src/sage/rings/finite_rings/finite_field_givaro.py +++ b/src/sage/rings/finite_rings/finite_field_givaro.py @@ -89,19 +89,19 @@ class FiniteField_givaro(FiniteField): Three different representations are possible:: - sage: FiniteField(9, 'a', impl='givaro', repr='poly').gen() + sage: FiniteField(9, 'a', implementation='givaro', repr='poly').gen() a - sage: FiniteField(9, 'a', impl='givaro', repr='int').gen() + sage: FiniteField(9, 'a', implementation='givaro', repr='int').gen() 3 - sage: FiniteField(9, 'a', impl='givaro', repr='log').gen() + sage: FiniteField(9, 'a', implementation='givaro', repr='log').gen() 1 For prime fields, the default modulus is the polynomial `x - 1`, but you can ask for a different modulus:: - sage: GF(1009, impl='givaro').modulus() + sage: GF(1009, implementation='givaro').modulus() x + 1008 - sage: GF(1009, impl='givaro', modulus='conway').modulus() + sage: GF(1009, implementation='givaro', modulus='conway').modulus() x + 998 """ def __init__(self, q, name="a", modulus=None, repr="poly", cache=False): @@ -286,7 +286,7 @@ def _element_constructor_(self, e): the polynomial at the field's generator:: sage: R. = QQ[] - sage: k. = FiniteField(5^2, 'a', impl='givaro') + sage: k. = FiniteField(5^2, 'a', implementation='givaro') sage: k(R(2/3)) 4 sage: k(x^2) @@ -299,7 +299,7 @@ def _element_constructor_(self, e): sage: k(x^25) a - sage: Q. = FiniteField(5^3, 'q', impl='givaro') + sage: Q. = FiniteField(5^3, 'q', implementation='givaro') sage: L = GF(5) sage: LL. = L[] sage: Q(xx^2 + 2*xx + 4) @@ -334,22 +334,22 @@ def _element_constructor_(self, e): We can coerce from PARI finite field implementations:: - sage: K. = GF(3^10, impl="givaro") + sage: K. = GF(3^10, implementation="givaro") sage: a^20 2*a^9 + 2*a^8 + a^7 + 2*a^5 + 2*a^4 + 2*a^3 + 1 - sage: M. = GF(3^10, impl="pari_ffelt") + sage: M. = GF(3^10, implementation="pari_ffelt") sage: K(c^20) 2*a^9 + 2*a^8 + a^7 + 2*a^5 + 2*a^4 + 2*a^3 + 1 GAP elements need to be finite field elements:: sage: x = gap('Z(13)') - sage: F = FiniteField(13, impl='givaro') + sage: F = FiniteField(13, implementation='givaro') sage: F(x) 2 sage: F(gap('0*Z(13)')) 0 - sage: F = FiniteField(13^2, 'a', impl='givaro') + sage: F = FiniteField(13^2, 'a', implementation='givaro') sage: x = gap('Z(13)') sage: F(x) 2 @@ -363,8 +363,8 @@ def _element_constructor_(self, e): sage: k(48771/1225) 28 - sage: F9 = FiniteField(9, impl='givaro', prefix='a') - sage: F81 = FiniteField(81, impl='givaro', prefix='a') + sage: F9 = FiniteField(9, implementation='givaro', prefix='a') + sage: F81 = FiniteField(81, implementation='givaro', prefix='a') sage: F81(F9.gen()) 2*a4^3 + 2*a4^2 + 1 """ @@ -399,7 +399,7 @@ def gen(self, n=0): Traceback (most recent call last): ... IndexError: only one generator - sage: F = FiniteField(31, impl='givaro') + sage: F = FiniteField(31, implementation='givaro') sage: F.gen() 1 """ diff --git a/src/sage/rings/finite_rings/finite_field_ntl_gf2e.py b/src/sage/rings/finite_rings/finite_field_ntl_gf2e.py index 654f7a2b54b..785158c7c33 100644 --- a/src/sage/rings/finite_rings/finite_field_ntl_gf2e.py +++ b/src/sage/rings/finite_rings/finite_field_ntl_gf2e.py @@ -107,7 +107,7 @@ def __init__(self, q, names="a", modulus=None, repr="poly"): sage: k2. = GF(2^17) sage: k1 == k2 False - sage: k3. = GF(2^16, impl="pari_ffelt") + sage: k3. = GF(2^16, implementation="pari_ffelt") sage: k1 == k3 False @@ -242,9 +242,9 @@ def gen(self, n=0): TESTS:: - sage: GF(2, impl='ntl').gen() + sage: GF(2, implementation='ntl').gen() 1 - sage: GF(2, impl='ntl', modulus=polygen(GF(2)) ).gen() + sage: GF(2, implementation='ntl', modulus=polygen(GF(2)) ).gen() 0 sage: GF(2^19, 'a').gen(1) Traceback (most recent call last): diff --git a/src/sage/rings/finite_rings/finite_field_pari_ffelt.py b/src/sage/rings/finite_rings/finite_field_pari_ffelt.py index c60a7a563a7..96d5f90c70b 100644 --- a/src/sage/rings/finite_rings/finite_field_pari_ffelt.py +++ b/src/sage/rings/finite_rings/finite_field_pari_ffelt.py @@ -48,13 +48,13 @@ class FiniteField_pari_ffelt(FiniteField): requires specifying a characteristic and a modulus. To construct a finite field by specifying a cardinality and an algorithm for finding an irreducible polynomial, use the - ``FiniteField`` constructor with ``impl='pari_ffelt'``. + ``FiniteField`` constructor with ``implementation='pari_ffelt'``. EXAMPLES: Some computations with a finite field of order 9:: - sage: k = FiniteField(9, 'a', impl='pari_ffelt') + sage: k = FiniteField(9, 'a', implementation='pari_ffelt') sage: k Finite Field in a of size 3^2 sage: k.is_field() @@ -74,7 +74,7 @@ class FiniteField_pari_ffelt(FiniteField): Next we compute with a finite field of order 16:: - sage: k16 = FiniteField(16, 'b', impl='pari_ffelt') + sage: k16 = FiniteField(16, 'b', implementation='pari_ffelt') sage: z = k16.gen() sage: z b @@ -89,11 +89,11 @@ class FiniteField_pari_ffelt(FiniteField): Illustration of dumping and loading:: - sage: K = FiniteField(7^10, 'b', impl='pari_ffelt') + sage: K = FiniteField(7^10, 'b', implementation='pari_ffelt') sage: loads(K.dumps()) == K True - sage: K = FiniteField(10007^10, 'a', impl='pari_ffelt') + sage: K = FiniteField(10007^10, 'a', implementation='pari_ffelt') sage: loads(K.dumps()) == K True """ @@ -135,7 +135,7 @@ def __reduce__(self): EXAMPLES:: - sage: k. = FiniteField(5^20, impl='pari_ffelt') + sage: k. = FiniteField(5^20, implementation='pari_ffelt') sage: type(k) sage: k is loads(dumps(k)) @@ -167,9 +167,9 @@ def gen(self, n=0): EXAMPLES:: sage: R. = PolynomialRing(GF(2)) - sage: FiniteField(2^4, 'b', impl='pari_ffelt').gen() + sage: FiniteField(2^4, 'b', implementation='pari_ffelt').gen() b - sage: k = FiniteField(3^4, 'alpha', impl='pari_ffelt') + sage: k = FiniteField(3^4, 'alpha', implementation='pari_ffelt') sage: a = k.gen() sage: a alpha @@ -186,7 +186,7 @@ def characteristic(self): EXAMPLES:: - sage: F = FiniteField(3^4, 'a', impl='pari_ffelt') + sage: F = FiniteField(3^4, 'a', implementation='pari_ffelt') sage: F.characteristic() 3 """ @@ -199,7 +199,7 @@ def degree(self): EXAMPLES:: - sage: F = FiniteField(3^20, 'a', impl='pari_ffelt') + sage: F = FiniteField(3^20, 'a', implementation='pari_ffelt') sage: F.degree() 20 """ @@ -212,7 +212,7 @@ def _pari_frobenius(self, k=1): TESTS:: - sage: F = FiniteField(37^10, 'a', impl='pari_ffelt') + sage: F = FiniteField(37^10, 'a', implementation='pari_ffelt') sage: x = F.random_element() # needs sage.modules sage: all(x**(37**k) == F(F._pari_frobenius(k).ffmap(x)) # needs sage.modules ....: for k in range(1, 30) if k % 10 != 0) diff --git a/src/sage/rings/finite_rings/residue_field.pyx b/src/sage/rings/finite_rings/residue_field.pyx index 83d78abb2aa..338b7c136f8 100644 --- a/src/sage/rings/finite_rings/residue_field.pyx +++ b/src/sage/rings/finite_rings/residue_field.pyx @@ -309,7 +309,7 @@ class ResidueFieldFactory(UniqueFactory): sage: K.residue_field(K.ideal(3)) # needs sage.rings.number_field Residue field of Fractional ideal (3) """ - def create_key_and_extra_args(self, p, names = None, check=True, impl=None, **kwds): + def create_key_and_extra_args(self, p, names = None, check=True, implementation=None, **kwds): """ Return a tuple containing the key (uniquely defining data) and any extra arguments. @@ -354,7 +354,7 @@ class ResidueFieldFactory(UniqueFactory): names = None if names is None and p.ring() is not ZZ: names = '%sbar' % p.ring().fraction_field().variable_name() - key = (p, names, impl) + key = (p, names, implementation) return key, kwds def create_object(self, version, key, **kwds): @@ -370,7 +370,7 @@ class ResidueFieldFactory(UniqueFactory): sage: ResidueField(P) is ResidueField(P) # indirect doctest # needs sage.rings.number_field True """ - p, names, impl = key + p, names, implementation = key pring = p.ring() if pring is ZZ: @@ -380,31 +380,31 @@ class ResidueFieldFactory(UniqueFactory): Kbase = pring.base_ring() f = p.gen() characteristic = Kbase.order() - if f.degree() == 1 and Kbase.is_prime_field() and (impl is None or impl == 'modn'): + if f.degree() == 1 and Kbase.is_prime_field() and (implementation is None or implementation == 'modn'): return ResidueFiniteField_prime_modn(p, None, Kbase.order(), None, None, None) else: q = characteristic**(f.degree()) - if q < zech_log_bound and (impl is None or impl == 'givaro'): + if q < zech_log_bound and (implementation is None or implementation == 'givaro'): try: from sage.rings.finite_rings.residue_field_givaro import ResidueFiniteField_givaro except ImportError: - if impl is not None: + if implementation is not None: raise else: return ResidueFiniteField_givaro(p, q, names, f, None, None, None) - if q % 2 == 0 and (impl is None or impl == 'ntl'): + if q % 2 == 0 and (implementation is None or implementation == 'ntl'): try: from sage.rings.finite_rings.residue_field_ntl_gf2e import ResidueFiniteField_ntl_gf2e except ImportError: - if impl is not None: + if implementation is not None: raise else: return ResidueFiniteField_ntl_gf2e(q, names, f, "poly", p, None, None, None) - if impl is None or impl == 'pari': + if implementation is None or implementation == 'pari': try: from sage.rings.finite_rings.residue_field_pari_ffelt import ResidueFiniteField_pari_ffelt except ImportError: - if impl is not None: + if implementation is not None: raise else: return ResidueFiniteField_pari_ffelt(p, characteristic, names, f, None, None, None) @@ -460,27 +460,27 @@ class ResidueFieldFactory(UniqueFactory): return ResidueFiniteField_prime_modn(p, names, p.smallest_integer(), to_vs, to_order, PB) else: q = characteristic**(f.degree()) - if q < zech_log_bound and (impl is None or impl == 'givaro'): + if q < zech_log_bound and (implementation is None or implementation == 'givaro'): try: from sage.rings.finite_rings.residue_field_givaro import ResidueFiniteField_givaro except ImportError: - if impl is not None: + if implementation is not None: raise else: return ResidueFiniteField_givaro(p, q, names, f, to_vs, to_order, PB) - elif q % 2 == 0 and (impl is None or impl == 'ntl'): + elif q % 2 == 0 and (implementation is None or implementation == 'ntl'): try: from sage.rings.finite_rings.residue_field_ntl_gf2e import ResidueFiniteField_ntl_gf2e except ImportError: - if impl is not None: + if implementation is not None: raise else: return ResidueFiniteField_ntl_gf2e(q, names, f, "poly", p, to_vs, to_order, PB) - if impl is None or impl == 'pari': + if implementation is None or implementation == 'pari': try: from sage.rings.finite_rings.residue_field_pari_ffelt import ResidueFiniteField_pari_ffelt except ImportError: - if impl is not None: + if implementation is not None: raise else: return ResidueFiniteField_pari_ffelt(p, characteristic, names, f, to_vs, to_order, PB)