Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
eb3a270
sage.structure.element: Add ABCs Polynomial, MPolynomial, use for isi…
mkoeppe Dec 6, 2022
6696f5c
Use ABC MPolynomial for isinstance testing
mkoeppe Dec 6, 2022
79f7e62
Fixups
mkoeppe Dec 6, 2022
ed050bb
sage.rings.polynomial: Make it a namespace package
mkoeppe Dec 6, 2022
0613280
sage.structure.element: Introduce common base class CommutativePolyno…
mkoeppe Jan 7, 2023
27e8889
sage.structure.element: Introduce ABC InfinitePolynomial
mkoeppe Jan 7, 2023
57228f5
src/sage/structure/element.pyx: Update hierarchy in documentation
mkoeppe Jan 7, 2023
95e0adc
src/sage/structure/element.pyx: Add unique-direct-subclass tests
mkoeppe Jan 7, 2023
1fd625c
src/sage/structure/element.pyx: Add unique-direct-subclass test for E…
mkoeppe Jan 7, 2023
960506b
InfinitePolynomial: Change from constructor function to base class wi…
mkoeppe Jan 18, 2023
fd54c82
Remove ABCs sage.structure.element.*Polynomial; introduce ABCs in sag…
mkoeppe Jan 18, 2023
538c2a7
Replace use of implementation class from multi_polynomial_libsingular…
mkoeppe Jan 23, 2023
0fcb6fb
src/sage/rings/polynomial/commutative_polynomial.pyx: Add doctests
mkoeppe Jan 23, 2023
6e2adaf
InfinitePolynomial: Move _lmul_, _rmul_ here from subclasses
mkoeppe Jan 25, 2023
cdab0df
InfinitePolynomial.__classcall_private__: Add doctest
mkoeppe Jan 25, 2023
f7e9f41
Merge tag '9.8' into t/32709/sage_structure_element__add_abcs_polynom…
mkoeppe Feb 11, 2023
e06e582
src/sage/rings/polynomial/infinite_polynomial_element.py: Use Infinit…
mkoeppe Feb 12, 2023
6b557c0
Merge tag '10.0.beta0' into t/32709/sage_structure_element__add_abcs_…
mkoeppe Feb 13, 2023
8f5b799
src/sage/combinat/schubert_polynomial.py: Use isinstance(..., Infinit…
mkoeppe Feb 13, 2023
2d32a2e
Merge branch 'develop' into t/32709/sage_structure_element__add_abcs_…
mkoeppe Feb 13, 2023
95b8793
Merge branch 'develop' into t/32709/sage_structure_element__add_abcs_…
mkoeppe Feb 14, 2023
488a8b1
Merge branch 'develop' into t/32709/sage_structure_element__add_abcs_…
mkoeppe Feb 19, 2023
ffb4647
src/sage/rings/polynomial/polynomial_element.pyx: Update doctest outp…
mkoeppe Feb 20, 2023
2993660
Merge remote-tracking branch 'upstream/develop' into t/32709/sage_str…
mkoeppe Mar 3, 2023
3b65350
src/sage/quadratic_forms/quadratic_form.py: Replace use of deprecated…
mkoeppe Mar 3, 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
Next Next commit
sage.structure.element: Add ABCs Polynomial, MPolynomial, use for isi…
…nstance testing
  • Loading branch information
Matthias Koeppe committed Jan 22, 2023
commit eb3a270968597fcec607a9f1c5d8d2ca42725e88
4 changes: 2 additions & 2 deletions src/sage/combinat/kazhdan_lusztig.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
#*****************************************************************************


from sage.rings.polynomial.polynomial_element import is_Polynomial
from sage.structure.element import Polynomial
from sage.misc.cachefunc import cached_method
from sage.rings.polynomial.laurent_polynomial import LaurentPolynomial
from sage.structure.sage_object import SageObject
Expand Down Expand Up @@ -75,7 +75,7 @@ def __init__(self, W, q, trace=False):
self._trace = trace
self._one = W.one()
self._base_ring = q.parent()
if is_Polynomial(q):
if isinstance(q, Polynomial):
self._base_ring_type = "polynomial"
elif isinstance(q, LaurentPolynomial):
self._base_ring_type = "laurent"
Expand Down
4 changes: 2 additions & 2 deletions src/sage/combinat/sf/sfa.py
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,7 @@
from sage.rings.integer import Integer
from sage.rings.infinity import infinity
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
from sage.rings.polynomial.polynomial_element import is_Polynomial
from sage.structure.element import Polynomial
from sage.rings.polynomial.multi_polynomial import is_MPolynomial
from sage.combinat.partition import _Partitions, Partitions, Partitions_n, Partition
from sage.categories.hopf_algebras import HopfAlgebras
Expand Down Expand Up @@ -6404,7 +6404,7 @@ def _nonnegative_coefficients(x):
sage: _nonnegative_coefficients(x^2-4)
False
"""
if is_Polynomial(x) or is_MPolynomial(x):
if isinstance(x, Polynomial) or is_MPolynomial(x):
return all(c >= 0 for c in x.coefficients(sparse=False))
else:
return x >= 0
Expand Down
4 changes: 2 additions & 2 deletions src/sage/crypto/boolean_function.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ from sage.rings.finite_rings.finite_field_constructor import GF
from sage.rings.polynomial.pbori.pbori import BooleanPolynomial
from sage.rings.finite_rings.finite_field_constructor import is_FiniteField
from sage.rings.finite_rings.finite_field_givaro import FiniteField_givaro
from sage.rings.polynomial.polynomial_element import is_Polynomial
from sage.structure.element import Polynomial

from sage.misc.superseded import deprecated_function_alias

Expand Down Expand Up @@ -327,7 +327,7 @@ cdef class BooleanFunction(SageObject):
bitset_init(self._truth_table, <mp_bitcnt_t> (1<<self._nvariables))
bitset_zero(self._truth_table)

elif is_Polynomial(x):
elif isinstance(x, Polynomial):
K = x.base_ring()
if is_FiniteField(K) and K.characteristic() == 2:
self._nvariables = K.degree()
Expand Down
4 changes: 2 additions & 2 deletions src/sage/crypto/sbox.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -173,12 +173,12 @@ cdef class SBox(SageObject):
sage: S.output_size()
3
"""
from sage.rings.polynomial.polynomial_element import is_Polynomial
from sage.structure.element import Polynomial

if "S" in kwargs:
args = kwargs["S"]

if len(args) == 1 and is_Polynomial(args[0]):
if len(args) == 1 and isinstance(args[0], Polynomial):
# SBox defined via Univariate Polynomial, compute lookup table
# by evaluating the polynomial on every base_ring element
poly = args[0]
Expand Down
4 changes: 2 additions & 2 deletions src/sage/crypto/stream.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
from sage.arith.all import gcd, power_mod
from sage.rings.finite_rings.finite_field_constructor import FiniteField
from sage.rings.finite_rings.integer_mod_ring import IntegerModFactory
from sage.rings.polynomial.polynomial_element import is_Polynomial
from sage.structure.element import Polynomial


IntegerModRing = IntegerModFactory("IntegerModRing")
Expand Down Expand Up @@ -73,7 +73,7 @@ def __call__(self, key):
if not isinstance(key, (list, tuple)) and len(key) == 2:
raise TypeError("Argument key (= %s) must be a list of tuple of length 2" % key)
poly, IS = key
if not is_Polynomial(poly):
if not isinstance(poly, Polynomial):
raise TypeError("poly (= %s) must be a polynomial." % poly)
if not isinstance(IS, (list, tuple)):
raise TypeError("IS (= %s) must be an initial in the key space." % IS)
Expand Down
4 changes: 2 additions & 2 deletions src/sage/groups/affine_gps/group_element.py
Original file line number Diff line number Diff line change
Expand Up @@ -414,8 +414,8 @@ def __call__(self, v):
if v in parent.vector_space():
return self._A*v + self._b

from sage.rings.polynomial.polynomial_element import is_Polynomial
if is_Polynomial(v) and parent.degree() == 1:
from sage.structure.element import Polynomial
if isinstance(v, Polynomial) and parent.degree() == 1:
ring = v.parent()
return ring([self._A[0,0], self._b[0]])

Expand Down
4 changes: 2 additions & 2 deletions src/sage/groups/perm_gps/permgroup_element.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ from cypari2.gen cimport Gen

from sage.ext.stdsage cimport HAS_DICTIONARY
from sage.rings.all import ZZ, Integer
from sage.rings.polynomial.polynomial_element import is_Polynomial
from sage.structure.element import Polynomial
from sage.rings.polynomial.multi_polynomial import is_MPolynomial
from sage.structure.element import is_Matrix
from sage.matrix.all import MatrixSpace
Expand Down Expand Up @@ -1225,7 +1225,7 @@ cdef class PermutationGroupElement(MultiplicativeGroupElement):
"""
if not self_on_left:
left = x
if is_Polynomial(left):
if isinstance(left, Polynomial):
if self != 1:
raise ValueError("%s does not act on %s" % (self,
left.parent()))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -290,7 +290,7 @@
from .bundle_connection import BundleConnection
from .levi_civita_connection import LeviCivitaConnection
from sage.symbolic.expression import Expression
from sage.rings.polynomial.polynomial_element import is_Polynomial
from sage.structure.element import Polynomial
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing


Expand Down Expand Up @@ -795,7 +795,7 @@ def _element_constructor_(self, x, **kwargs):
Characteristic cohomology class pontr(TM) of the Tangent bundle
TM over the 8-dimensional differentiable manifold M
"""
if isinstance(x, (str, Expression)) or is_Polynomial(x):
if isinstance(x, (str, Expression)) or isinstance(x, Polynomial):
return self._build_element(x, **kwargs)

R = self.base_ring()
Expand Down Expand Up @@ -983,7 +983,7 @@ def _build_element(self, *args, **kwargs):
val = P(val.taylor(x, 0, pow_range))

# turn polynomial into a characteristic cohomology class via sequences
if is_Polynomial(val):
if isinstance(val, Polynomial):
if class_type is None:
raise TypeError(f'class_type must be stated if {val} '
f'is a polynomial')
Expand Down
4 changes: 2 additions & 2 deletions src/sage/quadratic_forms/constructions.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
##

from sage.rings.integer_ring import ZZ
from sage.rings.polynomial.polynomial_element import is_Polynomial
from sage.structure.element import Polynomial
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
from sage.quadratic_forms.quadratic_form import QuadraticForm

Expand Down Expand Up @@ -46,7 +46,7 @@ def BezoutianQuadraticForm(f, g):

"""
# Check that f and g are polynomials with a common base ring
if not is_Polynomial(f) or not is_Polynomial(g):
if not isinstance(f, Polynomial) or not isinstance(g, Polynomial):
raise TypeError("one of your inputs is not a polynomial")
if f.base_ring() != g.base_ring(): # TO DO: Change this to allow coercion!
raise TypeError("these polynomials are not defined over the same coefficient ring")
Expand Down
2 changes: 1 addition & 1 deletion src/sage/rings/finite_rings/element_ntl_gf2e.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -1004,7 +1004,7 @@ cdef class FiniteField_ntl_gf2eElement(FinitePolyExtElement):
sage: e.polynomial()
a^15 + a^13 + a^11 + a^10 + a^9 + a^8 + a^7 + a^6 + a^4 + a + 1

sage: from sage.rings.polynomial.polynomial_element import is_Polynomial
sage: from sage.structure.element import Polynomial
sage: is_Polynomial(e.polynomial())
True

Expand Down
4 changes: 2 additions & 2 deletions src/sage/rings/finite_rings/finite_field_base.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -1521,7 +1521,7 @@ cdef class FiniteField(Field):
True
"""
from .finite_field_constructor import GF
from sage.rings.polynomial.polynomial_element import is_Polynomial
from sage.structure.element import Polynomial
from sage.rings.integer import Integer
if name is None and names is not None:
name = names
Expand All @@ -1532,7 +1532,7 @@ cdef class FiniteField(Field):
E = GF((self.characteristic(), modulus), name=name, **kwds)
elif isinstance(modulus, (list, tuple)):
E = GF((self.characteristic(), len(modulus) - 1), name=name, modulus=modulus, **kwds)
elif is_Polynomial(modulus):
elif isinstance(modulus, Polynomial):
if modulus.change_ring(self).is_irreducible():
E = GF((self.characteristic(), modulus.degree()), name=name, modulus=modulus, **kwds)
else:
Expand Down
4 changes: 2 additions & 2 deletions src/sage/rings/finite_rings/finite_field_constructor.py
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@

from collections import defaultdict
from sage.structure.category_object import normalize_names

from sage.structure.element import Polynomial
from sage.rings.integer import Integer

# the import below is just a redirection
Expand Down Expand Up @@ -641,7 +641,7 @@ def create_key_and_extra_args(self, order, name=None, modulus=None, names=None,
else:
self._modulus_cache[order][modulus] = modulus = R.irreducible_element(n, algorithm=modulus)
else:
if sage.rings.polynomial.polynomial_element.is_Polynomial(modulus):
if isinstance(modulus, Polynomial):
modulus = modulus.change_variable_name('x')
modulus = R(modulus).monic()

Expand Down
4 changes: 2 additions & 2 deletions src/sage/rings/finite_rings/finite_field_givaro.py
Original file line number Diff line number Diff line change
Expand Up @@ -137,8 +137,8 @@ def __init__(self, q, name="a", modulus=None, repr="poly", cache=False):
from .finite_field_constructor import GF
FiniteField.__init__(self, GF(p), name, normalize=False)

from sage.rings.polynomial.polynomial_element import is_Polynomial
if not is_Polynomial(modulus):
from sage.structure.element import Polynomial
if not isinstance(modulus, Polynomial):
raise TypeError("modulus must be a polynomial")

self._cache = Cache_givaro(self, p, k, modulus, repr, cache)
Expand Down
4 changes: 2 additions & 2 deletions src/sage/rings/finite_rings/finite_field_ntl_gf2e.py
Original file line number Diff line number Diff line change
Expand Up @@ -138,8 +138,8 @@ def __init__(self, q, names="a", modulus=None, repr="poly"):
raise ValueError("q must be a 2-power")
FiniteField.__init__(self, GF2, names, normalize=True)

from sage.rings.polynomial.polynomial_element import is_Polynomial
if not is_Polynomial(modulus):
from sage.structure.element import Polynomial
if not isinstance(modulus, Polynomial):
raise TypeError("modulus must be a polynomial")

self._cache = Cache_ntl_gf2e(self, k, modulus)
Expand Down
4 changes: 2 additions & 2 deletions src/sage/rings/finite_rings/residue_field.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ from sage.rings.fraction_field import is_FractionField

from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
from sage.rings.polynomial.polynomial_ring import is_PolynomialRing
from sage.rings.polynomial.polynomial_element import is_Polynomial
from sage.structure.element import Polynomial

from sage.structure.factory import UniqueFactory
from sage.structure.element cimport parent
Expand Down Expand Up @@ -300,7 +300,7 @@ class ResidueFieldFactory(UniqueFactory):
p = p.parent().ring_of_integers().ideal(p)
else:
p = p.parent().ideal(p)
elif is_Polynomial(p):
elif isinstance(p, Polynomial):
p = p.parent().ideal(p)
#elif isinstance(p.parent(), FractionField_1poly_field):
# p = p.parent().ring_of_integers().ideal(p)
Expand Down
4 changes: 2 additions & 2 deletions src/sage/rings/function_field/function_field.py
Original file line number Diff line number Diff line change
Expand Up @@ -1307,8 +1307,8 @@ def __init__(self, polynomial, names, category=None):
TypeError: unable to evaluate 'x' in Fraction Field of Univariate
Polynomial Ring in t over Rational Field
"""
from sage.rings.polynomial.polynomial_element import is_Polynomial
if polynomial.parent().ngens()>1 or not is_Polynomial(polynomial):
from sage.structure.element import Polynomial
if polynomial.parent().ngens()>1 or not isinstance(polynomial, Polynomial):
raise TypeError("polynomial must be univariate a polynomial")
if names is None:
names = (polynomial.variable_name(), )
Expand Down
2 changes: 1 addition & 1 deletion src/sage/rings/laurent_series_ring.py
Original file line number Diff line number Diff line change
Expand Up @@ -466,7 +466,7 @@ def _element_constructor_(self, x, n=0, prec=infinity):
x^-3
"""
from sage.rings.fraction_field_element import is_FractionFieldElement
from sage.rings.polynomial.polynomial_element import is_Polynomial
from sage.structure.element import Polynomial
from sage.rings.polynomial.multi_polynomial_element import is_MPolynomial
from sage.structure.element import parent
from sage.libs.pari.all import pari_gen
Expand Down
6 changes: 3 additions & 3 deletions src/sage/rings/number_field/number_field.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@
import sage.interfaces.gap

import sage.rings.complex_mpfr
from sage.rings.polynomial.polynomial_element import is_Polynomial
from sage.structure.element import Polynomial
import sage.rings.real_mpfr
import sage.rings.real_mpfi
import sage.rings.complex_double
Expand Down Expand Up @@ -647,7 +647,7 @@ def create_key_and_extra_args(self, polynomial, name, check, embedding, latex_na
raise TypeError("You must specify the name of the generator.")
name = normalize_names(1, name)

if not is_Polynomial(polynomial):
if not isinstance(polynomial, Polynomial):
try:
polynomial = polynomial.polynomial(QQ)
except (AttributeError, TypeError):
Expand Down Expand Up @@ -868,7 +868,7 @@ def NumberFieldTower(polynomials, names, check=True, embeddings=None, latex_name
f = polynomials[0]
name = names[0]
w = NumberFieldTower(polynomials[1:], names=names[1:], check=check, embeddings=embeddings[1:], latex_names=latex_names[1:], assume_disc_small=assume_disc_small, maximize_at_primes=maximize_at_primes, structures=structures[1:])
var = f.variable_name() if is_Polynomial(f) else 'x'
var = f.variable_name() if isinstance(f, Polynomial) else 'x'

R = w[var] # polynomial ring
return w.extension(R(f), name, check=check, embedding=embeddings[0], structure=structures[0], latex_name=latex_names[0]) # currently, extension does not accept assume_disc_small, or maximize_at_primes
Expand Down
8 changes: 4 additions & 4 deletions src/sage/rings/padics/factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
from sage.rings.infinity import Infinity
from sage.structure.factorization import Factorization
from sage.rings.integer_ring import ZZ
from sage.rings.polynomial.polynomial_element import is_Polynomial
from sage.structure.element import Polynomial
from sage.structure.element import is_Element
from .padic_base_leaves import (pAdicRingCappedRelative,
pAdicRingCappedAbsolute,
Expand Down Expand Up @@ -2535,7 +2535,7 @@ def Zq(q, prec = None, type = 'capped-rel', modulus = None, names=None,
if isinstance(names, (list, tuple)):
names = names[0]
from sage.structure.element import Expression
if not (modulus is None or is_Polynomial(modulus) or isinstance(modulus, Expression)):
if not (modulus is None or isinstance(modulus, Polynomial) or isinstance(modulus, Expression)):
raise TypeError("modulus must be a polynomial")
if names is not None and not isinstance(names, str):
names = str(names)
Expand Down Expand Up @@ -3278,7 +3278,7 @@ def create_key_and_extra_args(self, base, modulus, prec = None, print_mode = Non
raise ValueError("symbolic expression must be in only one variable")
exact_modulus = modulus.polynomial(base.exact_field())
approx_modulus = modulus.polynomial(base)
elif is_Polynomial(modulus):
elif isinstance(modulus, Polynomial):
if modulus.parent().ngens() != 1:
raise ValueError("must use univariate polynomial")
exact_modulus = modulus.change_ring(base.exact_field())
Expand Down Expand Up @@ -3381,7 +3381,7 @@ def create_object(self, version, key, approx_modulus=None, shift_seed=None):
from sage.structure.element import Expression
if isinstance(premodulus, Expression):
exact_modulus = premodulus.polynomial(base.exact_field())
elif is_Polynomial(premodulus):
elif isinstance(premodulus, Polynomial):
exact_modulus = premodulus.change_ring(base.exact_field())
show_prec = None
else:
Expand Down
4 changes: 2 additions & 2 deletions src/sage/rings/padics/padic_template_element.pxi
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ from sage.rings.infinity import infinity
from sage.rings.rational import Rational
from sage.rings.padics.precision_error import PrecisionError
from sage.rings.padics.misc import trim_zeros
from sage.structure.element import canonical_coercion
from sage.structure.element import canonical_coercion, Polynomial
import itertools

cdef long maxordp = (1L << (sizeof(long) * 8 - 2)) - 1
Expand Down Expand Up @@ -156,7 +156,7 @@ cdef class pAdicTemplateElement(pAdicGenericElement):
x = x + [k.prime_subfield().zero()] * (k.degree() - len(x))
elif isinstance(x, (Integer, Rational, list, tuple)):
pass
elif sage.rings.polynomial.polynomial_element.is_Polynomial(x) and x.variable_name() == self.parent().variable_name():
elif isinstance(x, Polynomial) and x.variable_name() == self.parent().variable_name():
x = x.list()
else:
x = Rational(x)
Expand Down
4 changes: 2 additions & 2 deletions src/sage/rings/polynomial/multi_polynomial.pxd
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from sage.structure.element cimport CommutativeRingElement
from sage.structure.element cimport MPolynomial as MPolynomial_base

cdef class MPolynomial(CommutativeRingElement):
cdef class MPolynomial(MPolynomial_base):
cdef long _hash_c(self) except -1
cpdef _mod_(self, right)
cpdef dict _mpoly_dict_recursive(self, tuple vars=*, base_ring=*)
Expand Down
2 changes: 1 addition & 1 deletion src/sage/rings/polynomial/multi_polynomial.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ from sage.rings.real_mpfr import RealField_class,RealField
from sage.rings.polynomial.polydict cimport ETuple
from sage.rings.polynomial.polynomial_element cimport Polynomial

cdef class MPolynomial(CommutativeRingElement):
cdef class MPolynomial(MPolynomial_base):

####################
# Some standard conversions
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -661,7 +661,7 @@ def rshift_coeffs(self, shift, no_list=False):
return Polynomial_padic_capped_relative_dense(self.parent(), (self._poly // fdiv, 0, [0 if a <= shift else a - shift for a in self._relprecs], False, None, None), construct=True)

# def __floordiv__(self, right):
# if is_Polynomial(right) and right.is_constant() and right[0] in self.base_ring():
# if isinstance(right, Polynomial) and right.is_constant() and right[0] in self.base_ring():
# d = self.base_ring()(right[0])
# elif (right in self.base_ring()):
# d = self.base_ring()(right)
Expand Down
5 changes: 3 additions & 2 deletions src/sage/rings/polynomial/polynomial_element.pxd
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
from sage.structure.element import Element, CommutativeAlgebraElement
from sage.structure.element import Element
from sage.structure.element cimport Element, CommutativeAlgebraElement, ModuleElement
from sage.structure.element cimport Polynomial as Polynomial_base
from sage.structure.parent cimport Parent
from sage.rings.integer cimport Integer
from .polynomial_compiled cimport CompiledPolynomialFunction


cdef class Polynomial(CommutativeAlgebraElement):
cdef class Polynomial(Polynomial_base):
cdef Polynomial _new_generic(self, list coeffs)
cdef char _is_gen
cdef CompiledPolynomialFunction _compiled
Expand Down
Loading