K i TdZddlmZddlmZmZmZddlmZeGddeZ y)z'Implementation of :class:`Ring` class. )Domain)ExactQuotientFailed NotInvertible NotReversible)publiccheZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZy)RingzRepresents a ring domain. Tc|S)z)Returns a ring associated with ``self``. )selfs ^/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sympy/polys/domains/ring.pyget_ringz Ring.get_rings c0||zr t|||||zS)z>Exact quotient of ``a`` and ``b``, implies ``__floordiv__``. )rr abs r exquoz Ring.exquos! q5%aD1 16Mrc ||zS)z7Quotient of ``a`` and ``b``, implies ``__floordiv__``. r rs r quozRing.quos Av rc ||zS)z4Remainder of ``a`` and ``b``, implies ``__mod__``. r rs r remzRing.rems 1u rct||S)z5Division of ``a`` and ``b``, implies ``__divmod__``. )divmodrs r divzRing.div"sa|rcp|j||\}}}|j|r||zStd)z"Returns inversion of ``a mod b``. z zero divisor)gcdexis_oner)r rrsths r invertz Ring.invert&s7**Q"1a ;;q>q5L/ /rcb|j|s|j| r|Std)z!Returns ``a**(-1)`` if possible. z#only units are reversible in a ring)rrr rs r revertz Ring.revert/s* ;;q>T[[!_H EF FrcF |j|y#t$rYywxYw)NTF)r%rr$s r is_unitz Ring.is_unit6s'  KKN  s   c|S)zReturns numerator of ``a``. r r$s r numerz Ring.numer=src|jS)zReturns denominator of `a`. )oner$s r denomz Ring.denomAs xxrct)z Generate a free module of rank ``rank`` over self. >>> from sympy.abc import x >>> from sympy import QQ >>> QQ.old_poly_ring(x).free_module(2) QQ[x]**2 )NotImplementedError)r ranks r free_modulezRing.free_moduleEs "!rc ddlm}|||jdj|Dcgc]}|gc}Scc}w)z Generate an ideal of ``self``. >>> from sympy.abc import x >>> from sympy import QQ >>> QQ.old_poly_ring(x).ideal(x**2) r)ModuleImplementedIdeal)sympy.polys.agca.idealsr2r0 submodule)r gensr2xs r idealz Ring.idealPsE C%d,ID,<,>> from sympy.abc import x >>> from sympy import QQ >>> QQ.old_poly_ring(x).quotient_ring(QQ.old_poly_ring(x).ideal(x**2)) QQ[x]/ >>> QQ.old_poly_ring(x).quotient_ring([x**2]) QQ[x]/ The division operator has been overloaded for this: >>> QQ.old_poly_ring(x)/[x**2] QQ[x]/ r)Ideal) QuotientRing)r4r: sympy.polys.domains.quotientringr; isinstancer8)r er:r;s r quotient_ringzRing.quotient_ring]s0$ 2A!U# AAD!$$rc$|j|S)N)r?)r r>s r __truediv__zRing.__truediv__us!!!$$rN)__name__ __module__ __qualname____doc__is_Ringrrrrrr"r%r'r)r,r0r8r?rAr rr r r sQ$G0G " #%0%rr N) rEsympy.polys.domains.domainrsympy.polys.polyerrorsrrrsympy.utilitiesrr r rr rJs2-.TT"l%6l%l%r