
    sg                     ^    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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         T/var/www/html/venv/lib/python3.12/site-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                     t        | j                        dz   dj                  t        t         | j                              z   dz   S )N(,))strr   joinmapr   r"   s    r   __str__zFractionField.__str__4   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__7   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__:   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_sympy@   s    yy{r   c                 8    | j                   j                  |      S )z)Convert SymPy's expression to ``dtype``. )r   	from_exprr8   s     r   
from_sympyzFractionField.from_sympyD   s    zz##A&&r   c                 F     | | j                   j                  ||            S z.Convert a Python ``int`` object to ``dtype``. r   convertK1r9   K0s      r   from_ZZzFractionField.from_ZZH       "))##Ar*++r   c                 F     | | j                   j                  ||            S r?   r@   rB   s      r   from_ZZ_pythonzFractionField.from_ZZ_pythonL   rF   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)rC   r9   rD   r   convs        r   from_QQzFractionField.from_QQP   s`    ii99d288A;+,r$rxx{B2G/HHHd1bk?"r   c                 F     | | j                   j                  ||            S rJ   r@   rB   s      r   from_QQ_pythonzFractionField.from_QQ_pythonY   rF   r   c                 F     | | j                   j                  ||            S )z,Convert a GMPY ``mpz`` object to ``dtype``. r@   rB   s      r   from_ZZ_gmpyzFractionField.from_ZZ_gmpy]   rF   r   c                 F     | | j                   j                  ||            S )z,Convert a GMPY ``mpq`` object to ``dtype``. r@   rB   s      r   from_QQ_gmpyzFractionField.from_QQ_gmpya   rF   r   c                 F     | | j                   j                  ||            S )z4Convert a ``GaussianRational`` object to ``dtype``. r@   rB   s      r   from_GaussianRationalFieldz(FractionField.from_GaussianRationalFielde   rF   r   c                 F     | | j                   j                  ||            S )z3Convert a ``GaussianInteger`` object to ``dtype``. r@   rB   s      r   from_GaussianIntegerRingz&FractionField.from_GaussianIntegerRingi   rF   r   c                 F     | | j                   j                  ||            S z.Convert a mpmath ``mpf`` object to ``dtype``. r@   rB   s      r   from_RealFieldzFractionField.from_RealFieldm   rF   r   c                 F     | | j                   j                  ||            S r\   r@   rB   s      r   from_ComplexFieldzFractionField.from_ComplexFieldq   rF   r   c                     | j                   |k7  r| j                   j                  ||      }|| j                  |      S y)z*Convert an algebraic number to ``dtype``. N)r   rK   r   rB   s      r   from_AlgebraicFieldz!FractionField.from_AlgebraicFieldu   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_groundrK   coeffr   r   set_ringr   ringr   r   rB   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   rB   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_positiverM   LCr8   s     r   rq   zFractionField.is_positive       {{&&qwwzz22r   c                 `    | j                   j                  |j                  j                        S )z'Returns True if ``LC(a)`` is negative. )r   is_negativerM   rr   r8   s     r   ru   zFractionField.is_negative   rs   r   c                 `    | j                   j                  |j                  j                        S )z+Returns True if ``LC(a)`` is non-positive. )r   is_nonpositiverM   rr   r8   s     r   rw   zFractionField.is_nonpositive       {{))!''**55r   c                 `    | j                   j                  |j                  j                        S )z+Returns True if ``LC(a)`` is non-negative. )r   is_nonnegativerM   rr   r8   s     r   rz   zFractionField.is_nonnegative   rx   r   c                     |j                   S )zReturns numerator of ``a``. )rM   r8   s     r   rM   zFractionField.numer       wwr   c                     |j                   S )zReturns denominator of ``a``. )rN   r8   s     r   rN   zFractionField.denom   r|   r   c                 V    | j                  | j                  j                  |            S )zReturns factorial of ``a``. )r   r   	factorialr8   s     r   r   zFractionField.factorial   s     zz$++//233r   )NN)(r1   
__module____qualname____doc__is_FractionFieldis_Frachas_assoc_Ringhas_assoc_Fieldr   r   propertyr!   r$   r   r-   r2   r5   r:   r=   rE   rH   rP   rR   rT   rV   rX   rZ   r]   r_   ra   rh   rk   ro   rq   ru   rw   rz   rM   rN   r    r   r   r	   r	   	   s    J!%%wNO&-        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 "g4E? g4 g4r   