Skip to content
This repository was archived by the owner on Jan 30, 2023. It is now read-only.

Commit 362fff7

Browse files
Merge branch 'u/arpitdm/skew_polynomials' of git://trac.sagemath.org/sage into 13215_skew_polynomials
2 parents cadb3b6 + 271bfac commit 362fff7

10 files changed

+4129
-0
lines changed

src/doc/en/reference/polynomial_rings/index.rst

+10
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,16 @@ Multivariate Polynomials
2929
sage/rings/invariant_theory
3030
polynomial_rings_toy_implementations
3131

32+
Skew Polynomials
33+
----------------
34+
35+
.. toctree::
36+
:maxdepth: 2
37+
38+
sage/rings/polynomial/skew_polynomial_element
39+
sage/rings/polynomial/skew_polynomial_ring_constructor
40+
sage/rings/polynomial/skew_polynomial_ring
41+
3242
Rational Functions
3343
------------------
3444

src/module_list.py

+3
Original file line numberDiff line numberDiff line change
@@ -1799,6 +1799,9 @@ def uname_specific(name, value, alternative):
17991799

18001800
Extension('*', ['sage/symbolic/*.pyx']),
18011801

1802+
Extension('sage.rings.polynomial.skew_polynomial_element',
1803+
sources = ['sage/rings/polynomial/skew_polynomial_element.pyx']),
1804+
18021805
################################
18031806
##
18041807
## sage.tests

src/sage/categories/map.pyx

+17
Original file line numberDiff line numberDiff line change
@@ -1411,6 +1411,23 @@ cdef class Section(Map):
14111411
"""
14121412
return "Section"
14131413

1414+
def inverse(self):
1415+
"""
1416+
Return inverse of ``self``.
1417+
1418+
TEST::
1419+
1420+
sage: from sage.categories.map import Section
1421+
sage: R.<x,y> = QQ[]
1422+
sage: f = R.hom([x+y, x-y], R)
1423+
sage: sf = Section(f)
1424+
sage: sf.inverse()
1425+
Ring endomorphism of Multivariate Polynomial Ring in x, y over Rational Field
1426+
Defn: x |--> x + y
1427+
y |--> x - y
1428+
"""
1429+
return self._inverse
1430+
14141431
cdef class FormalCompositeMap(Map):
14151432
"""
14161433
Formal composite maps.

src/sage/categories/rings.py

+13
Original file line numberDiff line numberDiff line change
@@ -737,6 +737,13 @@ def __getitem__(self, arg):
737737
sage: GF(17)['a']['b']
738738
Univariate Polynomial Ring in b over Univariate Polynomial Ring in a over Finite Field of size 17
739739
740+
We can create skew polynomial rings::
741+
742+
sage: k.<t> = GF(5^3)
743+
sage: Frob = k.frobenius_endomorphism()
744+
sage: k['x',Frob]
745+
Skew Polynomial Ring in x over Finite Field in t of size 5^3 twisted by t |--> t^5
746+
740747
We can also create power series rings by using double brackets::
741748
742749
sage: QQ[['t']]
@@ -849,6 +856,12 @@ def normalize_arg(arg):
849856
from sage.rings.power_series_ring import PowerSeriesRing
850857
return PowerSeriesRing(self, elts)
851858

859+
if isinstance(arg, tuple):
860+
from sage.categories.morphism import Morphism
861+
if len(arg) == 2 and isinstance(arg[1], Morphism):
862+
from sage.rings.polynomial.skew_polynomial_ring_constructor import SkewPolynomialRing
863+
return SkewPolynomialRing(self, arg[1], names=arg[0])
864+
852865
# 2. Otherwise, if all specified elements are algebraic, try to
853866
# return an algebraic extension
854867

src/sage/rings/polynomial/all.py

+3
Original file line numberDiff line numberDiff line change
@@ -44,5 +44,8 @@
4444
# Infinite Polynomial Rings
4545
from sage.rings.polynomial.infinite_polynomial_ring import InfinitePolynomialRing
4646

47+
# Skew Polynomial Rings
48+
from sage.rings.polynomial.skew_polynomial_ring_constructor import SkewPolynomialRing
49+
4750
# Evaluation of cyclotomic polynomials
4851
from sage.rings.polynomial.cyclotomic import cyclotomic_value

src/sage/rings/polynomial/multi_polynomial_sequence.py

+4
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,10 @@
150150
in Topics in Cryptology -- CT RSA'06; LNCS 3860; pp. 313--331; Springer Verlag 2006;
151151
pre-print available at http://eprint.iacr.org/2005/200
152152
153+
.. [CMR05] C. Cid, S. Murphy, M. Robshaw Small Scale Variants of the AES;
154+
in Proceedings of Fast Software Encryption 2005; LNCS 3557;
155+
Springer Verlag 2005; available at http://www.isg.rhul.ac.uk/~sean/smallAES-fse05.pdf
156+
153157
Classes
154158
-------
155159
"""
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
include "cysignals/signals.pxi"
2+
include "../../ext/cdefs.pxi"
3+
include '../../ext/stdsage.pxi'
4+
5+
from sage.rings.integer cimport Integer
6+
7+
from sage.structure.element cimport Element, AlgebraElement, ModuleElement
8+
from sage.structure.parent cimport Parent
9+
from polynomial_compiled cimport CompiledPolynomialFunction
10+
11+
from sage.rings.morphism cimport RingHomomorphism
12+
from sage.structure.element cimport RingElement
13+
14+
from sage.rings.polynomial.polynomial_element cimport Polynomial_generic_dense
15+
16+
cdef class SkewPolynomial(AlgebraElement):
17+
cdef _is_gen
18+
19+
cdef long _hash_c(self)
20+
cdef SkewPolynomial _new_c(self,list coeffs,Parent P,char check=*)
21+
cpdef SkewPolynomial _new_constant_poly(self,RingElement a,Parent P,char check=*)
22+
cpdef _neg_(self)
23+
cpdef list list(self)
24+
25+
cdef list _coeffs
26+
cdef void __normalize(self)
27+
cdef void _inplace_add(self, SkewPolynomial_generic_dense right)
28+
cdef void _inplace_sub(self, SkewPolynomial_generic_dense right)
29+
cdef void _inplace_rmul(self, SkewPolynomial_generic_dense right)
30+
cdef void _inplace_lmul(self, SkewPolynomial_generic_dense right)
31+
cdef void _inplace_pow(self, Py_ssize_t n)
32+
33+
cdef class SkewPolynomial_generic_dense(SkewPolynomial):
34+
cpdef _rightpow_(self,right,modulus=*)
35+
cpdef _leftpow_(self,right,modulus=*)
36+
37+
cdef class SkewPolynomialBaseringInjection(RingHomomorphism):
38+
cdef RingElement _an_element
39+
cdef object _new_constant_poly_

0 commit comments

Comments
 (0)