
    XhO                     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 )	z1Implementation of :class:`PolynomialRing` class.     )Ring)CompositeDomain)CoercionFailedGeneratorsError)publicc                   ,   e Zd ZdZdxZZdZdZd(dZ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(d$ Z)d% Z*d& Z+d' Z,dS ))PolynomialRingz8A class for representing multivariate polynomial rings. TNc                 `   ddl m} t          ||          r|||}n ||||          }|| _        |j        | _        |j        | _        |j        | _        |j        | _        |j        | _        |r2|j        j	        r&|j        j
        rt          |          dk    rd| _        | j        | _        d S )Nr   )PolyRing   T)sympy.polys.ringsr   
isinstanceringdtypegensngenssymbolsdomainis_Fieldis_Exactlenis_PIDdom)selfdomain_or_ringr   orderr   r   s         t/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/sympy/polys/domains/polynomialring.py__init__zPolynomialRing.__init__   s    ......nh// 	<GO!DD8G^U;;D	Z
I	Z
|k  	#{# #(< #Wq" ;    c                 6    | j                             |          S N)r   ring_newr   elements     r   newzPolynomialRing.new+   s    y!!'***r   c                 6    | j                             |          S )z%Check if ``a`` is of type ``dtype``. )r   
is_elementr#   s     r   of_typezPolynomialRing.of_type.   s    y##G,,,r   c                     | j         j        S r!   )r   zeror   s    r   r*   zPolynomialRing.zero2   s    y~r   c                     | j         j        S r!   )r   oner+   s    r   r-   zPolynomialRing.one6   s    y}r   c                     | j         j        S r!   )r   r   r+   s    r   r   zPolynomialRing.order:   s    yr   c                     t          | j                  dz   d                    t          t           | j                            z   dz   S )N[,])strr   joinmapr   r+   s    r   __str__zPolynomialRing.__str__>   s9    4;#%S$,1G1G(H(HH3NNr   c                 Z    t          | j        j        | j        | j        | j        f          S r!   )hash	__class____name__r   r   r   r+   s    r   __hash__zPolynomialRing.__hash__A   s$    T^,didlSTTTr   c                 Z    t          |t                    st          S | j        |j        k    S )z.Returns `True` if two domains are equivalent. )r   r	   NotImplementedr   )r   others     r   __eq__zPolynomialRing.__eq__D   s)    %00 	"!!yEJ&&r   c                 t    |j         sdS | j        }|                    |                    ||                     S )z/Returns ``True`` if ``a`` is a unit of ``self``F)	is_groundr   is_unitconvert_from)r   aKs      r   rB   zPolynomialRing.is_unitJ   s8    { 	5Kyy400111r   c                 t    | j                             |j                  }| j                            |          S r!   )r   canonical_unitLCr   
ground_new)r   rD   us      r   rG   zPolynomialRing.canonical_unitQ   s/    K&&qt,,y##A&&&r   c                 *    |                                 S )zConvert `a` to a SymPy object. )as_exprr   rD   s     r   to_sympyzPolynomialRing.to_sympyU   s    yy{{r   c                 6    | j                             |          S )z'Convert SymPy's expression to `dtype`. )r   	from_exprrM   s     r   
from_sympyzPolynomialRing.from_sympyY   s    y""1%%%r   c                 J     | | j                             ||                    S z*Convert a Python `int` object to `dtype`. r   convertK1rD   K0s      r   from_ZZzPolynomialRing.from_ZZ]   $    r")##Ar**+++r   c                 J     | | j                             ||                    S rS   rT   rV   s      r   from_ZZ_pythonzPolynomialRing.from_ZZ_pythona   rZ   r   c                 J     | | j                             ||                    S z/Convert a Python `Fraction` object to `dtype`. rT   rV   s      r   from_QQzPolynomialRing.from_QQe   rZ   r   c                 J     | | j                             ||                    S r^   rT   rV   s      r   from_QQ_pythonzPolynomialRing.from_QQ_pythoni   rZ   r   c                 J     | | j                             ||                    S )z(Convert a GMPY `mpz` object to `dtype`. rT   rV   s      r   from_ZZ_gmpyzPolynomialRing.from_ZZ_gmpym   rZ   r   c                 J     | | j                             ||                    S )z(Convert a GMPY `mpq` object to `dtype`. rT   rV   s      r   from_QQ_gmpyzPolynomialRing.from_QQ_gmpyq   rZ   r   c                 J     | | j                             ||                    S )z/Convert a `GaussianInteger` object to `dtype`. rT   rV   s      r   from_GaussianIntegerRingz'PolynomialRing.from_GaussianIntegerRingu   rZ   r   c                 J     | | j                             ||                    S )z0Convert a `GaussianRational` object to `dtype`. rT   rV   s      r   from_GaussianRationalFieldz)PolynomialRing.from_GaussianRationalFieldy   rZ   r   c                 J     | | j                             ||                    S z*Convert a mpmath `mpf` object to `dtype`. rT   rV   s      r   from_RealFieldzPolynomialRing.from_RealField}   rZ   r   c                 J     | | j                             ||                    S rk   rT   rV   s      r   from_ComplexFieldz PolynomialRing.from_ComplexField   rZ   r   c                     | j         |k    r| j                             ||          }||                     |          S dS )z*Convert an algebraic number to ``dtype``. N)r   rC   r%   rV   s      r   from_AlgebraicFieldz"PolynomialRing.from_AlgebraicField   s@    9??	&&q"--A=66!99 =r   c                 h    	 |                     | j                  S # t          t          f$ r Y dS w xY w)z#Convert a polynomial to ``dtype``. N)set_ringr   r   r   rV   s      r   from_PolynomialRingz"PolynomialRing.from_PolynomialRing   sB    	::bg&&&0 	 	 	44	s    11c                 @   | j         |k    r| j                            |g          S |                    |                              |                    |                    \  }}|j        r2|                     ||j        j        	                                          S dS )z*Convert a rational function to ``dtype``. N)
r   r   	from_listnumerdivdenomis_zerors   field	to_domain)rW   rD   rX   qrs        r   from_FractionFieldz!PolynomialRing.from_FractionField   s    9??7$$aS)))xx{{rxx{{++19 	))!RX]-D-D-F-FGGG4r   c                 T     j         |j        k    rO|                                } j        |j        k    r  fd|                                D             }  |          S |j        r>|j         k    r5                     |                                d         |j                  S dS dS )z)Convert from old poly ring to ``dtype``. c                 L    i | ] \  }}|j                             |          !S  rT   ).0mcrW   s      r   
<dictcomp>z<PolynomialRing.from_GlobalPolynomialRing.<locals>.<dictcomp>   s/    EEE$!Qa**1--EEEr   r   N)r   r   to_dictr   itemsrA   rC   to_list)rW   rD   rX   ads   `   r   from_GlobalPolynomialRingz(PolynomialRing.from_GlobalPolynomialRing   s    :  ByBI%%EEEE"((**EEE2b66M[ 	>RY"__??199;;q>29===	> 	>__r   c                 X    | j                                                                         S )z(Returns a field associated with `self`. )r   to_fieldr{   r+   s    r   	get_fieldzPolynomialRing.get_field   s"    y!!##--///r   c                 @    | j                             |j                  S )z%Returns True if `LC(a)` is positive. )r   is_positiverH   rM   s     r   r   zPolynomialRing.is_positive       {&&qt,,,r   c                 @    | j                             |j                  S )z%Returns True if `LC(a)` is negative. )r   is_negativerH   rM   s     r   r   zPolynomialRing.is_negative   r   r   c                 @    | j                             |j                  S )z)Returns True if `LC(a)` is non-positive. )r   is_nonpositiverH   rM   s     r   r   zPolynomialRing.is_nonpositive       {))!$///r   c                 @    | j                             |j                  S )z)Returns True if `LC(a)` is non-negative. )r   is_nonnegativerH   rM   s     r   r   zPolynomialRing.is_nonnegative   r   r   c                 ,    |                     |          S )zExtended GCD of `a` and `b`. )gcdexr   rD   bs      r   r   zPolynomialRing.gcdex   s    wwqzzr   c                 ,    |                     |          S )zReturns GCD of `a` and `b`. )gcdr   s      r   r   zPolynomialRing.gcd       uuQxxr   c                 ,    |                     |          S )zReturns LCM of `a` and `b`. )lcmr   s      r   r   zPolynomialRing.lcm   r   r   c                 \    |                      | j                            |                    S )zReturns factorial of `a`. )r   r   	factorialrM   s     r   r   zPolynomialRing.factorial   s$    zz$+//22333r   )NN)-r:   
__module____qualname____doc__is_PolynomialRingis_Polyhas_assoc_Ringhas_assoc_Fieldr   r%   r(   propertyr*   r-   r   r6   r;   r?   rB   rG   rN   rQ   rY   r\   r_   ra   rc   re   rg   ri   rl   rn   rp   rs   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r	   r	   
   sz       BB"&&NO   0+ + +- - -   X   X   XO O OU U U' ' '2 2 2' ' '  & & &, , ,, , ,, , ,, , ,, , ,, , ,, , ,, , ,, , ,, , ,    
 
 
> > >0 0 0- - -- - -0 0 00 0 0      4 4 4 4 4r   r	   N)r   sympy.polys.domains.ringr   #sympy.polys.domains.compositedomainr   sympy.polys.polyerrorsr   r   sympy.utilitiesr   r	   r   r   r   <module>r      s    7 7 * ) ) ) ) ) ? ? ? ? ? ? B B B B B B B B " " " " " "@4 @4 @4 @4 @4T? @4 @4 @4 @4 @4r   