
    \hR                     z    S r SSKJr  SSKJr  SSKJ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
)z0Implementation of :class:`FractionField` class.     )Field)CompositeDomain)DMF)GeneratorsNeeded)dict_from_basicbasic_from_dict_dict_reorder)publicc                       \ rS rSrSr\rS=r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S rS rS rS rS r S r!S r"S r#S r$Sr%g) FractionField   z3A class for representing rational function fields. Tc                    U(       d  [        S5      e[        U5      S-
  n[        U5      U l        U R                  R	                  X15      U l        U R                  R                  X15      U l        U=U l        U l        U=U l        U l	        g )Nzgenerators not specified   )
r   lenngensdtypezeroonedomaindomsymbolsgens)selfr   r   levs       ]/var/www/auris/envauris/lib/python3.13/site-packages/sympy/polys/domains/old_fractionfield.py__init__FractionField.__init__   sm    "#=>>$i!mY
JJOOC-	::>>#+!$$dh#''ty    c                 <    U R                   " U/U R                  Q76 $ )z-Make a new fraction field with given domain. )	__class__r   )r   r   s     r   
set_domainFractionField.set_domain"   s    ~~c.DII..r   c                 f    U R                  XR                  [        U R                  5      S-
  5      $ )Nr   )r   r   r   r   )r   elements     r   newFractionField.new&   s$    zz'88S^a-?@@r   c                     [        U R                  5      S-   SR                  [        [         U R                  5      5      -   S-   $ )N(,))strr   joinmapr   r   s    r   __str__FractionField.__str__)   s3    488}s"SXXc#tyy.A%BBSHHr   c                     [        U R                  R                  U R                  U R                  U R
                  45      $ )N)hashr    __name__r   r   r   r.   s    r   __hash__FractionField.__hash__,   s,    T^^,,djj$((DIINOOr   c                     [        U[        5      =(       aY    U R                  UR                  :H  =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ )z0Returns ``True`` if two domains are equivalent. )
isinstancer   r   r   r   )r   others     r   __eq__FractionField.__eq__/   sW    %/ \JJ%++%\*.((eii*?\DHIIQVQ[Q[D[	\r   c                     [        UR                  5       R                  5       /U R                  Q76 [        UR	                  5       R                  5       /U R                  Q76 -  $ )z!Convert ``a`` to a SymPy object. )r   numerto_sympy_dictr   denomr   as     r   to_sympyFractionField.to_sympy4   sN    	 7 7 9FDIIF	 7 7 9FDIIFG 	Hr   c                    UR                  5       u  p#[        X R                  S9u  pE[        X0R                  S9u  peUR                  5        H"  u  pxU R                  R                  U5      XG'   M$     UR                  5        H"  u  pxU R                  R                  U5      Xg'   M$     U " XF45      R                  5       $ )z)Convert SymPy's expression to ``dtype``. )r   )as_numer_denomr   r   itemsr   
from_sympycancel)	r   r@   pqnum_denkvs	            r   rF   FractionField.from_sympy9   s    ! 3 3IIKDAXX((+CF   IIKDAXX((+CF   SJ&&((r   c                 D    U " U R                   R                  X5      5      $ z.Convert a Python ``int`` object to ``dtype``. r   convertK1r@   K0s      r   from_ZZFractionField.from_ZZH       "&&..'((r   c                 D    U " U R                   R                  X5      5      $ rQ   rR   rT   s      r   from_ZZ_pythonFractionField.from_ZZ_pythonL   rY   r   c                 D    U " U R                   R                  X5      5      $ )z3Convert a Python ``Fraction`` object to ``dtype``. rR   rT   s      r   from_QQ_pythonFractionField.from_QQ_pythonP   rY   r   c                 D    U " U R                   R                  X5      5      $ )z,Convert a GMPY ``mpz`` object to ``dtype``. rR   rT   s      r   from_ZZ_gmpyFractionField.from_ZZ_gmpyT   rY   r   c                 D    U " U R                   R                  X5      5      $ )z,Convert a GMPY ``mpq`` object to ``dtype``. rR   rT   s      r   from_QQ_gmpyFractionField.from_QQ_gmpyX   rY   r   c                 D    U " U R                   R                  X5      5      $ )z.Convert a mpmath ``mpf`` object to ``dtype``. rR   rT   s      r   from_RealFieldFractionField.from_RealField\   rY   r   c                 0   U R                   UR                   :X  a_  U R                  UR                  :X  a  U " UR                  5       5      $ U " UR                  U R                  5      R                  5       5      $ [	        UR                  5       UR                   U R                   5      u  p4U R                  UR                  :w  a4  U Vs/ s H'  oPR                  R                  XRR                  5      PM)     nnU " [        [        X45      5      5      $ s  snf )z'Convert a ``DMF`` object to ``dtype``. )r   r   to_listrS   r	   to_dictdictzip)rU   r@   rV   monomscoeffscs         r   from_GlobalPolynomialRing'FractionField.from_GlobalPolynomialRing`   s    77bggvv!))+&!))BFF+33566*199;INFvv>DFf66>>!VV4fFd3v./00 Gs   	.Dc           	      0   U R                   UR                   :X  a  U R                  UR                  :X  a  U$ U " UR                  5       R                  U R                  5      R	                  5       UR                  5       R                  U R                  5      R	                  5       45      $ [        UR                   5      R                  U R                   5      (       Ga.  [        UR                  5       R                  5       UR                   U R                   5      u  p4[        UR                  5       R                  5       UR                   U R                   5      u  pVU R                  UR                  :w  ah  U Vs/ s H'  opR                  R                  XrR                  5      PM)     nnU Vs/ s H'  opR                  R                  XrR                  5      PM)     nnU " [        [        X45      5      [        [        XV5      5      45      $ gs  snf s  snf )as  
Convert a fraction field element to another fraction field.

Examples
========

>>> from sympy.polys.polyclasses import DMF
>>> from sympy.polys.domains import ZZ, QQ
>>> from sympy.abc import x

>>> f = DMF(([ZZ(1), ZZ(2)], [ZZ(1), ZZ(1)]), ZZ)

>>> QQx = QQ.old_frac_field(x)
>>> ZZx = ZZ.old_frac_field(x)

>>> QQx.from_FractionField(f, ZZx)
DMF([1, 2], [1, 1], QQ)

N)r   r   r<   rS   rj   r>   setissubsetr	   rk   rl   rm   )rU   r@   rV   nmonomsncoeffsdmonomsdcoeffsrp   s           r   from_FractionField FractionField.from_FractionFieldo   s|   ( 77bggvv1779,,RVV4<<>779,,RVV4<<>@ A A\""277++,	!!#RWWbgg 7G,	!!#RWWbgg 7G vv?FHw!FFNN1ff5wH?FHw!FFNN1ff5wHtC12DW9N4OPQQ , IHs   ;.H/.Hc                 H    SSK Jn  U" U R                  /U R                  Q76 $ )z)Returns a ring associated with ``self``. r   )PolynomialRing)sympy.polys.domainsr}   r   r   )r   r}   s     r   get_ringFractionField.get_ring   s    6dhh333r   c                     [        S5      e)z(Returns a polynomial ring, i.e. `K[X]`. nested domains not allowedNotImplementedErrorr   r   s     r   	poly_ringFractionField.poly_ring       !">??r   c                     [        S5      e)z'Returns a fraction field, i.e. `K(X)`. r   r   r   s     r   
frac_fieldFractionField.frac_field   r   r   c                 p    U R                   R                  UR                  5       R                  5       5      $ )z#Returns True if ``a`` is positive. )r   is_positiver<   LCr?   s     r   r   FractionField.is_positive   #    xx##AGGILLN33r   c                 p    U R                   R                  UR                  5       R                  5       5      $ )z#Returns True if ``a`` is negative. )r   is_negativer<   r   r?   s     r   r   FractionField.is_negative   r   r   c                 p    U R                   R                  UR                  5       R                  5       5      $ )z'Returns True if ``a`` is non-positive. )r   is_nonpositiver<   r   r?   s     r   r   FractionField.is_nonpositive   #    xx&&qwwy||~66r   c                 p    U R                   R                  UR                  5       R                  5       5      $ )z'Returns True if ``a`` is non-negative. )r   is_nonnegativer<   r   r?   s     r   r   FractionField.is_nonnegative   r   r   c                 "    UR                  5       $ )zReturns numerator of ``a``. )r<   r?   s     r   r<   FractionField.numer       wwyr   c                 "    UR                  5       $ )zReturns denominator of ``a``. )r>   r?   s     r   r>   FractionField.denom   r   r   c                 V    U R                  U R                  R                  U5      5      $ )zReturns factorial of ``a``. )r   r   	factorialr?   s     r   r   FractionField.factorial   s     zz$((,,Q/00r   )r   r   r   r   r   r   r   N)&r3   
__module____qualname____firstlineno____doc__r   r   is_FractionFieldis_Frachas_assoc_Ringhas_assoc_Fieldr   r!   r%   r/   r4   r9   rA   rF   rW   r[   r^   ra   rd   rg   rq   rz   r   r   r   r   r   r   r   r<   r>   r   __static_attributes__ r   r   r   r      s    =E!%%wNO(/AIP\
H
)))))))1$RL4
@@44771r   r   N)r   sympy.polys.domains.fieldr   #sympy.polys.domains.compositedomainr   sympy.polys.polyclassesr   sympy.polys.polyerrorsr   sympy.polys.polyutilsr   r   r	   sympy.utilitiesr
   r   r   r   r   <module>r      s=    6 , ? ' 3 Q Q "p1E? p1 p1r   