
    Xhd                        d Z ddlmZmZ ddlmZmZmZmZm	Z	m
Z
 ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ ddlmZ ddlm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z, ddlm-Z- ddl.m/Z/ dd	l0m1Z1 dd
l2m3Z3m4Z4m5Z5 ddl6m7Z7 ddl8m9Z9 ddl:m;Z;m<Z<m=Z= ddl>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZH d ZI e?jJ        eKe          d             ZL e?jJ        eeeeeeee          d             ZL e?jM        e          d             ZL e?jM        e          d             ZL e?jM        e	          d             ZL e?jM        e          d             ZL e?jM        e           d             ZL e?jJ        e3e7e5          d             ZL e@jM        e          d             ZL e@jM        e          d             ZL e@jJ        eeeeeee          d             ZL e@jM        e          d             ZL e@jJ        ee          d             ZL e@jM        e	          d             ZL e@jJ        e#e$e%e+e,          d              ZL e@jM        e'          d!             ZL e@jJ        e"e&          d"             ZL e@jJ        e!e)          d#             ZL eAjM        e          d$             ZL eAjM        e          d%             ZLd& ZN eBjJ        e eeee(eee*e	  	        d'             ZL eBjJ        eee          d(             ZL eBjM        e          d)             ZL eBjM        e          d*             ZL eBjM        e          d+             ZL eBjM        e	          d,             ZL eBjJ        e%e+          d-             ZL eBjM        e'          d.             ZL eBjM        e)          d/             ZL eBjJ        e3e7e5          d0             ZL eCjM        eO          d1             ZL eCjJ        ee          d2             ZL eCjJ        eee	          d3             ZL eDjM        eO          d4             ZL eDjM        e          d5             ZL eDjM        e          d6             ZL eDjM        e	          d7             ZL eDjJ        e%e+          d8             ZL eDjM        e'          d9             ZL eDjM        e4          d:             ZL eEjJ        e e%e'e(ee)eee*e+
  
        d;             ZL eEjJ        ee          d<             ZL eEjM        e          d=             ZL eEjJ        ee          d>             ZL eEjM        e	          d?             ZL eEjJ        e3e7e5          d@             ZL eEjM        e          dA             ZLdB ZP eFjM        e          dC             ZL eFjM        e          dD             ZL eFjM        e          dE             ZL eFjM        e          dF             ZL eFjM        e	          dG             ZL eFjM        e)          dH             ZL eFjM        e'          dI             ZL eFjJ        ee          dJ             ZL eFjM        e          dK             ZL eGjM        eO          dL             ZL eGjM        e          dM             ZL eGjM        e          dN             ZL eGjM        e	          dO             ZL eGjM        e4          dP             ZL eHjJ        eeeee          dQ             ZL eHjJ        eeeee          dR             ZL eHjJ        ee          dS             ZL eHjM        e	          dT             ZL eHjM        e          dU             ZL eHjJ        e#e$e%e+e,          dV             ZL eHjM        e'          dW             ZL eHjJ        e"e&          dX             ZL eHjJ        e!e)          dY             ZLdZS )[zL
Handlers for predicates related to set membership: integer, rational, etc.
    )Qask)AddBasicExprMulPowS)AlgebraicNumberComplexInfinityExp1FloatGoldenRatioImaginaryUnitInfinityIntegerNaNNegativeInfinityNumberNumberSymbolPipiRationalTribonacciConstantE)
fuzzy_bool)Absacosacotasinatancoscotexpimlogresintan)I)Eq)	conjugate)Determinant
MatrixBaseTrace)MatrixElement)MDNotImplementedError   )test_closed_groupask_allask_any   )
IntegerPredicateRationalPredicateIrrationalPredicateRealPredicateExtendedRealPredicateHermitianPredicateComplexPredicateImaginaryPredicateAntihermitianPredicateAlgebraicPredicatec                     	 t          |                                           }| |z
                      d          st          dS # t          $ r Y dS w xY w)Nr   TF)introundequals	TypeErrorexprassumptionsis      q/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/sympy/assumptions/handlers/sets.py_IntegerPredicate_numberrK      sb    	DJJLL!!A1H$$Q''  4 	 	 	55	s   A A 
