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

Commit

Permalink
Working implementation of Ore polynomials
Browse files Browse the repository at this point in the history
  • Loading branch information
xcaruso committed May 1, 2020
1 parent 2ed055d commit 8984aa7
Show file tree
Hide file tree
Showing 12 changed files with 4,100 additions and 3,983 deletions.
3 changes: 3 additions & 0 deletions src/module_list.py
Original file line number Diff line number Diff line change
Expand Up @@ -1525,6 +1525,9 @@ def uname_specific(name, value, alternative):
Extension('sage.rings.polynomial.symmetric_reduction',
sources = ['sage/rings/polynomial/symmetric_reduction.pyx']),

Extension('sage.rings.polynomial.ore_polynomial_element',
sources = ['sage/rings/polynomial/ore_polynomial_element.pyx']),

Extension('sage.rings.polynomial.skew_polynomial_element',
sources = ['sage/rings/polynomial/skew_polynomial_element.pyx']),

Expand Down
7 changes: 4 additions & 3 deletions src/sage/categories/rings.py
Original file line number Diff line number Diff line change
Expand Up @@ -1069,9 +1069,10 @@ def normalize_arg(arg):

if isinstance(arg, tuple):
from sage.categories.morphism import Morphism
if len(arg) == 2 and isinstance(arg[1], Morphism):
from sage.rings.polynomial.skew_polynomial_ring import SkewPolynomialRing
return SkewPolynomialRing(self, arg[1], names=arg[0])
from sage.rings.derivation import RingDerivation
if len(arg) == 2 and isinstance(arg[1], (Morphism, RingDerivation)):
from sage.rings.polynomial.ore_polynomial_ring import OrePolynomialRing
return OrePolynomialRing(self, arg[1], names=arg[0])

# 2. Otherwise, if all specified elements are algebraic, try to
# return an algebraic extension
Expand Down
2 changes: 1 addition & 1 deletion src/sage/rings/derivation.py
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,7 @@
from sage.categories.lie_algebras import LieAlgebras

from sage.categories.map import Map
from sage.categories.all import Rings
from sage.categories.rings import Rings


class RingDerivationModule(Module, UniqueRepresentation):
Expand Down
3 changes: 2 additions & 1 deletion src/sage/rings/polynomial/all.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,8 @@
# Infinite Polynomial Rings
from sage.rings.polynomial.infinite_polynomial_ring import InfinitePolynomialRing

# Skew Polynomial Rings
# Ore Polynomial Rings
from sage.rings.polynomial.ore_polynomial_ring import OrePolynomialRing
from sage.rings.polynomial.skew_polynomial_ring import SkewPolynomialRing

# Evaluation of cyclotomic polynomials
Expand Down
46 changes: 46 additions & 0 deletions src/sage/rings/polynomial/ore_polynomial_element.pxd
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
from sage.structure.element cimport AlgebraElement
from sage.structure.parent cimport Parent
from sage.rings.morphism cimport Morphism
from sage.structure.element cimport RingElement
from sage.rings.polynomial.polynomial_element cimport Polynomial_generic_dense

cdef class OrePolynomial(AlgebraElement):
cdef _is_gen

cdef long _hash_c(self)
cdef OrePolynomial _new_c(self, list coeffs, Parent P, char check=*)
cpdef OrePolynomial _new_constant_poly(self, RingElement a, Parent P, char check=*)
cpdef _neg_(self)
cpdef _floordiv_(self, right)
cpdef _mod_(self, right)

cpdef bint is_zero(self)
cpdef bint is_one(self)

cdef _left_quo_rem(self, OrePolynomial other)
cdef _right_quo_rem(self, OrePolynomial other)
cdef OrePolynomial _left_lcm_cofactor(self, OrePolynomial other)
cdef OrePolynomial _right_lcm_cofactor(self, OrePolynomial other)

# Abstract methods
cpdef int degree(self)
cpdef list coefficients(self, sparse=*)


cdef void lmul_gen(list A, Morphism m, d)

cdef class OrePolynomial_generic_dense(OrePolynomial):
cdef list _coeffs

cdef void __normalize(self)
cpdef _add_(self, other)
cdef list _mul_list(self, list A)
cpdef _mul_(self, other)

cpdef dict dict(self)
cpdef list list(self, bint copy=*)


cdef class OrePolynomialBaseringInjection(Morphism):
cdef RingElement _an_element
cdef object _new_constant_poly_
Loading

0 comments on commit 8984aa7

Please sign in to comment.