
    Ed9                     l    d Z ddlmZ ddlmZ ddlmZmZ ddlm	Z	 e	 G d dee                      Z
dS )	z0Implementation of :class:`FractionField` class.     )CompositeDomain)Field)CoercionFailedGeneratorsError)publicc                   *   e Zd ZdZdxZZdZdZd%dZd Z	e
d             Ze
d             Ze
d             Ze
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 )&FractionFieldz@A class for representing multivariate rational function fields. TNc                     ddl m} t          ||          r|||}n ||||          }|| _        |j        | _        |j        | _        |j        | _        |j        | _        |j        | _        | j        | _	        d S )Nr   )	FracField)
sympy.polys.fieldsr   
isinstancefielddtypegensngenssymbolsdomaindom)selfdomain_or_fieldr   orderr   r   s         Alib/python3.11/site-packages/sympy/polys/domains/fractionfield.py__init__zFractionField.__init__   s    000000oy11 	?g 	?% 	?#EEIg>>E
[
J	[
}l ;    c                 6    | j                             |          S N)r   	field_new)r   elements     r   newzFractionField.new%   s    z##G,,,r   c                     | j         j        S r   )r   zeror   s    r   r!   zFractionField.zero(   s    zr   c                     | j         j        S r   )r   oner"   s    r   r$   zFractionField.one,   s    z~r   c                     | j         j        S r   )r   r   r"   s    r   r   zFractionField.order0   s    zr   c                     | j         j        S r   )r   is_Exactr"   s    r   r'   zFractionField.is_Exact4   s    {##r   c                 Z    t          | j                                        | j                  S r   )r	   r   	get_exactr   r"   s    r   r)   zFractionField.get_exact8   s"    T[2244dlCCCr   c                     t          | j                  dz   d                    t          t           | j                            z   dz   S )N(,))strr   joinmapr   r"   s    r   __str__zFractionField.__str__;   s9    4;#%S$,1G1G(H(HH3NNr   c                 d    t          | j        j        | j        j        | j        | j        f          S r   )hash	__class____name__r   r   r   r   r"   s    r   __hash__zFractionField.__hash__>   s'    T^,dj.>T\Z[[[r   c                     t          |t                    o3| j        j        | j        | j        f|j        j        |j        |j        fk    S )z0Returns ``True`` if two domains are equivalent. )r   r	   r   r   r   r   )r   others     r   __eq__zFractionField.__eq__A   sD    %// =Zt{DL9[em<=	=r   c                 *    |                                 S )z!Convert ``a`` to a SymPy object. )as_exprr   as     r   to_sympyzFractionField.to_sympyG   s    yy{{r   c                 6    | j                             |          S )z)Convert SymPy's expression to ``dtype``. )r   	from_exprr<   s     r   
from_sympyzFractionField.from_sympyK   s    z##A&&&r   c                 J     | | j                             ||                    S z.Convert a Python ``int`` object to ``dtype``. r   convertK1r=   K0s      r   from_ZZzFractionField.from_ZZO   $    r")##Ar**+++r   c                 J     | | j                             ||                    S rC   rD   rF   s      r   from_ZZ_pythonzFractionField.from_ZZ_pythonS   rJ   r   c                     | j         }|j        }|j        rQ |  ||                    |          |                     |  ||                    |          |                    z  S  |  |||                    S z3Convert a Python ``Fraction`` object to ``dtype``. )r   convert_fromis_ZZnumerdenom)rG   r=   rH   r   convs        r   from_QQzFractionField.from_QQW   s~    i9 	#2dd288A;;++,,rr$$rxx{{B2G2G/H/HHH2dd1bkk??"r   c                 J     | | j                             ||                    S rN   rD   rF   s      r   from_QQ_pythonzFractionField.from_QQ_python`   rJ   r   c                 J     | | j                             ||                    S )z,Convert a GMPY ``mpz`` object to ``dtype``. rD   rF   s      r   from_ZZ_gmpyzFractionField.from_ZZ_gmpyd   rJ   r   c                 J     | | j                             ||                    S )z,Convert a GMPY ``mpq`` object to ``dtype``. rD   rF   s      r   from_QQ_gmpyzFractionField.from_QQ_gmpyh   rJ   r   c                 J     | | j                             ||                    S )z4Convert a ``GaussianRational`` object to ``dtype``. rD   rF   s      r   from_GaussianRationalFieldz(FractionField.from_GaussianRationalFieldl   rJ   r   c                 J     | | j                             ||                    S )z3Convert a ``GaussianInteger`` object to ``dtype``. rD   rF   s      r   from_GaussianIntegerRingz&FractionField.from_GaussianIntegerRingp   rJ   r   c                 J     | | j                             ||                    S z.Convert a mpmath ``mpf`` object to ``dtype``. rD   rF   s      r   from_RealFieldzFractionField.from_RealFieldt   rJ   r   c                 J     | | j                             ||                    S r`   rD   rF   s      r   from_ComplexFieldzFractionField.from_ComplexFieldx   rJ   r   c                     | j         |k    r| j                             ||          }||                     |          S dS )z*Convert an algebraic number to ``dtype``. N)r   rO   r   rF   s      r   from_AlgebraicFieldz!FractionField.from_AlgebraicField|   sI    9? 	.	&&q"--A 	66!99	 	r   c                 ^   |j         r.|                     |                    d          |j                  S 	 |                     |                    | j        j                            S # t          t          f$ r2 	 |                     |          cY S # t          t          f$ r Y Y dS w xY ww xY w)z#Convert a polynomial to ``dtype``.    N)
	is_groundrO   coeffr   r   set_ringr   ringr   r   rF   s      r   from_PolynomialRingz!FractionField.from_PolynomialRing   s    ; 	:??1771::ry999
	66!**RX]334440 	 	 	