AAc                     dS NT rG   rH   s     rJ   _rP   (       4    c                     dS NFrN   rO   s     rJ   rP   rP   ,   	     5rR   c                 &    | j         }|t          |S N)
is_integerr1   rG   rH   rets      rJ   rP   rP   1       
/C
{##JrR   c                 f    | j         rt          | |          S t          | |t          j                  S )zw
    * Integer + Integer       -> Integer
    * Integer + !Integer      -> !Integer
    * !Integer + !Integer -> ?
    )	is_numberrK   r3   r   integerrO   s     rJ   rP   rP   8   s2     ~ ;'k:::T;	:::rR   c           	         | j         rt          | |          S t          t          j        | j                   t          j        | j                  t          j        | j                  |          rdS t          t          j        | j                  t          j        | j                  |          rt          t          j
        | j                  t          j        | j                  t          j        | j                   z  t          j        | j        dz
            t          j        | j        dz             |          rdS d S d S )N)rH   Tr2   )r]   rK   r4   r   zerobasefiniter$   r^   r5   positivenonnegativerO   s     rJ   rP   rP   C   s+   ~ ;'k:::ty!!!18DI#6#6tx8H8HVabbb tqy##QYtx%8%8kRRR 1:dh''tx)@)@AF49DUDUCU)UWXW]^b^ghi^iWjWjlmlrsws|}~s~ll  NY  Z  Z  Z 	4 	 	rR   c                 z   | j         rt          | |          S d}| j        D ]}t          t	          j        |          |          su|j        rA|j        dk    r't          t	          j        d| z            |          c S |j        dz   r dS lt          t	          j	        |          |          r|rd} dS  dS |S )z
    * Integer*Integer      -> Integer
    * Integer*Irrational   -> !Integer
    * Odd/Even             -> !Integer
    * Integer*Rational     -> ?
    Tr6   r2   NF)
r]   rK   argsr   r   r^   is_Rationalqeven
irrational)rG   rH   _outputargs       rJ   rP   rP   M   s     ~ ;'k:::Gy  19S>>;// 	 5A::qvaf~~{;;;;;UQY<  44 Q\#&&44  #GGFF	 NrR   c                 d    t          t          j        | j        d                   |          rdS d S Nr   T)r   r   r^   rf   rO   s     rJ   rP   rP   i   s3    
19TYq\""K00 t rR   c                 \    t          t          j        | j        d                   |          S Nr   )r   r   integer_elementsrf   rO   s     rJ   rP   rP   n   #    q!$)A,//===rR   c                     dS rM   rN   rO   s     rJ   rP   rP   u   rQ   rR   c                     d S rW   rN   rO   s     rJ   rP   rP   y   rQ   rR   c                     dS rT   rN   rO   s     rJ   rP   rP   }   rU   rR   c                 &    | j         }|t          |S rW   )is_rationalr1   rY   s      rJ   rP   rP      s    

C
{##JrR   c                 ~    | j         r|                                 d         rdS t          | |t          j                  S )z}
    * Rational + Rational     -> Rational
    * Rational + !Rational    -> !Rational
    * !Rational + !Rational   -> ?
    r2   F)r]   as_real_imagr3   r   rationalrO   s     rJ   rP   rP      s@     ~ q! 	5T;
