o
    jg
]  ć                   @   sÖ  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; ddl<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZF dd ZGe= HeIe”dd ZJe= Heeeeeeee”dd ZJe= Ke”dd ZJe= Hee	”dd ZJe= Ke”dd ZJe= Ke ”dd ZJe= He3e7e5”dd ZJe> Ke”dd ZJe> Ke”dd ZJe> Heeeeeee”dd ZJe> Ke”dd ZJe> Hee”dd ZJe> Ke	”d d ZJe> He#e$e%e+e,”d!d ZJe> Ke'”d"d ZJe> He"e&”d#d ZJe> He!e)”d$d ZJe? Ke”d%d ZJe? Ke”d&d ZJd'd( ZLe@ He eeee(eee*e”	d)d ZJe@ Heee”d*d ZJe@ Ke”d+d ZJe@ Ke”d,d ZJe@ Ke”d-d ZJe@ Ke	”d.d ZJe@ He%e+”d/d ZJe@ Ke'”d0d ZJe@ Ke)”d1d ZJe@ He3e7e5”d2d ZJeA KeM”d3d ZJeA Hee”d4d ZJeA Heee	”d5d ZJeB KeM”d6d ZJeB Ke”d7d ZJeB Ke”d8d ZJeB Ke	”d9d ZJeB He%e+”d:d ZJeB Ke'”d;d ZJeB Ke4”d<d ZJeC He e%e'e(ee)eee*e+”
d=d ZJeC Hee”d>d ZJeC Ke”d?d ZJeC Hee”d@d ZJeC Ke	”dAd ZJeC He3e7e5”dBd ZJeC Ke”dCd ZJdDdE ZNeD Ke”dFd ZJeD Ke”dGd ZJeD Ke”dHd ZJeD Ke”dId ZJeD Ke	”dJd ZJeD Ke)”dKd ZJeD Ke'”dLd ZJeD Hee”dMd ZJeD Ke”dNd ZJeE KeM”dOd ZJeE Ke”dPd ZJeE Ke”dQd ZJeE Ke	”dRd ZJeE Ke4”dSd ZJeF Heeeee”dTd ZJeF Heeeee”dUd ZJeF Hee”dVd ZJeF Ke	”dWd ZJeF Ke”dXd ZJeF He#e$e%e+e,”dYd ZJeF Ke'”dZd ZJeF He"e&”d[d ZJeF He!e)”d\d ZJd]S )^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é   )
ŚIntegerPredicateŚRationalPredicateŚIrrationalPredicateŚRealPredicateŚExtendedRealPredicateŚHermitianPredicateŚComplexPredicateŚImaginaryPredicateŚAntihermitianPredicateŚAlgebraicPredicatec                 C   s:   zt |  ” }| |  d”stW dS  ty   Y dS w )Nr   TF)ŚintŚroundŚequalsŚ	TypeError©ŚexprŚassumptionsŚi© rF   śW/var/www/html/zoom/venv/lib/python3.10/site-packages/sympy/assumptions/handlers/sets.pyŚ_IntegerPredicate_number   s   ’rH   c                 C   ó   dS ©NTrF   ©rC   rD   rF   rF   rG   Ś_(   ó   rL   c                 C   rI   ©NFrF   rK   rF   rF   rG   rL   ,   ó   c                 C   ó   | j }|d u r	t|S ©N)Ś
is_integerr0   ©rC   rD   ŚretrF   rF   rG   rL   1   ó   c                 C   ó   | j rt| |S t| |tjS )zw
    * Integer + Integer       -> Integer
    * Integer + !Integer      -> !Integer
    * !Integer + !Integer -> ?
    )Ś	is_numberrH   r2   r   ŚintegerrK   rF   rF   rG   rL   8   s   
c                 C   s   | j rt| |S d}| jD ];}tt |”|sH|jr5|jdkr+tt d|  ”|  S |jd@  r4 dS qtt 	|”|rE|rBd}q dS  dS q|S )z
    * Integer*Integer      -> Integer
    * Integer*Irrational   -> !Integer
    * Odd/Even             -> !Integer
    * Integer*Rational     -> ?
    Tr3   r1   NF)
rW   rH   Śargsr   r   rX   Śis_RationalŚqŚevenŚ
irrational)rC   rD   Ś_outputŚargrF   rF   rG   rL   C   s$   


