
    Ed              	           d Z ddlmZm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  edd	ddddd
          Ze G d deee	                      Z e            ZdS )z3Implementation of :class:`ExpressionDomain` class.     )sympifySympifyError)CharacteristicZero)Field)SimpleDomain)PicklableWithSlots)publicFT)deepmul	power_exp
power_basebasicmultinomiallogc                      e Zd ZdZdxZZ G d de          Ze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"S )#ExpressionDomainz#A class for arbitrary expressions. Tc                       e 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 )ExpressionDomain.ExpressionzAn arbitrary expression. exc                 t    t          || j                  st          |          | _        d S |j        | _        d S N)
isinstance	__class__r   r   )selfr   s     Dlib/python3.11/site-packages/sympy/polys/domains/expressiondomain.py__init__z$ExpressionDomain.Expression.__init__   s4    b$.11  !"++%    c                 0    dt          | j                  z  S NzEX(%s))reprr   fs    r   __repr__z$ExpressionDomain.Expression.__repr__   s    d14jj((r   c                 0    dt          | j                  z  S r    )strr   r"   s    r   __str__z#ExpressionDomain.Expression.__str__"   s    c!$ii''r   c                 B    t          | j        j        | j        f          S r   )hashr   __name__r   r   s    r   __hash__z$ExpressionDomain.Expression.__hash__%   s    0$':;;;r   c                     | j         S r   r   r"   s    r   as_exprz#ExpressionDomain.Expression.as_expr(   s	    4Kr   c                 f    |                      | j                                        d                   S )Nr   r   r   as_numer_denomr"   s    r   numerz!ExpressionDomain.Expression.numer+   '    ;;qt2244Q7888r   c                 f    |                      | j                                        d                   S N   r0   r"   s    r   denomz!ExpressionDomain.Expression.denom.   r3   r   c                 p    |                       |                                j        di t                    S )N )r   cancelexpandeflags)r#   r   s     r   simplifyz$ExpressionDomain.Expression.simplify1   s0    ;;1ryy{{1;;F;;<<<r   c                 P    |                      t          | j                            S r   )r   absr   r"   s    r   __abs__z#ExpressionDomain.Expression.__abs__4   s    ;;s14yy)))r   c                 8    |                      | j                   S r   )r   r   r"   s    r   __neg__z#ExpressionDomain.Expression.__neg__7   s    ;;u%%%r   c                 P    	 |                      |          S # t          $ r Y d S w xY wr   )r   r   r#   gs     r   _to_exz"ExpressionDomain.Expression._to_ex:   s9    {{1~~%   tts    
%%c                     |                      |          }|t          S |t          j        k    r| S | t          j        k    r|S |                     | j        |j        z             S r   rF   NotImplementedEXzeror=   r   rD   s     r   __add__z#ExpressionDomain.Expression.__add__@   s_    A /%%bg /bg /zz!$+...r   c                 l    |                      |                     |          j        | j        z             S r   r=   r   r   rD   s     r   __radd__z$ExpressionDomain.Expression.__radd__L   (    ::akk!nn/!$6777r   c                     |                      |          }|t          S |t          j        k    r| S | t          j        k    r| S |                     | j        |j        z
            S r   rH   rD   s     r   __sub__z#ExpressionDomain.Expression.__sub__O   sa    A /%%bg /bg /r	zz!$+...r   c                 l    |                      |                     |          j        | j        z
            S r   rN   rD   s     r   __rsub__z$ExpressionDomain.Expression.__rsub__[   rP   r   c                 .   |                      |          }|t          S t          j        | |fv rt          j        S | j        j        r.|j        j        r"|                     | j        |j        z            S |                     | j        |j        z            S r   )rF   rI   rJ   rK   r   	is_Numberr   r=   rD   s     r   __mul__z#ExpressionDomain.Expression.__mul__^   s    A &%%w1a&  .w .ADN .{{149---::ad14i(((r   c                 l    |                      |                     |          j        | j        z            S r   rN   rD   s     r   __rmul__z$ExpressionDomain.Expression.__rmul__k   (    ::akk!nn/4555r   c                     |                      |          }|"|                     | j        |j        z            S t          S r   rF   r=   r   rI   )r#   ns     r   __pow__z#ExpressionDomain.Expression.__pow__n   s9    A &zz!$*---%%r   c                     |                      |          }|"|                     | j        |j        z            S t          S r   r\   rD   s     r   __truediv__z'ExpressionDomain.Expression.__truediv__v   s9    A &zz!$qt),,,%%r   c                 l    |                      |                     |          j        | j        z            S r   rN   rD   s     r   __rtruediv__z(ExpressionDomain.Expression.__rtruediv__~   rZ   r   c                 H    | j         |                     |          j         k    S r   )r   r   rD   s     r   __eq__z"ExpressionDomain.Expression.__eq__   s    41;;q>>,,,r   c                     | |k     S r   r9   rD   s     r   __ne__z"ExpressionDomain.Expression.__ne__   s    Av:r   c                     | j         j         S r   )r   is_zeror"   s    r   __bool__z$ExpressionDomain.Expression.__bool__   s    t|##r   c                     ddl m} |                      || j        |                     |          j                            S )Nr   )gcd)sympy.polysrk   r   r   )r#   rE   rk   s      r   rk   zExpressionDomain.Expression.gcd   A    '''''';;ss14Q):;;<<<r   c                     ddl m} |                      || j        |                     |          j                            S )Nr   lcm)rl   rp   r   r   )r#   rE   rp   s      r   rp   zExpressionDomain.Expression.lcm   rm   r   N)r*   
