from typing import Any
from typing_extensions import Self

class Domain:
    dtype: type | None = ...
    zero: Any = ...
    one: Any = ...
    is_Ring = ...
    is_Field = ...
    has_assoc_Ring = ...
    has_assoc_Field = ...
    is_FF = ...
    is_ZZ = ...
    is_QQ = ...
    is_ZZ_I = ...
    is_QQ_I = ...
    is_RR = ...
    is_CC = ...
    is_Algebraic = ...
    is_Poly = ...
    is_Frac = ...
    is_EX = ...
    is_EXRAW = ...
    is_FiniteExtension = ...
    is_Exact = ...
    is_Numerical = ...
    is_Simple = ...
    is_Composite = ...
    is_PID = ...
    has_CharacteristicZero = ...
    rep: str | None = ...
    alias: str | None = ...
    def __init__(self) -> None: ...
    def __hash__(self) -> int: ...
    def new(self, *args): ...
    @property
    def tp(self) -> None: ...
    def __call__(self, *args): ...
    def normal(self, *args): ...
    def convert_from(self, element, base) -> Any: ...
    def convert(self, element, base=...) -> Any: ...
    def of_type(self, element) -> bool: ...
    def __contains__(self, a) -> bool: ...
    def to_sympy(self, a): ...
    def from_sympy(self, a): ...
    def sum(self, args) -> int: ...
    def from_FF(K1, a, K0) -> None: ...
    def from_FF_python(K1, a, K0) -> None: ...
    def from_ZZ_python(K1, a, K0) -> None: ...
    def from_QQ_python(K1, a, K0) -> None: ...
    def from_FF_gmpy(K1, a, K0) -> None: ...
    def from_ZZ_gmpy(K1, a, K0) -> None: ...
    def from_QQ_gmpy(K1, a, K0) -> None: ...
    def from_RealField(K1, a, K0) -> None: ...
    def from_ComplexField(K1, a, K0) -> None: ...
    def from_AlgebraicField(K1, a, K0) -> None: ...
    def from_PolynomialRing(K1, a, K0) -> Any | None: ...
    def from_FractionField(K1, a, K0) -> None: ...
    def from_MonogenicFiniteExtension(K1, a, K0) -> Any: ...
    def from_ExpressionDomain(K1, a, K0): ...
    def from_ExpressionRawDomain(K1, a, K0): ...
    def from_GlobalPolynomialRing(K1, a, K0) -> Any | None: ...
    def from_GeneralizedPolynomialRing(K1, a, K0) -> None: ...
    def unify_with_symbols(K0, K1, symbols): ...
    def unify(K0, K1, symbols=...): ...
    def __eq__(self, other) -> bool: ...
    def __ne__(self, other) -> bool: ...
    def map(self, seq) -> list[Any]: ...
    def get_ring(self): ...
    def get_field(self): ...
    def get_exact(self) -> Self: ...
    def __getitem__(self, symbols) -> Any: ...
    def poly_ring(self, *symbols, order=...) -> Any: ...
    def frac_field(self, *symbols, order=...) -> Any: ...
    def old_poly_ring(self, *symbols, **kwargs) -> Any: ...
    def old_frac_field(self, *symbols, **kwargs) -> Any: ...
    def algebraic_field(self, *extension, alias=...): ...
    def alg_field_from_poly(self, poly, alias=..., root_index=...): ...
    def cyclotomic_field(self, n, ss=..., alias=..., gen=..., root_index=...): ...
    def inject(self, *symbols): ...
    def drop(self, *symbols) -> Self: ...
    def is_zero(self, a) -> bool: ...
    def is_one(self, a): ...
    def is_positive(self, a): ...
    def is_negative(self, a): ...
    def is_nonpositive(self, a): ...
    def is_nonnegative(self, a): ...
    def canonical_unit(self, a) -> Any: ...
    def abs(self, a): ...
    def neg(self, a): ...
    def pos(self, a): ...
    def add(self, a, b): ...
    def sub(self, a, b): ...
    def mul(self, a, b): ...
    def pow(self, a, b): ...
    def exquo(self, a, b): ...
    def quo(self, a, b): ...
    def rem(self, a, b): ...
    def div(self, a, b): ...
    def invert(self, a, b): ...
    def revert(self, a): ...
    def numer(self, a): ...
    def denom(self, a): ...
    def half_gcdex(self, a, b) -> tuple[Any, Any]: ...
    def gcdex(self, a, b): ...
    def cofactors(self, a, b) -> tuple[Any, Any, Any]: ...
    def gcd(self, a, b): ...
    def lcm(self, a, b): ...
    def log(self, a, b): ...
    def sqrt(self, a): ...
    def evalf(self, a, prec=..., **options): ...

    n = ...
    def real(self, a): ...
    def imag(self, a) -> Any: ...
    def almosteq(self, a, b, tolerance=...): ...
    def characteristic(self): ...

__all__ = ["Domain"]
