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: ...

    __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 __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: ...