__module____qualname____doc__	__slots__r   r$   r'   r,   r.   r2   r7   r=   r@   rB   rF   rL   rO   rR   rT   rW   rY   r^   r`   rb   rd   rf   ri   rk   rp   r9   r   r   
Expressionr      s       ''		  	  	 	) 	) 	)	( 	( 	(	< 	< 	<	 	 		9 	9 	9	9 	9 	9	= 	= 	=	* 	* 	*	& 	& 	&	 	 	
	/ 
	/ 
	/	8 	8 	8
	/ 
	/ 
	/	8 	8 	8	) 	) 	)	6 	6 	6	& 	& 	&	& 	& 	&	6 	6 	6	- 	- 	-	 	 		$ 	$ 	$	= 	= 	=	= 	= 	= 	= 	=r   ru   r   r6   rJ   Fc                     d S r   r9   r+   s    r   r   zExpressionDomain.__init__   s    r   c                 *    |                                 S )z!Convert ``a`` to a SymPy object. )r.   r   as     r   to_sympyzExpressionDomain.to_sympy   s    yy{{r   c                 ,    |                      |          S )z)Convert SymPy's expression to ``dtype``. )dtyperx   s     r   
from_sympyzExpressionDomain.from_sympy   s    zz!}}r   c                 >     | |                     |                    S z.Convert a Python ``int`` object to ``dtype``. rz   K1ry   K0s      r   from_ZZzExpressionDomain.from_ZZ       r"++a..!!!r   c                 >     | |                     |                    S r   r   r   s      r   from_ZZ_pythonzExpressionDomain.from_ZZ_python   r   r   c                 >     | |                     |                    S z3Convert a Python ``Fraction`` object to ``dtype``. r   r   s      r   from_QQzExpressionDomain.from_QQ   r   r   c                 >     | |                     |                    S r   r   r   s      r   from_QQ_pythonzExpressionDomain.from_QQ_python   r   r   c                 >     | |                     |                    S )z,Convert a GMPY ``mpz`` object to ``dtype``. r   r   s      r   from_ZZ_gmpyzExpressionDomain.from_ZZ_gmpy   r   r   c                 >     | |                     |                    S )z,Convert a GMPY ``mpq`` object to ``dtype``. r   r   s      r   from_QQ_gmpyzExpressionDomain.from_QQ_gmpy   r   r   c                 >     | |                     |                    S z4Convert a ``GaussianRational`` object to ``dtype``. r   r   s      r   from_GaussianIntegerRingz)ExpressionDomain.from_GaussianIntegerRing   r   r   c                 >     | |                     |                    S r   r   r   s      r   from_GaussianRationalFieldz+ExpressionDomain.from_GaussianRationalField   r   r   c                 >     | |                     |                    S )z.Convert a mpmath ``mpf`` object to ``dtype``. r   r   s      r   from_RealFieldzExpressionDomain.from_RealField   r   r   c                 >     | |                     |                    S )z'Convert a ``DMP`` object to ``dtype``. r   r   s      r   from_PolynomialRingz$ExpressionDomain.from_PolynomialRing   r   r   c                 >     | |                     |                    S )z'Convert a ``DMF`` object to ``dtype``. r   r   s      r   from_FractionFieldz#ExpressionDomain.from_FractionField   r   r   c                     |S )z&Convert a ``EX`` object to ``dtype``. r9   r   s      r   from_ExpressionDomainz&ExpressionDomain.from_ExpressionDomain   s    r   c                     | S )z)Returns a ring associated with ``self``. r9   r+   s    r   get_ringzExpressionDomain.get_ring       r   c                     | S )z*Returns a field associated with ``self``. r9   r+   s    r   	get_fieldzExpressionDomain.get_field   r   r   c                 J    |j                                         d         j        S )z#Returns True if ``a`` is positive. r   )r   as_coeff_mulis_positiverx   s     r   r   zExpressionDomain.is_positive   s    t  ""1%11r   c                 4    |j                                         S )z#Returns True if ``a`` is negative. )r   could_extract_minus_signrx   s     r   is_negativezExpressionDomain.is_negative   s    t,,...r   c                 J    |j                                         d         j        S )z'Returns True if ``a`` is non-positive. r   )r   r   is_nonpositiverx   s     r   r   zExpressionDomain.is_nonpositive       t  ""1%44r   c                 J    |j                                         d         j        S )z'Returns True if ``a`` is non-negative. r   )r   r   is_nonnegativerx   s     r   r   zExpressionDomain.is_nonnegative   r   r   c                 *    |                                 S )zReturns numerator of ``a``. )r2   rx   s     r   r2   zExpressionDomain.numer       wwyyr   c                 *    |                                 S )zReturns denominator of ``a``. )r7   rx   s     r   r7   zExpressionDomain.denom   r   r   c                      | d          S r5   r9   r   ry   bs      r   rk   zExpressionDomain.gcd   s    tAwwr   c                 ,    |                     |          S r   ro   r   s      r   rp   zExpressionDomain.lcm   s    uuQxxr   N)'r*   rq   rr   rs   is_SymbolicDomainis_EXr   ru   r|   rK   onerephas_assoc_Ringhas_assoc_Fieldr   rz   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r2   r7   rk   rp   r9   r   r   r   r      s        -- $$|= |= |= |= |=' |= |= |=| E:a==D
*Q--C
CNO      " " "" " "" " "" " "" " "" " "" " "" " "" " "" " "" " "      2 2 2/ / /5 5 55 5 5          r   r   N)rs   
sympy.corer   r   &sympy.polys.domains.characteristiczeror   sympy.polys.domains.fieldr    sympy.polys.domains.simpledomainr   sympy.polys.polyutilsr   sympy.utilitiesr	   dictr<   r   rJ   r9   r   r   <module>r      s    9 9 - , , , , , , , E E E E E E + + + + + + 9 9 9 9 9 9 4 4 4 4 4 4 " " " " " "	5deu%
9 
9 
9 l l l l lu0, l l l^ r   