
    \hd                        S r SSKJrJr  SSKJrJrJrJrJ	r	J
r
  SSKJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJr  SSKJr  SSKJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'J(r(J)r)J*r*J+r+J,r,  SSKJ-r-  SSK.J/r/  SS	K0J1r1  SS
K2J3r3J4r4J5r5  SSK6J7r7  SSK8J9r9  SSK:J;r;J<r<J=r=  SSK>J?r?J@r@JArAJBrBJCrCJDrDJErEJFrFJGrGJHrH  S rI\?R                  " \K\5      S 5       rL\?R                  " \\\\\\\\5      S 5       rL\?R                  " \5      S 5       rL\?R                  " \5      S 5       rL\?R                  " \	5      S 5       rL\?R                  " \5      S 5       rL\?R                  " \ 5      S 5       rL\?R                  " \3\7\55      S 5       rL\@R                  " \5      S 5       rL\@R                  " \5      S 5       rL\@R                  " \\\\\\\5      S 5       rL\@R                  " \5      S 5       rL\@R                  " \\5      S 5       rL\@R                  " \	5      S 5       rL\@R                  " \#\$\%\+\,5      S  5       rL\@R                  " \'5      S! 5       rL\@R                  " \"\&5      S" 5       rL\@R                  " \!\)5      S# 5       rL\AR                  " \5      S$ 5       rL\AR                  " \5      S% 5       rLS& rN\BR                  " \ \\\\(\\\*\5	      S' 5       rL\BR                  " \\\5      S( 5       rL\BR                  " \5      S) 5       rL\BR                  " \5      S* 5       rL\BR                  " \5      S+ 5       rL\BR                  " \	5      S, 5       rL\BR                  " \%\+5      S- 5       rL\BR                  " \'5      S. 5       rL\BR                  " \)5      S/ 5       rL\BR                  " \3\7\55      S0 5       rL\CR                  " \O5      S1 5       rL\CR                  " \\5      S2 5       rL\CR                  " \\\	5      S3 5       rL\DR                  " \O5      S4 5       rL\DR                  " \5      S5 5       rL\DR                  " \5      S6 5       rL\DR                  " \	5      S7 5       rL\DR                  " \%\+5      S8 5       rL\DR                  " \'5      S9 5       rL\DR                  " \45      S: 5       rL\ER                  " \ \%\'\(\\)\\\*\+5
      S; 5       rL\ER                  " \\5      S< 5       rL\ER                  " \5      S= 5       rL\ER                  " \\5      S> 5       rL\ER                  " \	5      S? 5       rL\ER                  " \3\7\55      S@ 5       rL\ER                  " \5      SA 5       rLSB rP\FR                  " \5      SC 5       rL\FR                  " \5      SD 5       rL\FR                  " \5      SE 5       rL\FR                  " \5      SF 5       rL\FR                  " \	5      SG 5       rL\FR                  " \)5      SH 5       rL\FR                  " \'5      SI 5       rL\FR                  " \\5      SJ 5       rL\FR                  " \5      SK 5       rL\GR                  " \O5      SL 5       rL\GR                  " \5      SM 5       rL\GR                  " \5      SN 5       rL\GR                  " \	5      SO 5       rL\GR                  " \45      SP 5       rL\HR                  " \\\\\5      SQ 5       rL\HR                  " \\\\\5      SR 5       rL\HR                  " \\5      SS 5       rL\HR                  " \	5      ST 5       rL\HR                  " \5      SU 5       rL\HR                  " \#\$\%\+\,5      SV 5       rL\HR                  " \'5      SW 5       rL\HR                  " \"\&5      SX 5       rL\HR                  " \!\)5      SY 5       rLgZ)[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                      [        U R                  5       5      nX-
  R                  S5      (       d  [        eg! [         a     gf = f)Nr   TF)introundequals	TypeErrorexprassumptionsis      W/var/www/auris/envauris/lib/python3.13/site-packages/sympy/assumptions/handlers/sets.py_IntegerPredicate_numberrK      sD    	DJJL!AH$$Q'' 		s   7: 
AAc                     gNT rG   rH   s     rJ   _rP   (           c                     gNFrN   rO   s     rJ   rP   rP   ,        rR   c                 0    U R                   nUc  [        eU$ N)
is_integerr1   rG   rH   rets      rJ   rP   rP   1       
//C
{##JrR   c                 n    U R                   (       a  [        X5      $ [        X[        R                  5      $ )zg
* Integer + Integer       -> Integer
* Integer + !Integer      -> !Integer
* !Integer + !Integer -> ?
)	is_numberrK   r3   r   integerrO   s     rJ   rP   rP   8   s'     ~~'::T		::rR   c           	         U R                   (       a  [        X5      $ [        [        R                  " U R
                  5      ) [        R                  " U R
                  5      [        R                  " U R                  5      US9(       a  g[        [        R                  " U R
                  5      [        R                  " U R                  5      US9(       a  [        [        R                  " U R                  5      [        R                  " U R                  5      [        R                  " U R
                  5      ) -  [        R                  " U R
                  S-
  5      [        R                  " U R
                  S-   5      US9(       a  gg g )N)rH   Tr2   )r]   rK   r4   r   zerobasefiniter$   r^   r5   positivenonnegativerO   s     rJ   rP   rP   C   s    ~~'::tyy!!188DII#6txx8HVabqyy#QYYtxx%8kR1::dhh'txx)@AFF499DUCU)UWXW]W]^b^g^ghi^iWjlmlrlrsws|s|}~s~l  NY  Z Z SrR   c                    U R                   (       a  [        X5      $ SnU R                   H  n[        [        R
                  " U5      U5      (       a  M*  UR                  (       aN  UR                  S:X  a%  [        [        R                  " SU -  5      U5      s  $ UR                  S-  ) (       a    gM  [        [        R                  " U5      U5      (       a  U(       a  SnM    g  g   U$ )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     ~~'::Gyy199S>;//55A:qvvaf~{;;UUQY<  Q\\#&44#G  NrR   c                 j    [        [        R                  " U R                  S   5      U5      (       a  gg Nr   T)r   r   r^   rf   rO   s     rJ   rP   rP   i   s(    
199TYYq\"K00 1rR   c                 \    [        [        R                  " U R                  S   5      U5      $ Nr   )r   r   integer_elementsrf   rO   s     rJ   rP   rP   n   "    q!!$))A,/==rR   c                     grM   rN   rO   s     rJ   rP   rP   u   rQ   rR   c                     g rW   rN   rO   s     rJ   rP   rP   y   rQ   rR   c                     grT   rN   rO   s     rJ   rP   rP   }   rU   rR   c                 0    U R                   nUc  [        eU$ rW   )is_rationalr1   rY   s      rJ   rP   rP      s    


C
{##JrR   c                     U R                   (       a  U R                  5       S   (       a  g[        X[        R                  5      $ )zm
* Rational + Rational     -> Rational
* Rational + !Rational    -> !Rational
* !Rational + !Rational   -> ?
r2   F)r]   as_real_imagr3   r   rationalrO   s     rJ   rP   rP      s0     ~~q!T

;;rR   c                    U R                   [        :X  aR  U R                  n[        [        R
                  " U5      U5      (       a   [        [        R                  " U5      U5      $ g[        [        R                  " U R                  5      U5      nU(       GaN  [        [        R
                  " U R                   5      U5      nU(       af  [        [        R                  " U R                   5      U5      nUSL a  gU(       a/  [        [        R                  " U R                  5      5      (       a  g[        [        R                  " U R                   5      U5      SL a*  [        [        R                  " U R                  5      U5      $ [        [        R                  " U R                   5      U5      (       a0  [        [        R                  " U R                  S5      5      (       a  gg[        [        R
                  " U R                  5      U5      (       a  [        [        R                  " U R                   5      U5      (       a  USL a  g[        [        R                  " U R                   5      5      (       a/  [        [        R                  " U R                  5      5      (       a  g[        [        R                  " U R                   S5      5      (       a  ggg)zq
* 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    yyA~HHqzz!}k**qvvay+..488,k:Nqzz$))4[Aqvvdii0=Lu$AJJtxx$8 9 9q{{499%k2e;qvvdhh'55q||DII&{33ADD"<M8N8N	QZZ!;	/	/qwwtyy!;//Ne4Kqvvdii !!c!**TXX*>&?&?qttDIIa !! " 
0rR   c                     U R                   S   n[        [        R                  " U5      U5      (       a!  [        [        R                  " U5      ) U5      $ g rp   rf   r   r   rz   nonzerorG   rH   r   s      rJ   rP   rP      s@    		!A
1::a=+&&AIIaL=+.. 'rR   c                     U R                   n[        [        R                  " U5      U5      (       a!  [        [        R                  " U5      ) U5      $ g rW   )r$   r   r   rz   r   r   s      rJ   rP   rP      s<    A
1::a=+&&AIIaL=+.. 'rR   c                 n    U R                   S   n[        [        R                  " U5      U5      (       a  gg Nr   F)rf   r   r   rz   r   s      rJ   rP   rP      s,    		!A
1::a=+&& 'rR   c                     U R                   S   n[        [        R                  " U5      U5      (       a$  [        [        R                  " US-
  5      ) U5      $ g Nr   r2   r   r   s      rJ   rP   rP      sF    		!A
1::a=+&&AIIa!e$$k22 'rR   c                 0    U R                   nUc  [        eU$ rW   )is_irrationalr1   rY   s      rJ   rP   rP      s    


C
{##JrR   c                     [        [        R                  " U 5      U5      nU(       a+  [        [        R                  " U 5      U5      nUc  g U(       + $ U$ rW   )r   r   realrz   )rG   rH   _real	_rationals       rJ   rP   rP      sD    tk*E

4(+6	}rR   c                 v    U R                  5       S   R                  S5      nUR                  S:w  a  U(       + $ g )Nr2   r6   ry   evalf_precrF   s      rJ   _RealPredicate_numberr      9     	A$$Q'Aww!|u rR   c                     grM   rN   rO   s     rJ   rP   rP           rR   c                     grT   rN   rO   s     rJ   rP   rP          rR   c                 0    U R                   nUc  [        eU$ rW   )is_realr1   rY   s      rJ   rP   rP      s    
,,C
{##JrR   c                 n    U R                   (       a  [        X5      $ [        X[        R                  5      $ )zH
* Real + Real              -> Real
* Real + (Complex & !Real) -> !Real
)r]   r   r3   r   r   rO   s     rJ   rP   rP     s'     ~~$T77T77rR   c                    U R                   (       a  [        X5      $ SnU R                   HV  n[        [        R
                  " U5      U5      (       a  M*  [        [        R                  " U5      U5      (       a  US-  nMV    g   U$ )zh
* Real*Real               -> Real
* Real*Imaginary          -> !Real
* Imaginary*Imaginary     -> Real
TN)r]   r   rf   r   r   r   	imaginary)rG   rH   resultrl   s       rJ   rP   rP     sj     ~~$T77Fyyqvvc{K((S!;//d]F  rR   c                    U R                   (       a  [        X5      $ U R                  [        :X  aY  [	        [
        R                  " U R                  [        -  [        -  5      [
        R                  " U R                  5      -  U5      $ U R                  R                  [        :X  d:  U R                  R                  (       Ga  U R                  R                  [        :X  a  [	        [
        R                  " U R                  R                  5      U5      (       a0  [	        [
        R                  " U R                  5      U5      (       a  gU R                  R                  [        -  [        -  n[	        [
        R                  " SU-  5      U5      (       a>  [	        [
        R                  " [        R                  U-  U R                  -  5      U5      $ g[	        [
        R                  " U R                  5      U5      (       ad  [	        [
        R                  " U R                  5      U5      (       a5  [	        [
        R                   " U R                  5      U5      nUb  U(       + $ g[	        [
        R                  " U R                  5      U5      (       a8  [	        [
        R                  " [#        U R                  5      5      U5      nUb  U$ [	        [
        R                  " U R                  5      U5      (       Gan  [	        [
        R                  " U R                  5      U5      (       Ga=  [	        [
        R$                  " U R                  5      U5      SLa1  [	        [
        R&                  " U R                  5      U5      (       a  ggU R                  R(                  (       ac  [	        [
        R*                  " U R                  R,                  5      U5      (       a*  [	        [
        R&                  " U R                  5      U5      $ [	        [
        R                  " U R                  5      U5      (       a  g[	        [
        R&                  " U R                  5      U5      (       a  gggg)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   $ ~~$T77yyA~IIdhhqjm$qvvdhh'77
 	
 yy~~!1!1!1diinn6Iq{{499==);771;;txx(+66
 IIMM!OBqyy1~{++qvvq}}a/$((:;[II
1;;tyy!;//qyy"K00aeeDHHo{3Cw
1;;txx +..AKKDII/= L
166$))k**qvvdhh--166$))$k2%?qzz$((+[99xx##txxzz*K881::dii0+>>QYYtxx(+66QZZ		*K88 9 . +rR   c                 j    [        [        R                  " U R                  S   5      U5      (       a  gg rn   )r   r   r   rf   rO   s     rJ   rP   rP   b  s(    
166$))A,-- .rR   c                     [        [        R                  " U R                  [        -  [
        -  5      [        R                  " U R                  5      -  U5      $ rW   )r   r   r^   r$   r*   r   r   rO   s     rJ   rP   rP   g  s;    			$((1*R- 166$((#33[ rR   c                 \    [        [        R                  " U R                  S   5      U5      $ rp   )r   r   rc   rf   rO   s     rJ   rP   rP   m  s     qzz$))A,'55rR   c                 \    [        [        R                  " U R                  S   5      U5      $ rp   )r   r   real_elementsrf   rO   s     rJ   rP   rP   q  s     qtyy|,k::rR   c                     [        [        R                  " U 5      [        R                  " U 5      -  [        R                  " U 5      -  [        R
                  " U 5      -  [        R                  " U 5      -  U5      $ rW   )r   r   negative_infinitenegativer`   rc   positive_infiniterO   s     rJ   rP   rP   x  sj    q""4(D!" D!" $$T*	+
  rR   c                     grM   rN   rO   s     rJ   rP   rP     rQ   rR   c                 6    [        X[        R                  5      $ rW   )r3   r   extended_realrO   s     rJ   rP   rP     s    T@@rR   c                 n    [        U [        5      (       a  g [        [        R                  " U 5      U5      $ rW   )
isinstancer.   r   r   r   rO   s     rJ   rP   rP     s'    $
##qvvd|[))rR   c                 d    U R                   (       a  [        e[        X[        R                  5      $ )zN
* Hermitian + Hermitian  -> Hermitian
* Hermitian + !Hermitian -> !Hermitian
)r]   r1   r3   r   	hermitianrO   s     rJ   rP   rP     s"     ~~##T<<rR   c                 p   U R                   (       a  [        eSnSnU R                   H  n[        [        R
                  " U5      U5      (       a  US-  nO'[        [        R                  " U5      U5      (       d    g[        [        R                  " U5      ) U5      (       d  M}  US-  nUS:  d  M    g   U$ )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yyqs#[11d]FQ[[%{33c""K00qLG{  rR   c                    U R                   (       a  [        eU R                  [        :X  a6  [	        [
        R                  " U R                  5      U5      (       a  g[        e[	        [
        R                  " U R                  5      U5      (       a0  [	        [
        R                  " U R                  5      U5      (       a  g[        e)z#
* Hermitian**Integer -> Hermitian
T)	r]   r1   ra   r   r   r   r   r$   r^   rO   s     rJ   rP   rP     s|    
 ~~##yyA~q{{488$k22##
1;;tyy!;//qyy"K00
rR   c                 t    [        [        R                  " U R                  S   5      U5      (       a  g[        ern   )r   r   r   rf   r1   rO   s     rJ   rP   rP     s)    
1;;tyy|$k22
rR   c                 n    [        [        R                  " U R                  5      U5      (       a  g[        erM   )r   r   r   r$   r1   rO   s     rJ   rP   rP     s%    
1;;txx +..
rR   c                     U R                   u  p#Sn[        U5       HI  n[        XS5       H7  n[        [        XU4   [	        XU4   5      5      5      nUc  S nUS:X  d  M6      g   MK     Uc  [
        eU$ NTFshaperanger   r+   r,   r1   matrH   rowscolsret_valrI   jconds           rJ   rP   rP     sv    JDG4[qAbTIcQ$i,@ABD|u}    ##NrR   c                     grM   rN   rO   s     rJ   rP   rP     r   rR   c                     grT   rN   rO   s     rJ   rP   rP     r   rR   c                 0    U R                   nUc  [        eU$ rW   )
is_complexr1   rY   s      rJ   rP   rP     r[   rR   c                 6    [        X[        R                  5      $ rW   )r3   r   complexrO   s     rJ   rP   rP     s    T		::rR   c                 `    U R                   [        :X  a  g[        X[        R                  5      $ rM   )ra   r   r3   r   r   rO   s     rJ   rP   rP     s!    yyA~T		::rR   c                 \    [        [        R                  " U R                  S   5      U5      $ rp   )r   r   complex_elementsrf   rO   s     rJ   rP   rP     rr   rR   c                     g rW   rN   rO   s     rJ   rP   rP     rQ   rR   c                 v    U R                  5       S   R                  S5      nUR                  S:w  a  U(       + $ g )Nr   r6   r2   r   )rG   rH   rs      rJ   _Imaginary_numberr     r   rR   c                     grM   rN   rO   s     rJ   rP   rP     rQ   rR   c                 0    U R                   nUc  [        eU$ rW   )is_imaginaryr1   rY   s      rJ   rP   rP     s    


C
{##JrR   c                 R   U R                   (       a  [        X5      $ SnU R                   HV  n[        [        R
                  " U5      U5      (       a  M*  [        [        R                  " U5      U5      (       a  US-  nMV    g   US:X  a  gUS[        U R                  5      4;   a  gg)zi
* 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     ~~ 33Eyyq{{3--k**QJE  A:QDII'' (rR   c                 F   U R                   (       a  [        X5      $ SnSnU R                   HV  n[        [        R
                  " U5      U5      (       a  US-  nM/  [        [        R                  " U5      U5      (       a  MV    g   U[        U R                  5      :X  a  gU$ )zB
* Real*Imaginary      -> Imaginary
* Imaginary*Imaginary -> Real
Fr   TNr   )rG   rH   r   r   rl   s        rJ   rP   rP   5  s     ~~ 33FEyyq{{3--d]FQVVC[+..	  C		N"rR   c                    U R                   (       a  [        X5      $ U R                  [        :X  aU  U R                  [
        -  [        -  n[        [        R                  " SU-  5      [        R                  " U5      ) -  U5      $ U R                  R                  [        :X  d:  U R                  R                  (       Ga  U R                  R                  [        :X  a  [        [        R                  " U R                  R                  5      U5      (       a  [        [        R                  " U R                  5      U5      (       a  gU R                  R                  [
        -  [        -  n[        [        R                  " SU-  5      U5      (       a>  [        [        R                  " [        R                  U-  U R                  -  5      U5      $ [        [        R                  " U R                  5      U5      (       a_  [        [        R                  " U R                  5      U5      (       a0  [        [        R                  " U R                  5      U5      nUb  U$ g[        [        R                  " U R                  5      U5      (       a7  [        [        R                  " [!        U R                  5      5      U5      nUb  g[        [        R"                  " U R                  5      [        R"                  " U R                  5      -  U5      (       a  [        [        R$                  " U R                  5      U5      (       a  g[        [        R&                  " U R                  5      U5      nU(       d  U$ [        [        R                  " U R                  5      U5      (       a  g[        [        R                  " SU R                  -  5      U5      nU(       a*  [        [        R(                  " U R                  5      U5      $ U$ g)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~    ~~ 33yyA~HHQJrM199QqS>QYYq\M1;??yy~~!1!1!1diinn6Iq{{499==);771;;txx(+66		a"A199QqS>;//1;;q(8488'CDkRR
1;;tyy!;//qyy"K00aeeDHHo{3C

1;;txx +..AKKDII/=
166$))qvvdhh//==qzz$))$k22ajj*K8C
199TXX&44199QtxxZ0+>qzz$))4kBB >rR   c                 H   [        [        R                  " U R                  S   5      U5      (       a4  [        [        R                  " U R                  S   5      U5      (       a  gg U R                  S   R
                  [        :X  d?  U R                  S   R                  (       aJ  U R                  S   R                  [        :X  a)  U R                  S   R                  [        [        * 4;   a  g[        [        R                  " U R                  S   5      U5      nUSL a  gg )Nr   FT)r   r   r   rf   rc   r   r$   r   ra   r   r*   r   )rG   rH   r%   s      rJ   rP   rP     s    
166$))A,--qzz$))A,'55
 yy|CDIIaL$7$7DIIaL<M<MQR<R99Q<A2w&	Q[[1&	4B	U{ rR   c                     U R                   [        -  [        -  n[        [        R
                  " SU-  5      [        R
                  " U5      ) -  U5      $ )Nr6   )r$   r*   r   r   r   r^   )rG   rH   r   s      rJ   rP   rP     s;    
2Aqyy1~1-{;;rR   c                 0    U R                  5       S   S:X  + $ )Nr2   r   )ry   rO   s     rJ   rP   rP     s    !!#A&!,,rR   c                     g rW   rN   rO   s     rJ   rP   rP     rQ   rR   c                     [        U [        5      (       a  g [        [        R                  " U 5      U5      (       a  g[        [        R
                  " U 5      U5      $ rM   )r   r.   r   r   r`   r   rO   s     rJ   rP   rP     s@    $
##
166$<%%q{{4 +..rR   c                 d    U R                   (       a  [        e[        X[        R                  5      $ )zf
* Antihermitian + Antihermitian  -> Antihermitian
* Antihermitian + !Antihermitian -> !Antihermitian
)r]   r1   r3   r   r   rO   s     rJ   rP   rP     s"     ~~##T@@rR   c                 p   U R                   (       a  [        eSnSnU R                   H  n[        [        R
                  " U5      U5      (       a  US-  nO'[        [        R                  " U5      U5      (       d    g[        [        R                  " U5      ) U5      (       d  M}  US-  nUS:  d  M    g   U$ )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yyqs#[11d]FQ[[%{33c""K00qLG{  rR   c                 &   U R                   (       a  [        e[        [        R                  " U R
                  5      U5      (       a7  [        [        R                  " U R                  5      U5      (       a  g [        e[        [        R                  " U R
                  5      U5      (       a`  [        [        R                  " U R                  5      U5      (       a  g[        [        R                  " U R                  5      U5      (       a  g[        e)zx
* 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;;tyy!;//qyy"K00 1   
Q__TYY'	5	5qvvdhh--txx+..
rR   c                     U R                   u  p#Sn[        U5       HJ  n[        XS5       H8  n[        [        XU4   [	        XU4   5      * 5      5      nUc  S nUS:X  d  M7      g   ML     Uc  [
        eU$ r   r   r   s           rJ   rP   rP     sy    JDG4[qAbTYsa4y-A,ABCD|u}    ##NrR   c                     grM   rN   rO   s     rJ   rP   rP     r   rR   c                     grT   rN   rO   s     rJ   rP   rP     rU   rR   c                 6    [        X[        R                  5      $ rW   )r3   r   r}   rO   s     rJ   rP   rP     s    T<<rR   c                    U R                   [        :X  a[  [        [        R                  " U R
                  5      U5      (       a+  [        [        R                  " U R
                  5      ) U5      $ g U R                   [        :X  a`  [        [        R                  " U R
                  5      U5      (       a0  [        [        R                  " U R
                  5      U5      (       a  gg [        [        R                  " U R
                  5      U5      n[        [        R                  " U R                   5      U5      n[        [        R                  " U R
                  5      U5      nU(       ai  U(       aa  U(       a  g[        [        R                  " U R                   S5      [        R                  " U R                   S5      -  5      (       a  USL a  gg g g g )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      s+   yyA~q{{488$k22		$((++[99yyBqyy"K00SDHH9M{5[5[qzz$((+[9LTYY/=NDHH-k:M- qttDIIa 144		!#4455,%:O ;P5 (~rR   c                      U R                   S:g  $ rp   )rh   rO   s     rJ   rP   rP     s    66Q;rR   c                     U R                   S   n[        [        R                  " U5      U5      (       a!  [        [        R                  " U5      ) U5      $ g rp   rf   r   r   r}   r   r   s      rJ   rP   rP     s@    		!A
1;;q>;''AIIaL=+.. (rR   c                     U R                   n[        [        R                  " U5      U5      (       a!  [        [        R                  " U5      ) U5      $ g rW   )r$   r   r   r}   r   r   s      rJ   rP   rP      s<    A
1;;q>;''AIIaL=+.. (rR   c                 n    U R                   S   n[        [        R                  " U5      U5      (       a  gg r   )rf   r   r   r}   r   s      rJ   rP   rP   &  s,    		!A
1;;q>;'' (rR   c                     U R                   S   n[        [        R                  " U5      U5      (       a$  [        [        R                  " US-
  5      ) U5      $ g r   r   r   s      rJ   rP   rP   ,  sF    		!A
1;;q>;''AIIa!e$$k22 (rR   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     s	   % 4 4C C C C C (      $ : 9 9 < 8 7 70 0 0 W- . k=("h(:<< 4  ! 3;  ; 3   3  6 3   ]EB> C> H% & E" #   {M8b,.. D! "   c*	< +	< C   ! D   tS#s;/ </
 C / !/
   s+ ,
   s+3 ,3 d# $ e$ % S${BH ]H6FG H   8 8  & @ @D S#& '  
 6 6 [-?; @; ' ( $$X/?@ A $$S#s3A 4A V$* %*
 S!= "= S! "0 S!  "  !!#s+  , 
 S!  " 
 Z( )" S#r=#v"c *:; < 4  ! S); *; 3;  ;
 ]EB> C> 3   ]+ , T" # S! "0 S! "& S!5 "5n S! "  S!< "< !!&,7- 8- S! "   (/ )/   %A &A   % &0   %  & $   , -" !!/5+%'' !!/4b !!#s+= ,= S! "* X& ' !!$c3</ =/
 S!/ "/
 !!$, -
 !!$,3 -3rR   