
    \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    P/var/www/auris/envauris/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%aD116Mr   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>>5L//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'    	KK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    xx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 4ac4 -" # 	# 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   