’ōc                 C   ó   t t | jd ”|S ©Nr   )r   r   rX   rY   rK   rF   rF   rG   rL   _   ó   c                 C   r`   ra   )r   r   Śinteger_elementsrY   rK   rF   rF   rG   rL   c   rb   c                 C   rI   rJ   rF   rK   rF   rF   rG   rL   j   rM   c                 C   ó   d S rQ   rF   rK   rF   rF   rG   rL   n   rM   c                 C   rI   rN   rF   rK   rF   rF   rG   rL   r   rO   c                 C   rP   rQ   )Śis_rationalr0   rS   rF   rF   rG   rL   w   rU   c                 C   s$   | j r|  ” d rdS t| |tjS )z}
    * Rational + Rational     -> Rational
    * Rational + !Rational    -> !Rational
    * !Rational + !Rational   -> ?
    r1   F)rW   Śas_real_imagr2   r   ŚrationalrK   rF   rF   rG   rL   ~   s   c                 C   s   | j tkr| j}tt |”|rtt |” |S dS tt | j”|r-tt | j ”|S tt | j”|rAtt | j ”|rCdS dS dS )z
    * Rational ** Integer      -> Rational
    * Irrational ** Rational   -> Irrational
    * Rational ** Irrational   -> ?
    NF)	Śbaser   r#   r   r   rg   ŚnonzerorX   Śprime©rC   rD   ŚxrF   rF   rG   rL      s   
žc                 C   ó0   | j d }tt |”|rtt |” |S d S ra   ©rY   r   r   rg   ri   rk   rF   rF   rG   rL      ó   
’c                 C   ó,   | j }tt |”|rtt |” |S d S rQ   )r#   r   r   rg   ri   rk   rF   rF   rG   rL   £   ó   ’c                 C   ó"   | j d }tt |”|rdS d S ©Nr   F)rY   r   r   rg   rk   rF   rF   rG   rL   ©   ó   
’c                 C   ó4   | j d }tt |”|rtt |d ” |S d S ©Nr   r1   rn   rk   rF   rF   rG   rL   Æ   ó   
’c                 C   rP   rQ   )Śis_irrationalr0   rS   rF   rF   rG   rL   ø   rU   c                 C   s:   t t | ”|}|rt t | ”|}|d u rd S | S |S rQ   )r   r   Śrealrg   )rC   rD   Ś_realŚ	_rationalrF   rF   rG   rL   æ   s   c                 C   s&   |   ” d  d”}|jdkr| S d S )Nr1   r3   ©rf   ŚevalfŚ_precrB   rF   rF   rG   Ś_RealPredicate_numberĶ   ó   
’r   c                 C   rI   rJ   rF   rK   rF   rF   rG   rL   Ö   rO   c                 C   rI   rN   rF   rK   rF   rF   rG   rL   Ū   rM   c                 C   rP   rQ   )Śis_realr0   rS   rF   rF   rG   rL   ß   rU   c                 C   rV   )zT
    * Real + Real              -> Real
    * Real + (Complex & !Real) -> !Real
    )rW   r   r2   r   ry   rK   rF   rF   rG   rL   ę   s   
c                 C   sT   | j rt| |S d}| jD ]}tt |”|rqtt |”|r%|dA }q dS |S )zx
    * Real*Real               -> Real
    * Real*Imaginary          -> !Real
    * Imaginary*Imaginary     -> Real
    TN)rW   r   rY   r   r   ry   Ś	imaginary)rC   rD   Śresultr_   rF   rF   rG   rL   š   s   


c                 C   sź  | j rt| |S | jtkr tt | jt t	 ”t 
| j”B |S | jjtks0| jjrg| jjtkrgtt | jj”|rEtt | j”|rEdS | jjt t	 }tt d| ”|rett 
tj| | j ”|S dS tt | j”|rtt | j”|rtt | j”|}|dur| S dS tt | j”|r„tt t| j”|}|dur„|S tt 
| j”|rļtt 
| j”|rń| jjrĪtt | jj”|rĪtt | j”|S tt | j”|rŁdS tt | j”|rädS tt | j”|ródS dS dS dS )a×  
    * Real**Integer              -> Real
    * Positive**Real             -> 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
    Tr3   NF)rW   r   rh   r   r   r   rX   r#   r)   r   ry   ŚfuncŚis_Powr   r	   ŚNegativeOneŚoddr%   rZ   r\   r[   ŚpositiveŚnegative)rC   rD   rE   r   ŚimlogrF   rF   rG   rL     sN   

 ’ ’öc                 C   s   t t | jd ”|rdS d S ©Nr   T)r   r   ry   rY   rK   rF   rF   rG   rL   D  s   ’c                 C   s&   t t | jt t ”t | j”B |S rQ   )r   r   rX   r#   r)   r   ry   rK   rF   rF   rG   rL   I  s    ’c                 C   r`   ra   )r   r   r   rY   rK   rF   rF   rG   rL   O  rb   c                 C   r`   ra   )r   r   Śreal_elementsrY   rK   rF   rF   rG   rL   S  rb   c                 C   s8   t t | ”t | ”B t | ”B t | ”B t | ”B |S rQ   )r   r   Śnegative_infiniter   Śzeror   Śpositive_infiniterK   rF   rF   rG   rL   Z  s   
’žżüūc                 C   rI   rJ   rF   rK   rF   rF   rG   rL   c  rM   c                 C   ó   t | |tjS rQ   )r2   r   Śextended_realrK   rF   rF   rG   rL   g  ó   c                 C   s   t | trd S tt | ”|S rQ   )Ś
isinstancer-   r   r   ry   rK   rF   rF   rG   rL   n  s   
c                 C   ó   | j rtt| |tjS )zZ
    * Hermitian + Hermitian  -> Hermitian
    * Hermitian + !Hermitian -> !Hermitian
    )rW   r0   r2   r   Ś	hermitianrK   rF   rF   rG   rL   t  ó   c                 C   sz   | j rtd}d}| jD ].}tt |”|r|dA }ntt |”|s& dS tt |” |r:|d7 }|dkr: dS q|S )zŅ
    As long as there is at most only one noncommutative term:

    * Hermitian*Hermitian         -> Hermitian
    * Hermitian*Antihermitian     -> !Hermitian
    * Antihermitian*Antihermitian -> Hermitian
    r   Tr1   N©rW   r0   rY   r   r   Śantihermitianr   Ścommutative©rC   rD   Śnccountr   r_   rF   rF   rG   rL   ~  ó   	

c                 C   sZ   | j rt| jtkrtt | j”|rdS ttt | j”|r+tt | j”|r+dS t)z+
    * Hermitian**Integer -> Hermitian
    T)	rW   r0   rh   r   r   r   r   r#   rX   rK   rF   rF   rG   rL     s   
c                 C   s   t t | jd ”|rdS tr   )r   r   r   rY   r0   rK   rF   rF   rG   rL   §  s   c                 C   s   t t | j”|rdS trJ   )r   r   r   r#   r0   rK   rF   rF   rG   rL   ­  s   c              	   C   sz   | j \}}d}t|D ])}t||D ]!}tt| ||f t| ||f }|d u r+d }|dkr3  dS qq|d u r;t|S ©NTF©ŚshapeŚranger   r*   r+   r0   ©ŚmatrD   ŚrowsŚcolsŚret_valrE   ŚjŚcondrF   rF   rG   rL   ³  s   
"’üc                 C   rI   rJ   rF   rK   rF   rF   rG   rL   Å  rO   c                 C   rI   rN   rF   rK   rF   rF   rG   rL   Ź  rM   c                 C   rP   rQ   )Ś
is_complexr0   rS   rF   rF   rG   rL   Ī  rU   c                 C   r   rQ   )r2   r   ŚcomplexrK   rF   rF   rG   rL   Õ  r   c                 C   s   | j tkrdS t| |tjS rJ   )rh   r   r2   r   r©   rK   rF   rF   rG   rL   Ł  s   
c                 C   r`   ra   )r   r   Ścomplex_elementsrY   rK   rF   rF   rG   rL   ß  rb   c                 C   rd   rQ   rF   rK   rF   rF   rG   rL   ć  rM   c                 C   s&   |   ” d  d”}|jdkr| S d S )Nr   r3   r1   r|   )rC   rD   ŚrrF   rF   rG   Ś_Imaginary_numberź  r   r¬   c                 C   rI   rJ   rF   rK   rF   rF   rG   rL   ó  rM   c                 C   rP   rQ   )Śis_imaginaryr0   rS   rF   rF   rG   rL   ÷  rU   c                 C   sv   | j rt| |S d}| jD ]}tt |”|rqtt |”|r%|d7 }q dS |dkr.dS |dt| jfv r9dS dS )zy
    * Imaginary + Imaginary -> Imaginary
    * Imaginary + Complex   -> ?
    * Imaginary + Real      -> !Imaginary
    r   r1   TFN©rW   r¬   rY   r   r   r   ry   Ślen)rC   rD   Śrealsr_   rF   rF   rG   rL   ž  s   