vvayy   "O4   ttt	s/   1A) )B,;BB,B(#B,'B((B,c                 h    	 |                     | j                  S # t          t          f$ r Y dS w xY w)z*Convert a rational function to ``dtype``. N)	set_fieldr   r   r   rF   s      r   from_FractionFieldz FractionField.from_FractionField   sB    	;;rx(((0 	 	 	44	s    11c                 X    | j                                                                         S )z*Returns a field associated with ``self``. )r   to_ring	to_domainr"   s    r   get_ringzFractionField.get_ring   s"    z!!##--///r   c                 J    | j                             |j        j                  S )z'Returns True if ``LC(a)`` is positive. )r   is_positiverQ   LCr<   s     r   ru   zFractionField.is_positive       {&&qwz222r   c                 J    | j                             |j        j                  S )z'Returns True if ``LC(a)`` is negative. )r   is_negativerQ   rv   r<   s     r   ry   zFractionField.is_negative   rw   r   c                 J    | j                             |j        j                  S )z+Returns True if ``LC(a)`` is non-positive. )r   is_nonpositiverQ   rv   r<   s     r   r{   zFractionField.is_nonpositive       {))!'*555r   c                 J    | j                             |j        j                  S )z+Returns True if ``LC(a)`` is non-negative. )r   is_nonnegativerQ   rv   r<   s     r   r~   zFractionField.is_nonnegative   r|   r   c                     |j         S )zReturns numerator of ``a``. )rQ   r<   s     r   rQ   zFractionField.numer   	    wr   c                     |j         S )zReturns denominator of ``a``. )rR   r<   s     r   rR   zFractionField.denom   r   r   c                 \    |                      | j                            |                    S )zReturns factorial of ``a``. )r   r   	factorialr<   s     r   r   zFractionField.factorial   s$    zz$+//22333r   )NN)*r5   
__module____qualname____doc__is_FractionFieldis_Frachas_assoc_Ringhas_assoc_Fieldr   r   propertyr!   r$   r   r'   r)   r1   r6   r9   r>   rA   rI   rL   rT   rV   rX   rZ   r\   r^   ra   rc   re   rl   ro   rs   ru   ry   r{   r~   rQ   rR   r    r   r   r	   r	   	   s\       JJ!%%wNO   &- - -   X   X     X  $ $ X$D D DO O O\ \ \= = =  ' ' ', , ,, , ,# # #, , ,, , ,, , ,, , ,, , ,, , ,, , ,       0 0 03 3 33 3 36 6 66 6 6    4 4 4 4 4r   r	   N)r   #sympy.polys.domains.compositedomainr   sympy.polys.domains.fieldr   sympy.polys.polyerrorsr   r   sympy.utilitiesr   r	   r   r   r   <module>r      s    6 6 @ ? ? ? ? ? + + + + + + B B B B B B B B " " " " " "n4 n4 n4 n4 n4E? n4 n4 n4 n4 n4r   