o
    h                     @   s\  d dl mZmZmZ d dlmZ d dlmZm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mZmZmZmZmZ d d
lmZmZmZ d dlm Z  d dl!m"Z" d dl#m$Z$m%Z% d dl&m'Z' d dl(m)Z) G dd deZ*G dd deZ+e* Z,e+ Z-dd Z.dd Z/dd Z0dd Z1dd Z2dd Z3d d! Z4d"d# Z5d$d% Z6d&S )'    )
DerivativeFunctiondiff)Mul)Integerpi)Symbolsymbols)sin)QExpr)Dagger)HilbertSpace)OperatorUnitaryOperatorHermitianOperatorOuterProductDifferentialOperatorIdentityOperator)KetBraWavefunction)qapply)	represent)JzKetJzBra)Tr)eyec                   @      e Zd Zedd ZdS )	CustomKetc                 C      dS )N)t selfr!   r!   ]/var/www/vscode/kcb/lib/python3.10/site-packages/sympy/physics/quantum/tests/test_operator.pydefault_args      zCustomKet.default_argsN__name__
__module____qualname__classmethodr%   r!   r!   r!   r$   r          r   c                   @   r   )CustomOpc                 C   r   )N)Tr!   r"   r!   r!   r$   r%      r&   zCustomOp.default_argsNr'   r!   r!   r!   r$   r-      r,   r-   c                  C   s  t d} t d}t d}t| t sJ t| tsJ | jtdfks$J | jdu s+J | jt ks3J | | ||  ks=J | ||   | | | |  ksOJ | | d  | d | |  ||   |d  ksiJ t	jd tt	
 d ksxJ t  t dksJ | t  | ksJ d S )NABCF   r   O)r   
isinstancer   labelr   is_commutativehilbert_spacer   expandt_opr%   r   )r/   r0   r1   r!   r!   r$   test_operator$   s   $4r:   c                  C   s4   t d} | |   dksJ |  |  dksJ d S )Nr/      )r   inv)r/   r!   r!   r$   test_operator_inv;   s   r=   c                  C   sh   t d} t| t sJ t| tsJ t| | ksJ |  | ks"J | jdu s)J t| jdu s2J d S )NHF)r   r4   r   r   r<   r6   )r>   r!   r!   r$   test_hermitianA   s   r?   c                  C   s   t d} t| t sJ t| tsJ |  t| ksJ | t|  dks&J t| |  dks0J | jdu s7J t| jdu s@J d S )NUr;   F)r   r4   r   r<   r   r6   )r@   r!   r!   r$   test_unitaryM   s   rA   c                  C   s&  t  } td}td}t| t sJ t| tsJ | | |ks!J ||  |ks)J | t| t|ks5J t||  t|ksAJ t| |  t sJJ td|  tsSJ t| | ts\J |  | ksdJ t| | kslJ t| | |ksvJ t||  |ksJ dD ]}tt |t	|ksJ qd S )Nr3   x   )r2   rC      )
r   r   r   r4   r   r   r<   r   r   r   )Ir3   rB   nr!   r!   r$   test_identityZ   s&   rG   c                  C   s  t d} td}t| |}t|tsJ t|tsJ |j| ks"J |j|ks)J |j| |fks2J |jdu s9J | | }t|tsDJ t|tsKJ |j| ksRJ |j|ksYJ |j| |fksbJ |jdu siJ d|  | }|t	t
d| |ks{J d| |  }|t	t
dt| |ksJ t| | tt|t| ksJ t| | jdu sJ tttddtdd dksJ td|  |dt| | ksJ t| d| dt| | ksJ t dt d}}tdtd	}}t|| |t||t|| ksJ t||| t||t|| ksJ td| d|  d
| d|  d
t|| dt||  dt||  dt||  ksHJ d S )NkbFr2   r;   k1k2b1b2rC            )r   r   r   r4   r   ketbrar5   r6   r   r   r   r   r   r   doit)rH   rI   oprJ   rK   rL   rM   r!   r!   r$   test_outer_productr   sT   
"&  

 rU   c                  C   sp   t d} t d}t| | t|t|  ksJ t| | t| t| ks(J t| d t| d ks6J d S )Nr/   r0   r2   )r   r   )r/   r0   r!   r!   r$   test_operator_dagger   s
      rV   c                  C   s  t d} td}tt|| | || }t| d | }t|| td|  | ks*J |jt|| | ks6J |j|| ks?J |j| fksGJ t	|| tt|| | d|| ks[J tt|| | d|| }t| d | }t|| td|  | ks~J |jt|| | dksJ |j|| ksJ |j| fksJ t	|| tt|| | d|| ksJ td|  t|| |  || }|jd|  t|| |  ksJ |j|| ksJ |j| fksJ t	|| ttd|  t|| |  | || ksJ t|| td|  | ksJ t d}tt|| || dt|| ||d || |}t| d |d  |d | d   | |}|jt|| || dt|| ||d ksSJ |j|| |ks^J |j| |fkshJ t	|| tt|j| || |ks|J t	||tt|j||| |ksJ t|| td| d  d|  |d   d| d  |  d|d   | |ksJ t
d\}}td| t|t|||| | d|d  t||||d  |||}t|d t| ||d	tf}|jd| t|t|||| | d|d  t||||d  ksJ |j|||ks%J |j||fks/J t	||tt|j||||ksCJ t	||tt|j||||ksWJ t|| tdt| ||d	tfksmJ d S )
NrB   fr2   rC   rO   r;   yzr thr   )r   r   r   r   r   r   exprfunction	variablesr   r	   r
   r   )rB   rW   dgrX   wrthr!   r!   r$   test_differential_operator   s   ((  $ (0

B" 


0ra   c            	      C   s  ddl m}  ddlm} td}td}td}|d | ks"J |d | ks,J |d | ks6J tdd	d
}|| ||sDJ || | ||ksOJ | ||| ||ddks]J ddl	m
} |d}|| ||soJ || | ||kszJ | ||dd| ||ksJ tdd	d	d}|| dksJ tdd	d	d}|| |ksJ tdd	d}|| ||sJ || | ||ksJ | ||dd| ||ksJ |d dksJ |d |ksJ d S )Nr   )Pow)	unchangedr3   r@   r>   rB   T)commutativeF)evaluate)XGaterF   )integerevenr;   )rh   odd)rh   rN      )
sympy.corerb   sympy.core.exprrc   r   r   r   r<   r	   sympy.physics.quantum.gaterg   )	rb   rc   r3   r@   r>   rB   rg   XrF   r!   r!   r$   test_eval_power   s6   rp   N)7sympy.core.functionr   r   r   sympy.core.mulr   sympy.core.numbersr   r   sympy.core.symbolr   r	   (sympy.functions.elementary.trigonometricr
   sympy.physics.quantum.qexprr   sympy.physics.quantum.daggerr   sympy.physics.quantum.hilbertr   sympy.physics.quantum.operatorr   r   r   r   r   r   sympy.physics.quantum.stater   r   r   sympy.physics.quantum.qapplyr   sympy.physics.quantum.representr   sympy.physics.quantum.spinr   r   sympy.physics.quantum.tracer   sympy.matricesr   r   r-   t_ketr9   r:   r=   r?   rA   rG   rU   rV   ra   rp   r!   r!   r!   r$   <module>   s8     7;