žc                 C   sj   | j rt| |S d}d}| jD ]}tt |”|r|dA }qtt |”|s) dS q|t| jkr3dS |S )zN
    * Real*Imaginary      -> Imaginary
    * Imaginary*Imaginary -> Real
    Fr   TNr®   )rC   rD   r   r°   r_   rF   rF   rG   rL     s   


’c                 C   sä  | j rt| |S | jtkr$| jt t }tt 	d| ”t 	|” @ |S | jj
tks4| jjri| jjtkritt | jj”|ritt | j”|rIdS | jjt t }tt 	d| ”|ritt tj| | j ”|S tt | j”|rtt 	| j”|rtt | j”|}|dur|S dS tt | j”|r¦tt t| j”|}|dur¦dS tt | j”t | j”@ |rštt | j”|rĄdS tt | j”|}|sĶ|S tt 	| j”|rŲdS tt 	d| j ”|}|rītt | 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
    r3   FN)rW   r¬   rh   r   r#   r)   r   r   r   rX   r   r   r   r	   r   r   r%   ry   r   rg   r   )rC   rD   ŚarE   r   r   ŚratŚhalfrF   rF   rG   rL   +  sF   

  óc                 C   s    t t | jd ”|rt t | jd ”|rdS d S | jd jtks0| jd jr=| jd jt	kr=| jd jt