;;;rR   c                    | j         t          k    rM| j        }t          t	          j        |          |          r"t          t	          j        |          |          S dS t          t	          j        | j                  |          }|r"t          t	          j        | j                   |          }|rWt          t	          j        | j                   |          }|du rdS |r(t          t	          j        | j                            rdS t          t	          j	        | j                   |          du r't          t	          j        | j                  |          S t          t	          j
        | j                   |          r)t          t	          j        | j        d                    rdS dS t          t	          j        | j                  |          rt          t	          j        | j                   |          r|du rdS t          t	          j        | j                             r(t          t	          j        | j                            rdS t          t	          j        | j         d                    rdS dS dS )z
    * Rational ** Integer      -> Rational
    * Irrational ** Rational   -> Irrational
    * Rational ** Irrational   -> ?
    NFTr2   )ra   r   r$   r   r   rz   r`   r^   rc   	algebraicrj   eqprime)rG   rH   xis_exp_integeris_base_rationalis_base_zeros         rJ   rP   rP      s'    yA~~Hqz!}}k** 	/qvayy+...48,,k::N qz$)44[AA 	qvdi00==Lu$$t AJtx$8$8 9 9 tq{49%%k22e;;qvdh''555q|DI&&{33 	AD"<M<M8N8N 	5	QZ!!;	/	/ qwty!!;// 	Ne4K4K5qvdi  !! 	c!*TX*>*>&?&? 	4qtDIa  !! 	4 
	 	rR   c                     | j         d         }t          t          j        |          |          r#t          t          j        |           |          S d S rp   rf   r   r   rz   nonzerorG   rH   r   s      rJ   rP   rP      sK    	!A
1:a==+&& /AIaLL=+.../ /rR   c                     | j         }t          t          j        |          |          r#t          t          j        |           |          S d S rW   )r$   r   r   rz   r   r   s      rJ   rP   rP      sG    A
1:a==+&& /AIaLL=+.../ /rR   c                 h    | j         d         }t          t          j        |          |          rdS d S Nr   F)rf   r   r   rz   r   s      rJ   rP   rP      s6    	!A
1:a==+&& u rR   c                     | j         d         }t          t          j        |          |          r&t          t          j        |dz
             |          S d S Nr   r2   r   r   s      rJ   rP   rP      sR    	!A
1:a==+&& 3AIa!e$$$k2223 3rR   c                 &    | j         }|t          |S rW   )is_irrationalr1   rY   s      rJ   rP   rP      s    

C
{##JrR   c                     t          t          j        |           |          }|r)t          t          j        |           |          }|d S | S |S rW   )r   r   realrz   )rG   rH   _real	_rationals       rJ   rP   rP      sR    tk**E 
4((+66	4}rR   c                 |    |                                  d                             d          }|j        dk    r| S d S )Nr2   r6   ry   evalf_precrF   s      rJ   _RealPredicate_numberr      A     	A$$Q''Aw!||u |rR   c                     dS rM   rN   rO   s     rJ   rP   rP      	     4rR   c                     dS rT   rN   rO   s     rJ   rP   rP          5rR   c                 &    | j         }|t          |S rW   )is_realr1   rY   s      rJ   rP   rP      s    
,C
{##JrR   c                 f    | j         rt          | |          S t          | |t          j                  S )zT
    * Real + Real              -> Real
    * Real + (Complex & !Real) -> !Real
    )r]   r   r3   r   r   rO   s     rJ   rP   rP     s2     ~ 8$T;777T;777rR   c                     | j         rt          | |          S d}| j        D ]O}t          t	          j        |          |          r%t          t	          j        |          |          r|dz  }M dS |S )zx
    * Real*Real               -> Real
    * Real*Imaginary          -> !Real
    * Imaginary*Imaginary     -> Real
    TN)r]   r   rf   r   r   r   	imaginary)rG   rH   resultrl   s       rJ   rP   rP     s     ~ 8$T;777Fy  qvc{{K(( 	S!!;// 	d]FFEErR   c                 h   | j         rt          | |          S | j        t          k    rQt	          t          j        | j        t          z  t          z            t          j
        | j                  z  |          S | j        j        t          k    s!| j        j        r| j        j        t          k    rt	          t          j        | j        j                  |          r)t	          t          j        | j                  |          rdS | j        j        t          z  t          z  }t	          t          j        d|z            |          r7t	          t          j
        t          j        |z  | j        z            |          S dS t	          t          j        | j                  |          rUt	          t          j        | j                  |          r.t	          t          j        | j                  |          }|| S dS t	          t          j        | j                  |          r8t	          t          j        t#          | j                            |          }||S t	          t          j
        | j                  |          r-t	          t          j
        | j                  |          rt	          t          j        | j                  |          dur+t	          t          j        | j                  |          rdS dS | j        j        rSt	          t          j        | j        j                  |          r't	          t          j        | j                  |          S t	          t          j        | j                  |          rdS t	          t          j        | j                  |          rdS dS dS dS )a  
    * Real**Integer              -> Real
    * Positive**Real             -> Real
    * Negative**Real             -> ?
    * Real**(Integer/Even)       -> Real if base is nonnegative
    * Real**(Integer/Odd)        -> Real
    * Imaginary**(Integer/Even)  -> Real
    * Imaginary**(Integer/Odd)   -> not Real
    * Imaginary**Real            -> ? since Real could be 0 (giving real)
                                    or 1 (giving imaginary)
    * b**Imaginary               -> Real if log(b) is imaginary and b != 0
                                    and exponent != integer multiple of
                                    I*pi/log(b)
    * Real**Real                 -> ? e.g. sqrt(-1) is imaginary and
                                    sqrt(2) is not
    Tr6   NF)r]   r   ra   r   r   r   r^   r$   r*   r   r   funcis_Powr   r
   NegativeOneoddr&   r`   rc   rg   ri   rh   )rG   rH   rI   r   imlogs        rJ   rP   rP     s   $ ~ 8$T;777yA~~Idhqjm$$qvdh'7'77
 
 	
 y~!1din6I6Iq{49=));77 	1;tx((+66 t
 IM!OBqy1~~{++ 	Jqvq}a/$(:;;[III
1;ty!!;// qy""K00 	aeDHoo{33CwF
1;tx  +.. AKDI//== L
16$)k** qvdh-- 	16$)$$k22%??qz$(++[99  4x# txz**K881:di00+>>>QYtx((+66 tQZ	**K88 t 	 	 rR   c                 d    t          t          j        | j        d                   |          rdS d S rn   )r   r   r   rf   rO   s     rJ   rP   rP   b  s3    
16$)A,-- 4 rR   c                     t          t          j        | j        t          z  t
          z            t          j        | j                  z  |          S rW   )r   r   r^   r$   r*   r   r   rO   s     rJ   rP   rP   g  s>    		$(1*R-  16$(#3#33[  rR   c                 \    t          t          j        | j        d                   |          S rp   )r   r   rc   rf   rO   s     rJ   rP   rP   m  s"    qz$)A,''555rR   c                 \    t          t          j        | j        d                   |          S rp   )r   r   real_elementsrf   rO   s     rJ   rP   rP   q  s"    qty|,,k:::rR   c                     t          t          j        |           t          j        |           z  t          j        |           z  t          j        |           z  t          j        |           z  |          S rW   )r   r   negative_infinitenegativer`   rc   positive_infiniterO   s     rJ   rP   rP   x  sq    q"4((D!!" D!!" $T**	+
   rR   c                     dS rM   rN   rO   s     rJ   rP   rP     rQ   rR   c                 8    t          | |t          j                  S rW   )r3   r   extended_realrO   s     rJ   rP   rP     s    T;@@@rR   c                 t    t          | t                    rd S t          t          j        |           |          S rW   )
isinstancer.   r   r   r   rO   s     rJ   rP   rP     s1    $
## tqvd||[)))rR   c                 T    | j         rt          t          | |t          j                  S )zZ
    * Hermitian + Hermitian  -> Hermitian
    * Hermitian + !Hermitian -> !Hermitian
    )r]   r1   r3   r   	hermitianrO   s     rJ   rP   rP     s(     ~ $##T;<<<rR   c                 :   | j         rt          d}d}| j        D ]}t          t	          j        |          |          r|dz  }n%t          t	          j        |          |          s dS t          t	          j        |           |          r|dz  }|dk    r dS |S )z
    As long as there is at most only one noncommutative term:

    * Hermitian*Hermitian         -> Hermitian
    * Hermitian*Antihermitian     -> !Hermitian
    * Antihermitian*Antihermitian -> Hermitian
    r   Tr2   Nr]   r1   rf   r   r   antihermitianr   commutativerG   rH   nccountr   rl   s        rJ   rP   rP     s     ~ $##GFy 
 
