from types import NotImplementedType
from typing import Any
from sympy.polys.agca.modules import FreeModuleQuotientRing
from sympy.polys.domains.ring import Ring
from sympy.utilities import public

class QuotientRingElement:
    def __init__(self, ring, data) -> None:
        ...
    
    def __str__(self) -> str:
        ...
    
    __repr__ = ...
    def __bool__(self) -> bool:
        ...
    
    def __add__(self, om) -> NotImplementedType:
        ...
    
    __radd__ = ...
    def __neg__(self):
        ...
    
    def __sub__(self, om) -> NotImplementedType:
        ...
    
    def __rsub__(self, om):
        ...
    
    def __mul__(self, o) -> NotImplementedType:
        ...
    
    __rmul__ = ...
    def __rtruediv__(self, o):
        ...
    
    def __truediv__(self, o) -> NotImplementedType:
        ...
    
    def __pow__(self, oth):
        ...
    
    def __eq__(self, om) -> bool:
        ...
    
    def __ne__(self, om) -> bool:
        ...
    


class QuotientRing(Ring):
    has_assoc_Ring = ...
    has_assoc_Field = ...
    dtype = ...
    def __init__(self, ring, ideal) -> None:
        ...
    
    def __str__(self) -> str:
        ...
    
    def __hash__(self) -> int:
        ...
    
    def new(self, a) -> Any:
        ...
    
    def __eq__(self, other) -> bool:
        ...
    
    def from_ZZ(K1, a, K0):
        ...
    
    from_ZZ_python = ...
    from_QQ_python = ...
    from_ZZ_gmpy = ...
    from_QQ_gmpy = ...
    from_RealField = ...
    from_GlobalPolynomialRing = ...
    from_FractionField = ...
    def from_sympy(self, a):
        ...
    
    def to_sympy(self, a):
        ...
    
    def from_QuotientRing(self, a, K0) -> None:
        ...
    
    def poly_ring(self, *gens):
        ...
    
    def frac_field(self, *gens):
        ...
    
    def revert(self, a):
        ...
    
    def is_zero(self, a):
        ...
    
    def free_module(self, rank) -> FreeModuleQuotientRing:
        ...
    


