
    gR                         d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
mZmZ ddlmZ e G d d	ee                      Zd
S )z0Implementation of :class:`FractionField` class.     )Field)CompositeDomain)DMF)GeneratorsNeeded)dict_from_basicbasic_from_dict_dict_reorder)publicc                       e Zd ZdZeZdxZZdZdZ	d Z
d Zd Zd Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#dS )FractionFieldz3A class for representing rational function fields. Tc                 ,   |st          d          t          |          dz
  }t          |          | _        | j                            ||          | _        | j                            ||          | _        |x| _        | _        |x| _        | _	        d S )Nzgenerators not specified   )
r   lenngensdtypezeroonedomaindomsymbolsgens)selfr   r   levs       a/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/polys/domains/old_fractionfield.py__init__zFractionField.__init__   s     	?"#=>>>$ii!mYY
JOOC--	:>>#s++!$$dh#''tyyy    c                 (     | j         |g| j        R  S )z-Make a new fraction field with given domain. )	__class__r   )r   r   s     r   
set_domainzFractionField.set_domain"   s    t~c.DI....r   c                 d    |                      || j        t          | j                  dz
            S )Nr   )r   r   r   r   )r   elements     r   newzFractionField.new&   s'    zz'48S^^a-?@@@r   c                     t          | j                  dz   d                    t          t           | j                            z   dz   S )N(,))strr   joinmapr   r   s    r   __str__zFractionField.__str__)   s7    48}}s"SXXc#ty.A.A%B%BBSHHr   c                 Z    t          | j        j        | j        | j        | j        f          S )N)hashr   __name__r   r   r   r*   s    r   __hash__zFractionField.__hash__,   s$    T^,dj$(DINOOOr   c                     t          |t                    o/| j        |j        k    o| j        |j        k    o| j        |j        k    S )z0Returns ``True`` if two domains are equivalent. )
