ó
    Š*£h¤  ã                   óT   • S r SSKJr  SSKJrJrJr  SSKJr  \ " S S\5      5       r	g)z'Implementation of :class:`Ring` class. é    )ÚDomain)ÚExactQuotientFailedÚNotInvertibleÚNotReversible)Úpublicc                   óp   • \ rS rSrSrSrS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rSrg)ÚRingé	   zRepresents a ring domain. Tc                 ó   • U $ )z)Returns a ring associated with ``self``. © )Úselfs    ÚU/home/mande/repo/quber/.venv/lib/python3.13/site-packages/sympy/polys/domains/ring.pyÚget_ringÚRing.get_ring   s   € àˆó    c                 ó4   • X-  (       a  [        XU 5      eX-  $ )z>Exact quotient of ``a`` and ``b``, implies ``__floordiv__``.  )r   ©r   ÚaÚbs      r   ÚexquoÚ
Ring.exquo   s   € à�5Ü% a¨DÓ1Ð1à‘6ˆMr   c                 ó
   • X-  $ )z7Quotient of ``a`` and ``b``, implies ``__floordiv__``. r   r   s      r   ÚquoÚRing.quo   s	   € à‰vˆr   c                 ó
   • X-  $ )z4Remainder of ``a`` and ``b``, implies ``__mod__``.  r   r   s      r   ÚremÚRing.rem   s	   € à‰uˆr   c                 ó   • [        X5      $ )z5Division of ``a`` and ``b``, implies ``__divmod__``. )Údivmodr   s      r   ÚdivÚRing.div"   s   € ä�a‹|Ðr   c                 ót   • U R                  X5      u  p4nU R                  U5      (       a  X2-  $ [        S5      e)z"Returns inversion of ``a mod b``. zzero divisor)ÚgcdexÚis_oner   )r   r   r   ÚsÚtÚhs         r   ÚinvertÚRing.invert&   s3   € à—*‘*˜QÓ"‰ˆˆaà�;‰;�q�>‰>Ø‘5ˆLä Ó/Ð/r   c                 óv   • U R                  U5      (       d  U R                  U* 5      (       a  U$ [        S5      e)z!Returns ``a**(-1)`` if possible. z#only units are reversible in a ring)r$   r   ©r   r   s     r   ÚrevertÚRing.revert/   s.   € à�;‰;�q�>‰>˜TŸ[™[¨!¨Ÿ_™_ØˆHäÐ EÓFÐFr   c                 óH   •  U R                  U5        g! [         a     gf = f)NTF)r,   r   r+   s     r   Úis_unitÚRing.is_unit6   s'   € ð	Ø�K‰K˜ŒNØøÜó 	Ùð	ús   ‚ ”
! !c                 ó   • U$ )zReturns numerator of ``a``. r   r+   s     r   ÚnumerÚ
Ring.numer=   s   € àˆr   c                 ó   • U R                   $ )zReturns denominator of `a`. )Úoner+   s     r   ÚdenomÚ
Ring.denomA   s   € à�x‰xˆr   c                 ó   • [         e)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_moduleÚRing.free_moduleE   s
   € ô "Ð!r   c           	      ó‚   • SSK Jn  U" X R                  S5      R                  " U Vs/ s H  o3/PM     sn6 5      $ s  snf )z�
Generate an ideal of ``self``.

>>> from sympy.abc import x
>>> from sympy import QQ
>>> QQ.old_poly_ring(x).ideal(x**2)
<x**2>
r   )ÚModuleImplementedIdealé   )Úsympy.polys.agca.idealsr>   r;   Ú	submodule)r   Úgensr>   Úxs       r   ÚidealÚ
Ring.idealP   sB   € õ 	CÙ% d×,<Ñ,<¸QÓ,?×,IÒ,IÙÓ š4�a‹c™4Ñ ð-"ó #ð 	#ùÚ s   ¨<c                 óh   • SSK Jn  SSKJn  [	        X5      (       d  U R
                  " U6 nU" X5      $ )av  
Form a quotient ring of ``self``.

Here ``e`` can be an ideal or an iterable.

>>> 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]/<x**2>
>>> QQ.old_poly_ring(x).quotient_ring([x**2])
QQ[x]/<x**2>

The division operator has been overloaded for this:

>>> QQ.old_poly_ring(x)/[x**2]
QQ[x]/<x**2>
r   )ÚIdeal)ÚQuotientRing)r@   rG   Ú sympy.polys.domains.quotientringrH   Ú
isinstancerD   )r   ÚerG   rH   s       r   Úquotient_ringÚRing.quotient_ring]   s-   € õ$ 	2ÝAÜ˜!×#Ñ#Ø—
’
˜A�ˆAÙ˜DÓ$Ð$r   c                 ó$   • U R                  U5      $ )N)rL   )r   rK   s     r   Ú__truediv__ÚRing.__truediv__u   s   € Ø×!Ñ! !Ó$Ð$r   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Úis_Ringr   r   r   r   r    r(   r,   r/   r2   r6   r;   rD   rL   rO   Ú__static_attributes__r   r   r   r	   r	   	   sQ   † á$à€Gòòòòòò0òGòòòò	"ò#ò%õ0%r   r	   N)
rU   Úsympy.polys.domains.domainr   Úsympy.polys.polyerrorsr   r   r   Úsympy.utilitiesr   r	   r   r   r   Ú<module>r[      s2   ðÙ -õ .ß TÑ Tå "àôl%ˆ6ó l%ó ñl%r   