qs##[11 	d]FFQ[%%{33 	EEc"""K00 	qLG{{rR   c                 L   | j         rt          | j        t          k    r0t	          t          j        | j                  |          rdS t          t	          t          j        | j                  |          r)t	          t          j        | j                  |          rdS t          )z+
    * Hermitian**Integer -> Hermitian
    T)	r]   r1   ra   r   r   r   r   r$   r^   rO   s     rJ   rP   rP     s    
 ~ $##yA~~q{48$$k22 	4##
1;ty!!;// qy""K00 	4
rR   c                 n    t          t          j        | j        d                   |          rdS t          rn   )r   r   r   rf   r1   rO   s     rJ   rP   rP     s/    
1;ty|$$k22 t
rR   c                 b    t          t          j        | j                  |          rdS t          rM   )r   r   r   r$   r1   rO   s     rJ   rP   rP     s+    
1;tx  +.. t
rR   c                 
   | j         \  }}d}t          |          D ]]}t          ||          D ]J}t          t          | ||f         t	          | ||f                                       }|d }|dk    r  dS K^|t
          |S NTFshaperanger   r+   r,   r1   matrH   rowscolsret_valrI   jconds           rJ   rP   rP     s    JD$G4[[  q$ 	 	AbQTIc!Q$i,@,@AABBD|u}}uuu 		 ##NrR   c                     dS rM   rN   rO   s     rJ   rP   rP     r   rR   c                     dS rT   rN   rO   s     rJ   rP   rP     r   rR   c                 &    | j         }|t          |S rW   )
