U
    L?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                   @   s   e Zd Zedd ZdS )	CustomKetc                 C   s   dS )N)t selfr   r   [/var/www/html/venv/lib/python3.8/site-packages/sympy/physics/quantum/tests/test_operator.pydefault_args   s    zCustomKet.default_argsN__name__
__module____qualname__classmethodr#   r   r   r   r"   r      s   r   c                   @   s   e Zd Zedd ZdS )CustomOpc                 C   s   dS )N)Tr   r    r   r   r"   r#      s    zCustomOp.default_argsNr$   r   r   r   r"   r)      s   r)   c                  C   s  t d} t d}t d}t| t s&tt| ts4t| jtdfksHt| jdksVt| jt ksft| | ||  kszt| ||  	 | | | |  kst| | d 	 | d | |  ||   |d  kstt
jd tt
 d kstt  t dkst| t  | kstd S )NABCF   r   O)r   
isinstanceAssertionErrorr   labelr   is_commutativeZhilbert_spacer   expandt_opr#   r   )r+   r,   r-   r   r   r"   test_operator$   s    $4r6   c                  C   s4   t d} | |   dkst|  |  dks0td S )Nr+      )r   invr1   )r+   r   r   r"   test_operator_inv;   s    r9   c                  C   sh   t d} t| t stt| ts$tt| | ks4t|  | ksDt| jdksRtt| jdksdtd S )NHF)r   r0   r1   r   r   r8   r3   )r:   r   r   r"   test_hermitianA   s    r;   c                  C   s   t d} t| t stt| ts$t|  t| ks8t| t|  dksLtt| |  dks`t| jdksntt| jdkstd S )NUr7   F)r   r0   r1   r   r8   r   r3   )r<   r   r   r"   test_unitaryM   s    r=   c                  C   s,  t  } td}td}t| t s$tt| ts2t| | |ksBt||  |ksRt| t| t|ksjtt||  t|kstt| |  t sttd|  tstt| | tst|  | kstt| | kstt| | |kstt||  |kstdD ] }t	t |t
|kstqd S )Nr/   x   )r.   r?      )r   r   r   r0   r1   r   r   r8   r   r   r   )Ir/   r>   nr   r   r"   test_identityZ   s$    rC   c                  C   s  t d} td}t| |}t|ts(tt|ts6t|j| ksDt|j|ksRt|j| |fksdt|j	dksrt| | }t|tstt|tst|j| kst|j|kst|j| |fkst|j	dkstd|  | }|t
td| |kstd| |  }|t
tdt| |ks tt| | tt|t| ksDtt| | j	dks\ttttddtdd dksttd|  |dt| | kstt| d| dt| | kstt dt d }}tdtd	 }}t|| |t||t|| kstt||| t||t|| ks<ttd| d|  d
| d|  d
t|| dt||  dt||  dt||  kstd S )NkbFr.   r7   k1k2b1b2r?            )r   r   r   r0   r1   r   ZketZbrar2   r3   r   r   r   r   r   r   Zdoit)rD   rE   oprF   rG   rH   rI   r   r   r"   test_outer_productr   sT    
$(""

 rN   c                  C   sp   t d} t d}t| | t|t|  ks0tt| | t| t| ksPtt| d t| d ksltd S )Nr+   r,   r.   )r   r   r1   )r+   r,   r   r   r"   test_operator_dagger   s
      rO   c                  C   s  t d} td}tt|| | || }t| d | }t|| td|  | ksTt|jt|| | kslt|j|| ks~t|j	| fkstt
|| tt|| | d|| ksttt|| | d|| }t| d | }t|| td|  | kst|jt|| | dkst|j|| ks,t|j	| fks>tt
|| tt|| | d|| kshttd|  t|| |  || }|jd|  t|| |  kst|j|| kst|j	| fkstt
|| ttd|  t|| |  | || kstt|| td|  | ks&tt d}tt|| || dt|| ||d || |}t| d |d  |d | d   | |}|jt|| || dt|| ||d kst|j|| |kst|j	| |fkstt
|| tt|j| || |kstt
||tt|j||| |ks0tt|| td| d  d|  |d   d| d  |  d|d   | |kst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sDt|j|||ksZt|j	||fksntt
||tt|j||||kstt
||tt|j||||kstt|| tdt| ||d	tfkstd S )
Nr>   fr.   r?   rK   r7   yzr thr   )r   r   r   r   r   r   r1   exprfunction	variablesr   r	   r
   r   )r>   rP   dgrQ   wrthr   r   r"   test_differential_operator   s    (* "$
 (0

B " 


rZ   c            	      C   s  ddl m}  ddlm} td}td}td}|d | ksDt|d | ksXt|d | ksltt	dd	d
}|| ||st|| | ||kst| ||| ||ddkstddl
m} |d}|| ||st|| | ||kst| ||dd| ||kstt	dd	d	d}|| dks2tt	dd	d	d}|| |ksRtt	dd	d}|| ||spt|| | ||kst| ||dd| ||kst|d dkst|d |kstd S )Nr   )Pow)	unchangedr/   r<   r:   r>   T)ZcommutativeF)evaluate)XGaterB   )integerZevenr7   )r`   Zodd)r`   rJ      )Z
sympy.corer[   Zsympy.core.exprr\   r   r   r   r8   r1   r	   Zsympy.physics.quantum.gater_   )	r[   r\   r/   r<   r:   r>   r_   XrB   r   r   r"   test_eval_power   s6    rc   N)7Zsympy.core.functionr   r   r   Zsympy.core.mulr   Zsympy.core.numbersr   r   Zsympy.core.symbolr   r	   Z(sympy.functions.elementary.trigonometricr
   Zsympy.physics.quantum.qexprr   Zsympy.physics.quantum.daggerr   Zsympy.physics.quantum.hilbertr   Zsympy.physics.quantum.operatorr   r   r   r   r   r   Zsympy.physics.quantum.stater   r   r   Zsympy.physics.quantum.qapplyr   Zsympy.physics.quantum.representr   Zsympy.physics.quantum.spinr   r   Zsympy.physics.quantum.tracer   Zsympy.matricesr   r   r)   Zt_ketr5   r6   r9   r;   r=   rC   rN   rO   rZ   rc   r   r   r   r"   <module>   s6    7;