t
 fv r=dS t t | jd ”|}|du rNdS d S )Nr   FT)r   r   ry   rY   r   r   r#   r   rh   r   r)   r   )rC   rD   r$   rF   rF   rG   rL   c  s   ,’c                 C   s.   | j t t }tt d| ”t |” @ |S )Nr3   )r#   r)   r   r   r   rX   )rC   rD   r±   rF   rF   rG   rL   t  s    c                 C   s   |   ” d dk S )Nr1   r   )rf   rK   rF   rF   rG   rL   y  s   c                 C   rd   rQ   rF   rK   rF   rF   rG   rL   }  rM   c                 C   s2   t | trd S tt | ”|rdS tt | ”|S rJ   )r   r-   r   r   r   r   rK   rF   rF   rG   rL     s
   
c                 C   r   )zr
    * Antihermitian + Antihermitian  -> Antihermitian
    * Antihermitian + !Antihermitian -> !Antihermitian
    )rW   r0   r2   r   r   rK   rF   rF   rG   rL     r   c                 C   sz   | j rtd}d}| jD ].}tt |”|r|dA }ntt |”|s& dS tt |” |r:|d7 }|dkr: dS q|S )zß
    As long as there is at most only one noncommutative term:

    * Hermitian*Hermitian         -> !Antihermitian
    * Hermitian*Antihermitian     -> Antihermitian
    * Antihermitian*Antihermitian -> !Antihermitian
    r   FTr1   Nr   r   rF   rF   rG   rL     r   c                 C   sx   | j rttt | j”|rtt | j”|rdS ttt | j”|r:tt 	| j”|r/dS tt 
| j”|r:dS t)z
    * Hermitian**Integer  -> !Antihermitian
    * Antihermitian**Even -> !Antihermitian
    * Antihermitian**Odd  -> Antihermitian
    FT)rW   r0   r   r   r   rh   rX   r#   r   r\   r   rK   rF   rF   rG   rL   Æ  s   ūc              	   C   s|   | j \}}d}t|D ]*}t||D ]"}tt| ||f t| ||f  }|d u r,d }|dkr4  dS qq|d u r<t|S r   r   r”   rF   rF   rG   rL   Ā  s   
$’üc                 C   rI   rJ   rF   rK   rF   rF   rG   rL   Ō  rO   c                 C   rI   rN   rF   rK   rF   rF   rG   rL   Ł  rO   c                 C   r   rQ   )r2   r   Ś	algebraicrK   rF   rF   rG   rL   Ž  r   c                 C   sN   | j tkrtt | j”|rtt | j” |S d S | jjo&tt | j ”|S rQ   )rh   r   r   r   r“   r#   ri   rZ   rK   rF   rF   rG   rL   ā  s
   
c                 C   s
   | j dkS ra   )r[   rK   rF   rF   rG   rL   ź  s   
c                 C   rm   ra   ©rY   r   r   r“   ri   rk   rF   rF   rG   rL   ī  ro   c                 C   rp   rQ   )r#   r   r   r“   ri   rk   rF   rF   rG   rL   ō  rq   c                 C   rr   rs   )rY   r   r   r“   rk   rF   rF   rG   rL   ś  rt   c                 C   ru   rv   rµ   rk   rF   rF   rG   rL      rw   N)OŚ__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.matexprr/   Śsympy.multipledispatchr0   Ścommonr2   Śpredicates.setsr4   r5   r6   r7   r8   r9   r:   r;   r<   r=   rH   Śregister_manyr>   rL   Śregisterr   Śobjectr¬   rF   rF   rF   rG   Ś<module>   sN    L<0


’









’












	’



	


?









	





’








	




7






	



’

’









