
    g                         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 ddlmZ d	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)DomainElement)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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" 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 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     `/var/www/html/ai-engine/env/lib/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                     t           S r   )EXr,   s    r   parentz"ExpressionDomain.Expression.parent)   s    Ir   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   r4   r#   s    r   denomz!ExpressionDomain.Expression.denom2   r7   r   c                 p    |                       |                                j        di t                    S )N )r   cancelexpandeflags)r$   r   s     r   simplifyz$ExpressionDomain.Expression.simplify5   s0    ;;1ryy{{1;;F;;<<<r   c                 P    |                      t          | j                            S r   )r   absr   r#   s    r   __abs__z#ExpressionDomain.Expression.__abs__8   s    ;;s14yy)))r   c                 8    |                      | j                   S r   )r   r   r#   s    r   __neg__z#ExpressionDomain.Expression.__neg__;   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                 j    | j                                         |j                                         k     S r   )r   sort_keyrH   s     r   __lt__z"ExpressionDomain.Expression.__lt__D   s!    4==??QT]]__44r   c                     |                      |          }|t          S |t          j        k    r| S | t          j        k    r|S |                     | j        |j        z             S r   rJ   NotImplementedr/   zerorA   r   rH   s     r   __add__z#ExpressionDomain.Expression.__add__G   sV    Ay%%bgbgzz!$+...r   c                 l    |                      |                     |          j        | j        z             S r   rA   r   r   rH   s     r   __radd__z$ExpressionDomain.Expression.__radd__S   (    ::akk!nn/!$6777r   c                     |                      |          }|t          S |t          j        k    r| S | t          j        k    r| S |                     | j        |j        z
            S r   rO   rH   s     r   __sub__z#ExpressionDomain.Expression.__sub__V   sX    Ay%%bgbgr	zz!$+...r   c                 l    |                      |                     |          j        | j        z
            S r   rT   rH   s     r   __rsub__z$ExpressionDomain.Expression.__rsub__b   rV   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   )rJ   rP   r/   rQ   r   	is_Numberr   rA   rH   s     r   __mul__z#ExpressionDomain.Expression.__mul__e   s    Ay%%w1a&  w .ADN .{{149---::ad14i(((r   c                 l    |                      |                     |          j        | j        z            S r   rT   rH   s     r   __rmul__z$ExpressionDomain.Expression.__rmul__r   (    ::akk!nn/4555r   c                     |                      |          }|"|                     | j        |j        z            S t          S r   rJ   rA   r   rP   )r$   ns     r   __pow__z#ExpressionDomain.Expression.__pow__u   s6    A}zz!$*---%%r   c                     |                      |          }|"|                     | j        |j        z            S t          S r   rb   rH   s     r   __truediv__z'ExpressionDomain.Expression.__truediv__}   s6    A}zz!$qt),,,%%r   c                 l    |                      |                     |          j        | j        z            S r   rT   rH   s     r   __rtruediv__z(ExpressionDomain.Expression.__rtruediv__   r`   r   c                 H    | j         |                     |          j         k    S r   )r   r   rH   s     r   __eq__z"ExpressionDomain.Expression.__eq__   s    41;;q>>,,,r   c                     | |k     S r   r=   rH   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.polysrq   r   r   )r$   rI   rq   s      r   rq   zExpressionDomain.Expression.gcd   A    '''''';;ss14Q):;;<<<r   c                     ddl m} |                      || j        |                     |          j                            S )Nr   lcm)rr   rv   r   r   )r$   rI   rv   s      r   rv   zExpressionDomain.Expression.lcm   rs   r   N) r+   
__module____qualname____doc__	__slots__r   r%   r(   r-   r0   r2   r6   r;   rA   rD   rF   rJ   rM   rR   rU   rX   rZ   r]   r_   rd   rf   rh   rj   rl   ro   rq   rv   r=   r   r   
Expressionr      s       ''		  	  	 	) 	) 	)	( 	( 	(	< 	< 	<	 	 		 	 		9 	9 	9	9 	9 	9	= 	= 	=	* 	* 	*	& 	& 	&	 	 		5 	5 	5
	/ 
	/ 
	/	8 	8 	8
	/ 
	/ 
	/	8 	8 	8	) 	) 	)	6 	6 	6	& 	& 	&	& 	& 	&	6 	6 	6	- 	- 	-	 	 		$ 	$ 	$	= 	= 	=	= 	= 	= 	= 	=r   r{   r   r:   r/   Fc                     d S r   r=   r,   s    r   r   zExpressionDomain.__init__   s    r   c                 >    t          |t                    rdS t          S )NT)r   r   rP   )r   others     r   rj   zExpressionDomain.__eq__   s     e-.. 	"4!!r   c                      t          d          S )Nr/   )r*   r,   s    r   r-   zExpressionDomain.__hash__   s    Dzzr   c                 *    |                                 S )z!Convert ``a`` to a SymPy object. )r2   r   as     r   to_sympyzExpressionDomain.to_sympy   s    yy{{r   c                 ,    |                      |          S )z)Convert SymPy's expression to ``dtype``. )dtyper   s     r   
from_sympyzExpressionDomain.from_sympy   s    zz!}}r   c                 >     | |                     |                    S z.Convert a Python ``int`` object to ``dtype``. r   K1r   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 an ``ANP`` object to ``dtype``. r   r   s      r   from_AlgebraicFieldz$ExpressionDomain.from_AlgebraicField   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 mpmath ``mpc`` object to ``dtype``. r   r   s      r   from_ComplexFieldz"ExpressionDomain.from_ComplexField   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``. r=   r   s      r   from_ExpressionDomainz&ExpressionDomain.from_ExpressionDomain   s    r   c                     | S )z)Returns a ring associated with ``self``. r=   r,   s    r   get_ringzExpressionDomain.get_ring       r   c                     | S )z*Returns a field associated with ``self``. r=   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_positiver   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_signr   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_nonpositiver   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_nonnegativer   s     r   r   zExpressionDomain.is_nonnegative  r   r   c                 *    |                                 S )zReturns numerator of ``a``. )r6   r   s     r   r6   zExpressionDomain.numer      wwyyr   c                 *    |                                 S )zReturns denominator of ``a``. )r;   r   s     r   r;   zExpressionDomain.denom  r   r   c                      | d          S r9   r=   r   r   bs      r   rq   zExpressionDomain.gcd  s    tAwwr   c                 ,    |                     |          S r   ru   r   s      r   rv   zExpressionDomain.lcm  s    uuQxxr   N),r+   rw   rx   ry   is_SymbolicDomainis_EXr   r	   r{   r   rQ   onerephas_assoc_Ringhas_assoc_Fieldr   rj   r-   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r6   r;   rq   rv   r=   r   r   r   r      s>       -- $$B= B= B= B= B=]$6 B= B= B=H E:a==D
*Q--C
CNO  " " "      " " "" " "" " "" " "" " "" " "" " "" " "" " "" " "" " "" " "" " "      2 2 2/ / /5 5 55 5 5          r   r   N)ry   
sympy.corer   r   !sympy.polys.domains.domainelementr   &sympy.polys.domains.characteristiczeror   sympy.polys.domains.fieldr    sympy.polys.domains.simpledomainr   sympy.polys.polyutilsr	   sympy.utilitiesr
   r@   r   r/   r=   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 " " " " " "5U5
B 
B C C C C Cu0, C C CL r   