isinstancer   r   r   r   )r   others     r   __eq__zFractionField.__eq__/   sM    %// \J%+%\*.(ei*?\DHIQVQ[D[	\r   c                     t          |                                                                g| j        R  t          |                                                                g| j        R  z  S )z!Convert ``a`` to a SymPy object. )r   numerto_sympy_dictr   denomr   as     r   to_sympyzFractionField.to_sympy4   s`    		 7 7 9 9FDIFFF		 7 7 9 9FDIFFFG 	Hr   c                    |                                 \  }}t          || j                  \  }}t          || j                  \  }}|                                D ]"\  }}| j                            |          ||<   #|                                D ]"\  }}| j                            |          ||<   # | ||f                                          S )z)Convert SymPy's expression to ``dtype``. )r   )as_numer_denomr   r   itemsr   
from_sympycancel)	r   r9   pqnum_denkvs	            r   r>   zFractionField.from_sympy9   s    !!1 333Q 333QIIKK 	, 	,DAqX((++CFFIIKK 	, 	,DAqX((++CFFtS#J&&(((r   c                 J     | | j                             ||                    S z.Convert a Python ``int`` object to ``dtype``. r   convertK1r9   K0s      r   from_ZZzFractionField.from_ZZH   "    r"&..B''(((r   c                 J     | | j                             ||                    S rH   rI   rK   s      r   from_ZZ_pythonzFractionField.from_ZZ_pythonL   rO   r   c                 J     | | j                             ||                    S )z3Convert a Python ``Fraction`` object to ``dtype``. rI   rK   s      r   from_QQ_pythonzFractionField.from_QQ_pythonP   rO   r   c                 J     | | j                             ||                    S )z,Convert a GMPY ``mpz`` object to ``dtype``. rI   rK   s      r   from_ZZ_gmpyzFractionField.from_ZZ_gmpyT   rO   r   c                 J     | | j                             ||                    S )z,Convert a GMPY ``mpq`` object to ``dtype``. rI   rK   s      r   from_QQ_gmpyzFractionField.from_QQ_gmpyX   rO   r   c                 J     | | j                             ||                    S )z.Convert a mpmath ``mpf`` object to ``dtype``. rI   rK   s      r   from_RealFieldzFractionField.from_RealField\   rO   r   c                      j         j         k    rb j        j        k    r  |                                          S   |                     j                                                            S t	          |                                j          j                   \  }} j        j        k    r fd|D             }  t          t          ||                              S )z'Convert a ``DMF`` object to ``dtype``. c                 P    g | ]"}j                             |j                   #S  rI   .0crM   rL   s     r   
<listcomp>z;FractionField.from_GlobalPolynomialRing.<locals>.<listcomp>k   s+    FFF26>>!RV44FFFr   )r   r   to_listrJ   r	   to_dictdictzip)rL   r9   rM   monomscoeffss   ` `  r   from_GlobalPolynomialRingz'FractionField.from_GlobalPolynomialRing`   s    7bgvr!))++&r!))BF++3355666*199;;IINFFvFFFFFfFFF2d3vv..//000r   c           	           j         j         k    r j        j        k    r|S   |                                                     j                                                  |                                                     j                                                  f          S t          j                                        j                   rt          |                                	                                j          j                   \  }}t          |                                	                                j          j                   \  }} j        j        k    r fd|D             } fd|D             }  t          t          ||                    t          t          ||                    f          S dS )a  
        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)

        c                 P    g | ]"}j                             |j                   #S r\   rI   r]   s     r   r`   z4FractionField.from_FractionField.<locals>.<listcomp>   +    HHH!BFNN1bf55HHHr   c                 P    g | ]"}j                             |j                   #S r\   rI   r]   s     r   r`   z4FractionField.from_FractionField.<locals>.<listcomp>   rj   r   N)r   r   r5   rJ   ra   r7   setissubsetr	   rb   rc   rd   )rL   r9   rM   nmonomsncoeffsdmonomsdcoeffss   ` `    r   from_FractionFieldz FractionField.from_FractionFieldo   s   ( 7bgvr17799,,RV44<<>>7799,,RV44<<>>@ A A A\\""27++ 
	R,		!!##RWbg 7  7GW,		!!##RWbg 7  7GW vHHHHHwHHHHHHHHwHHH2tC1122DWg9N9N4O4OPQQQ
	R 
	Rr   c                 4    ddl m}  || j        g| j        R  S )z)Returns a ring associated with ``self``. r   )PolynomialRing)sympy.polys.domainsrt   r   r   )r   rt   s     r   get_ringzFractionField.get_ring   s0    666666~dh33333r   c                      t          d          )z(Returns a polynomial ring, i.e. `K[X]`. nested domains not allowedNotImplementedErrorr   r   s     r   	poly_ringzFractionField.poly_ring       !">???r   c                      t          d          )z'Returns a fraction field, i.e. `K(X)`. rx   ry   r{   s     r   
frac_fieldzFractionField.frac_field   r}   r   c                 ~    | j                             |                                                                          S )z#Returns True if ``a`` is positive. )r   is_positiver5   LCr8   s     r   r   zFractionField.is_positive   (    x##AGGIILLNN333r   c                 ~    | j                             |                                                                          S )z#Returns True if ``a`` is negative. )r   is_negativer5   r   r8   s     r   r   zFractionField.is_negative   r   r   c                 ~    | j                             |                                                                          S )z'Returns True if ``a`` is non-positive. )r   is_nonpositiver5   r   r8   s     r   r   zFractionField.is_nonpositive   (    x&&qwwyy||~~666r   c                 ~    | j                             |                                                                          S )z'Returns True if ``a`` is non-negative. )r   is_nonnegativer5   r   r8   s     r   r   zFractionField.is_nonnegative   r   r   c                 *    |                                 S )zReturns numerator of ``a``. )r5   r8   s     r   r5   zFractionField.numer       wwyyr   c                 *    |                                 S )zReturns denominator of ``a``. )r7   r8   s     r   r7   zFractionField.denom   r   r   c                 \    |                      | j                            |                    S )zReturns factorial of ``a``. )r   r   	factorialr8   s     r   r   zFractionField.factorial   s$    zz$(,,Q//000r   N)$r.   
__module____qualname____doc__r   r   is_FractionFieldis_Frachas_assoc_Ringhas_assoc_Fieldr   r   r"   r+   r/   r3   r:   r>   rN   rQ   rS   rU   rW   rY   rg   rr   rv   r|   r   r   r   r   r   r5   r7   r   r\   r   r   r   r      s       ==E!%%wNO( ( (/ / /A A AI I IP P P\ \ \
H H H
) ) )) ) )) ) )) ) )) ) )) ) )) ) )1 1 1$R $R $RL4 4 4
@ @ @@ @ @4 4 44 4 47 7 77 7 7    1 1 1 1 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 6 , + + + + + ? ? ? ? ? ? ' ' ' ' ' ' 3 3 3 3 3 3 Q Q Q Q Q Q Q Q Q Q " " " " " "p1 p1 p1 p1 p1E? p1 p1 p1 p1 p1r   