is_complexr1   rY   s      rJ   rP   rP     r[   rR   c                 8    t          | |t          j                  S rW   )r3   r   complexrO   s     rJ   rP   rP     s    T;	:::rR   c                 \    | j         t          k    rdS t          | |t          j                  S rM   )ra   r   r3   r   r   rO   s     rJ   rP   rP     s&    yA~~tT;	:::rR   c                 \    t          t          j        | j        d                   |          S rp   )r   r   complex_elementsrf   rO   s     rJ   rP   rP     rr   rR   c                     d S rW   rN   rO   s     rJ   rP   rP     rQ   rR   c                 |    |                                  d                             d          }|j        dk    r| S d S )Nr   r6   r2   r   )rG   rH   rs      rJ   _Imaginary_numberr     r   rR   c                     dS rM   rN   rO   s     rJ   rP   rP     rQ   rR   c                 &    | j         }|t          |S rW   )is_imaginaryr1   rY   s      rJ   rP   rP     s    

C
{##JrR   c                 *   | j         rt          | |          S d}| j        D ]O}t          t	          j        |          |          r%t          t	          j        |          |          r|dz  }M dS |dk    rdS |dt          | j                  fv rdS dS )zy
    * Imaginary + Imaginary -> Imaginary
    * Imaginary + Complex   -> ?
    * Imaginary + Real      -> !Imaginary
    r   r2   TFNr]   r   rf   r   r   r   r   len)rG   rH   realsrl   s       rJ   rP   rP     s     ~ 4 {333Ey  q{3-- 	k** 	QJEEEEA::4QDI'''5 ('rR   c                    | j         rt          | |          S d}d}| j        D ]O}t          t	          j        |          |          r|dz  }*t          t	          j        |          |          s dS P|t          | j                  k    rdS |S )zN
    * Real*Imaginary      -> Imaginary
    * Imaginary*Imaginary -> Real
    Fr   TNr   )rG   rH   r   r   rl   s        rJ   rP   rP   5  s     ~ 4 {333FEy  q{3-- 	d]FFQVC[[+.. 	EE	 C	NN""5rR   c                    | j         rt          | |          S | j        t          k    rR| j        t
          z  t          z  }t          t          j	        d|z            t          j	        |           z  |          S | j        j
        t          k    s!| j        j        r| j        j        t          k    rt          t          j        | j        j                  |          rt          t          j        | j                  |          rdS | j        j        t
          z  t          z  }t          t          j	        d|z            |          r7t          t          j        t          j        |z  | j        z            |          S t          t          j        | j                  |          rTt          t          j	        | j                  |          r-t          t          j        | j                  |          }||S dS t          t          j        | j                  |          r8t          t          j        t!          | j                            |          }|dS t          t          j        | j                  t          j        | j                  z  |          rt          t          j        | j                  |          rdS t          t          j        | j                  |          }|s|S t          t          j	        | j                  |          rdS t          t          j	        d| j        z            |          }|r't          t          j        | j                  |          S |S dS )a  
    * Imaginary**Odd        -> Imaginary
    * Imaginary**Even       -> Real
    * b**Imaginary          -> !Imaginary if exponent is an integer
                               multiple of I*pi/log(b)
    * Imaginary**Real       -> ?
    * Positive**Real        -> Real
    * Negative**Integer     -> Real
    * Negative**(Integer/2) -> Imaginary
    * Negative**Real        -> not Imaginary if exponent is not Rational
    r6   FN)r]   r   ra   r   r$   r*   r   r   r   r^   r   r   r   r
   r   r   r&   r   rc   rz   r   )rG   rH   arI   r   r   rathalfs           rJ   rP   rP   I  s    ~ 4 {333yA~~HQJrM19QqS>>QYq\\M1;???y~!1din6I6Iq{49=));77 	S1;tx((+66 u	a"A19QqS>>;// S1;q(848'CDDkRRR
1;ty!!;// qy""K00 	aeDHoo{33C
F
1;tx  +.. AKDI//==5
16$)qvdh///== qz$)$$k22 	5aj**K88C 
19TX&&44 u19QtxZ00+>> Cqz$)44kBBB rR   c                    t          t          j        | j        d                   |          r1t          t          j        | j        d                   |          rdS d S | j        d         j        t          k    s-| j        d         j        r>| j        d         j        t          k    r#| j        d         j        t          t           fv rdS t          t          j        | j        d                   |          }|du rdS d S )Nr   FT)r   r   r   rf   rc   r   r$   r   ra   r   r*   r   )rG   rH   r%   s      rJ   rP   rP     s    
16$)A,-- qz$)A,''55 	5
 y|CDIaL$7DIaL<MQR<R<R9Q<A2w&&4	Q[1&&	4	4B	U{{u {rR   c                     | j         t          z  t          z  }t          t	          j        d|z            t	          j        |           z  |          S )Nr6   )r$   r*   r   r   r   r^   )rG   rH   r   s      rJ   rP   rP     s<    
2Aqy1~~1-{;;;rR   c                 @    |                                  d         dk     S )Nr2   r   )ry   rO   s     rJ   rP   rP     s!    !!##A&!+,,rR   c                     d S rW   rN   rO   s     rJ   rP   rP     rQ   rR   c                     t          | t                    rd S t          t          j        |           |          rdS t          t          j        |           |          S rM   )r   r.   r   r   r`   r   rO   s     rJ   rP   rP     sR    $
## t
16$<<%% tq{4  +...rR   c                 T    | j         rt          t          | |t          j                  S )zr
    * Antihermitian + Antihermitian  -> Antihermitian
    * Antihermitian + !Antihermitian -> !Antihermitian
    )r]   r1   r3   r   r   rO   s     rJ   rP   rP     s(     ~ $##T;@@@rR   c                 :   | j         rt          d}d}| j        D ]}t          t	          j        |          |          r|dz  }n%t          t	          j        |          |          s dS t          t	          j        |           |          r|dz  }|dk    r dS |S )z
    As long as there is at most only one noncommutative term:

    * Hermitian*Hermitian         -> !Antihermitian
    * Hermitian*Antihermitian     -> Antihermitian
    * Antihermitian*Antihermitian -> !Antihermitian
    r   FTr2   Nr   r   s        rJ   rP   rP     s     ~ $##GFy 
 
qs##[11 	d]FFQ[%%{33 	EEc"""K00 	qLG{{rR   c                    | j         rt          t          t          j        | j                  |          r*t          t          j        | j                  |          rdS nyt          t          j        | j                  |          rRt          t          j	        | j                  |          rdS t          t          j
        | j                  |          rdS t          )z
    * Hermitian**Integer  -> !Antihermitian
    * Antihermitian**Even -> !Antihermitian
    * Antihermitian**Odd  -> Antihermitian
    FT)r]   r1   r   r   r   ra   r^   r$   r   ri   r   rO   s     rJ   rP   rP     s     ~ $##
1;ty!!;// qy""K00 	5		Q_TY''	5	5 qvdh-- 	5tx+.. 	4
rR   c                    | j         \  }}d}t          |          D ]^}t          ||          D ]K}t          t          | ||f         t	          | ||f                                        }|d }|dk    r  dS L_|t
          |S r   r   r   s           rJ   rP   rP     s    JD$G4[[  q$ 	 	AbQTYs1a4y-A-A,ABBCCD|u}}uuu 		 ##NrR   c                     dS rM   rN   rO   s     rJ   rP   rP     r   rR   c                     dS rT   rN   rO   s     rJ   rP   rP     rU   rR   c                 8    t          | |t          j                  S rW   )r3   r   r}   rO   s     rJ   rP   rP     s    T;<<<rR   c                 "   | j         t          k    rQt          t          j        | j                  |          r(t          t          j        | j                   |          S d S | j         t          k    rRt          t          j        | j                  |          r)t          t          j	        | j                  |          rdS d S t          t          j
        | j                  |          }t          t          j        | j                   |          }t          t          j        | j                  |          }|rN|rN|rdS t          t          j        | j         d          t          j        | j         d          z            r
|du rdS d S d S d S d S )NFTr   r2   )ra   r   r   r   r}   r$   r   r   r^   rc   rz   ne)rG   rH   exp_rationalbase_algebraicexp_algebraics        rJ   rP   rP      sr   yA~~q{48$$k22 	:	$(+++[999yBqy""K00 	SDH9M9M{5[5[ 	5qz$(++[99LTY//==NDH--k::M -  	4 qtDIa  14	!#4#4455 	,%:O:O5   	 	:O:OrR   c                     | j         dk    S rp   )rh   rO   s     rJ   rP   rP     s    6Q;rR   c                     | j         d         }t          t          j        |          |          r#t          t          j        |           |          S d S rp   rf   r   r   r}   r   r   s      rJ   rP   rP     sK    	!A
1;q>>;'' /AIaLL=+.../ /rR   c                     | j         }t          t          j        |          |          r#t          t          j        |           |          S d S rW   )r$   r   r   r}   r   r   s      rJ   rP   rP      sG    A
1;q>>;'' /AIaLL=+.../ /rR   c                 h    | j         d         }t          t          j        |          |          rdS d S r   )rf   r   r   r}   r   s      rJ   rP   rP   &  s6    	!A
1;q>>;'' u rR   c                     | j         d         }t          t          j        |          |          r&t          t          j        |dz
             |          S d S r   r   r   s      rJ   rP   rP   ,  sR    	!A
1;q>>;'' 3AIa!e$$$k2223 3rR   N)Q__doc__sympy.assumptionsr   r   
sympy.corer   r   r   r   r	   r
   sympy.core.numbersr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   sympy.core.logicr   sympy.functionsr   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   sympy.core.relationalr+   $sympy.functions.elementary.complexesr,   sympy.matricesr-   r.   r/   "sympy.matrices.expressions.matexprr0   sympy.multipledispatchr1   commonr3   r4   r5   predicates.setsr7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rK   register_manyrB   rP   registerr   objectr   rN   rR   rJ   <module>r     sj    % $ $ $ $ $ $ $ 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C ( ' ' ' ' '                                          $ $ $ $ $ $ : : : : : : 9 9 9 9 9 9 9 9 9 9 < < < < < < 8 8 8 8 8 8 7 7 7 7 7 7 7 7 7 70 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    W--  .-  k=("h(:< < < < 4    !  3; ;  ; 3    3   6 3     ]EBB> > CB> H%%  &% E""  #" ! {M8b,. . . . D!!  "! ! c**	< 	< +*	< C      !  D ! tS#s;;/ / <;/
 C  / / ! /
 ! s++  ,+
 ! s++3 3 ,+3 d##  $# e$$  %$   S${BH    ]H6FGG  HG    8 8 8   & @ @ @D S#&&  '&   
 6 6 6 [-??; ; @?;  ''  (' %$X/?@@  A@ %$S#s33A A 43A V$$* * %$*
 S!!= = "!= S!!  "!0 S!!    "!  "!#s++    ,+ 
 S!!    "! 
 Z((  )("  S#r=#v"c     *:;;  <; 4    !   S)); ; *); 3; ;  ;
  ]EBB> > CB> 3      ]++  ,+ T""  #" S!!  "!0 S!!  "!& S!!5 5 "!5n S!!  "!  S!!< < "!< "!&,77- - 87- S!!  "! ! ((/ / )(/ ! %%A A &%A ! %%  &%0 ! %%    &% $ ! ,,  -," "!/5+%' ' ' ' "!/4b    "!#s++= = ,+= S!!  "!* X&&  '& "!$c3<</ / =</
 S!!/ / "!/
 "!$,,  -,
 "!$,,3 3 -,3 3 3rR   