
    MZd9                     ^    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
y)	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)y)&FractionFieldz@A class for representing multivariate rational function fields. TNc                 $   ddl m} t        ||      r|||}n
 ||||      }|| _        |j                  | _        |j
                  | _        |j                  | _        |j                  | _        |j                  | _        | j                  | _	        y )Nr   )	FracField)
sympy.polys.fieldsr   
isinstancefielddtypegensngenssymbolsdomaindom)selfdomain_or_fieldr   orderr   r   s         C/usr/lib/python3/dist-packages/sympy/polys/domains/fractionfield.py__init__zFractionField.__init__   su    0oy1go%-#Eg>E
[[
JJ	[[
}}ll ;;    c                 8    | j                   j                  |      S N)r   	field_new)r   elements     r   newzFractionField.new%   s    zz##G,,r   c                 .    | j                   j                  S r   )r   zeror   s    r   r!   zFractionField.zero(   s    zzr   c                 .    | j                   j                  S r   )r   oner"   s    r   r$   zFractionField.one,   s    zz~~r   c                 .    | j                   j                  S r   )r   r   r"   s    r   r   zFractionField.order0   s    zzr   c                 .    | j                   j                  S r   )r   is_Exactr"   s    r   r'   zFractionField.is_Exact4   s    {{###r   c                 ^    t        | j                  j                         | j                        S r   )r	   r   	get_exactr   r"   s    r   r)   zFractionField.get_exact8   s     T[[224dllCCr   c                     t        | j                        dz   dj                  t        t         | j                              z   dz   S )N(,))strr   joinmapr   r"   s    r   __str__zFractionField.__str__;   s4    4;;#%S$,,1G(HH3NNr   c                     t        | j                  j                  | j                  j                  | j
                  | j                  f      S r   )hash	__class____name__r   r   r   r   r"   s    r   __hash__zFractionField.__hash__>   s2    T^^,,djj.>.>T\\Z[[r   c                     t        |t              xr[ | 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   sS    %/ =ZZt{{DLL9[[emm<=	=r   c                 "    |j                         S )z!Convert ``a`` to a SymPy object. )as_exprr   as     r   to_sympyzFractionField.to_sympyG   s    yy{r   c                 8    | j                   j                  |      S )z)Convert SymPy's expression to ``dtype``. )r   	from_exprr<   s     r   
from_sympyzFractionField.from_sympyK   s    zz##A&&r   c                 F     | | j                   j                  ||            S z.Convert a Python ``int`` object to ``dtype``. r   convertK1r=   K0s      r   from_ZZzFractionField.from_ZZO       "))##Ar*++r   c                 F     | | j                   j                  ||            S rC   rD   rF   s      r   from_ZZ_pythonzFractionField.from_ZZ_pythonS   rJ   r   c                     | j                   }|j                  }|j                  r= |  ||j                  |      |             |  ||j	                  |      |            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`    ii99d288A;+,r$rxx{B2G/HHHd1bk?"r   c                 F     | | j                   j                  ||            S rN   rD   rF   s      r   from_QQ_pythonzFractionField.from_QQ_python`   rJ   r   c                 F     | | 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                 F     | | 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                 F     | | j                   j                  ||            S )z4Convert a ``GaussianRational`` object to ``dtype``. rD   rF   s      r   from_GaussianRationalFieldz(FractionField.from_GaussianRationalFieldl   rJ   r   c                 F     | | j                   j                  ||            S )z3Convert a ``GaussianInteger`` object to ``dtype``. rD   rF   s      r   from_GaussianIntegerRingz&FractionField.from_GaussianIntegerRingp   rJ   r   c                 F     | | j                   j                  ||            S z.Convert a mpmath ``mpf`` object to ``dtype``. rD   rF   s      r   from_RealFieldzFractionField.from_RealFieldt   rJ   r   c                 F     | | j                   j                  ||            S r`   rD   rF   s      r   from_ComplexFieldzFractionField.from_ComplexFieldx   rJ   r   c                     | j                   |k7  r| j                   j                  ||      }|| j                  |      S y)z*Convert an algebraic number to ``dtype``. N)r   rO   r   rF   s      r   from_AlgebraicFieldz!FractionField.from_AlgebraicField|   s;    99?		&&q"-A=66!9 r   c                 T   |j                   r+| j                  |j                  d      |j                        S 	 | j	                  |j                  | j                  j                              S # t        t        f$ r+ 	 | j	                  |      cY S # t        t        f$ r Y Y y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:ryy99
	66!**RXX]]3440 	
vvay "O4 	s/   3A- -B'=BB'B#B'"B##B'c                 d    	 |j                  | j                        S # t        t        f$ r Y yw xY w)z*Convert a rational function to ``dtype``. N)	set_fieldr   r   r   rF   s      r   from_FractionFieldz FractionField.from_FractionField   s1    	;;rxx((0 		s    //c                 R    | j                   j                         j                         S )z*Returns a field associated with ``self``. )r   to_ring	to_domainr"   s    r   get_ringzFractionField.get_ring   s    zz!!#--//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       {{&&qwwzz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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       wwr   c                     |j                   S )zReturns denominator of ``a``. )rR   r<   s     r   rR   zFractionField.denom   r   r   c                 V    | j                  | j                  j                  |            S )zReturns factorial of ``a``. )r   r   	factorialr<   s     r   r   zFractionField.factorial   s     zz$++//2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!%%wNO&-         $ $DO\=',,#,,,,,,, 033664r   r	   N)r   #sympy.polys.domains.compositedomainr   sympy.polys.domains.fieldr   sympy.polys.polyerrorsr   r   sympy.utilitiesr   r	   r   r   r   <module>r      s5    6 @ + B "n4E? n4 n4r   