U
    ZÊ¹jVv  ã                   @  sØ  U d 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 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 dd
lmZmZmZmZ ddlmZ 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*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 ddl1m2Z2m3Z3m4Z4m5Z5 ddl6m7Z7 ddl8m9Z9 ddl:m;Z;m<Z< ddl=m>Z> ddl?m@Z@ ddlAmBZB ddlCmDZDmEZE ddlFmGZG ddlHmIZI ddlJmKZK ddl(mLZL ddlMmNZN ddlOmPZQ ddlRmSZS eGZTi ZUdeVd < eWd!eUƒ eWd"eUƒ eWd#eUƒ eWd$eUƒ eWd%eUƒ eWd&eUƒ eWd'eUƒ eWd(eUƒ eWd)eUƒ d*d+„ ZXd,d-„ ZPd.d/„ ZYd0d1„ ZZd2d3„ Z[d4d5„ Z\d6d7„ Z]d8d9„ Z^eKd:d;„ ƒZ_d<d=„ Z`d>d?„ Zad@dA„ ZbdBdC„ ZcdDdE„ ZddFdG„ ZedHdI„ ZfdJdK„ ZgdLdM„ ZhdNdO„ ZidPdQ„ ZjdRS )Sz5
TODO:
* Address Issue 2251, printing of spin states
é    )Úannotations)ÚAny)ÚAntiCommutator)ÚCGÚWigner3jÚWigner6jÚWigner9j)Ú
Commutator)Úhbar)ÚDagger)ÚCGateÚCNotGateÚIdentityGateÚUGateÚXGate)ÚComplexSpaceÚ	FockSpaceÚHilbertSpaceÚL2)ÚInnerProduct)ÚOperatorÚOuterProductÚDifferentialOperator)ÚQExpr)ÚQubitÚIntQubit)ÚJzÚJ2ÚJzBraÚJzBraCoupledÚJzKetÚJzKetCoupledÚRotationÚWignerD)ÚBraÚKetÚ
TimeDepBraÚ
TimeDepKet)ÚTensorProduct)Ú	RaisingOp)Ú
DerivativeÚFunction)Úoo)ÚPow)ÚS)ÚSymbolÚsymbols)ÚMatrix)ÚInterval)ÚXFAIL)ÚJzOp)Úsrepr)Úpretty)Úlatexzdict[str, Any]ÚENVzfrom sympy import *z#from sympy.physics.quantum import *z&from sympy.physics.quantum.cg import *z(from sympy.physics.quantum.spin import *z+from sympy.physics.quantum.hilbert import *z)from sympy.physics.quantum.qubit import *z)from sympy.physics.quantum.qexpr import *z(from sympy.physics.quantum.gate import *z-from sympy.physics.quantum.constants import *c                 C  s&   t | ƒ|kst‚t|tƒ| ks"t‚dS )zD
    sT := sreprTest
    from sympy/printing/tests/test_repr.py
    N)r5   ÚAssertionErrorÚevalr8   )ÚexprÚstring© r=   úh/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/physics/quantum/tests/test_printing.pyÚsT8   s    r?   c                 C  s   t | ddd�S )zASCII pretty-printingF©Zuse_unicodeZ	wrap_line©Úxpretty©r;   r=   r=   r>   r6   A   s    r6   c                 C  s   t | ddd�S )zUnicode pretty-printingTFr@   rA   rC   r=   r=   r>   ÚuprettyF   s    rD   c                  C  sÈ   t dƒ} t dƒ}t| |ƒ}t| d |ƒ}t|ƒdks8t‚t|ƒdksHt‚t|ƒdksXt‚t|ƒdksht‚t|dƒ t|ƒdks‚t‚d}d	}t|ƒ|ksšt‚t|ƒ|ksªt‚t|ƒd
ksºt‚t|dƒ d S )NÚAÚBé   z{A,B}z\left\{A,B\right\}z;AntiCommutator(Operator(Symbol('A')),Operator(Symbol('B')))z{A**2,B}z/ 2  \
<A ,B>
\    /u    âŽ§ 2  âŽ«
âŽ¨A ,BâŽ¬
âŽ©    âŽ­z\left\{A^{2},B\right\}zLAntiCommutator(Pow(Operator(Symbol('A')), Integer(2)),Operator(Symbol('B'))))r   r   Ústrr9   r6   rD   r7   r?   )rE   rF   ÚacZac_tallÚ	ascii_strÚ	ucode_strr=   r=   r>   Útest_anticommutatorK   s$    

ÿÿrL   c               
   C  s¾  t ddddddƒ} tddddddƒ}tddddddƒ}tddddddddd	ƒ	}t| ƒd
ks^t‚d}d}t| ƒ|ksvt‚t| ƒ|ks†t‚t| ƒdks–t‚t| d ƒdksªt‚t	| dƒ t|ƒdksÄt‚d}d}t|ƒ|ksÜt‚t|ƒ|ksìt‚t|ƒdksüt‚t	|dƒ t|ƒdk�st‚d}d}t|ƒ|k�s2t‚t|ƒ|k�sDt‚t|ƒdk�sVt‚t	|dƒ t|ƒdk�srt‚d}d}t|ƒ|k�sŒt‚t|ƒ|k�sžt‚t|ƒdk�s°t‚t	|dƒ d S )Né   rG   é   é   é   é   é   é   é	   zCG(1, 2, 3, 4, 5, 6)z 5,6    
C       
 1,2,3,4zC^{5,6}_{1,2,3,4}z"\left(C^{5,6}_{1,2,3,4}\right)^{2}zJCG(Integer(1), Integer(2), Integer(3), Integer(4), Integer(5), Integer(6))zWigner3j(1, 2, 3, 4, 5, 6)z/1  3  5\
|       |
\2  4  6/u)   âŽ›1  3  5âŽž
âŽœ       âŽŸ
âŽ�2  4  6âŽ zB\left(\begin{array}{ccc} 1 & 3 & 5 \\ 2 & 4 & 6 \end{array}\right)zPWigner3j(Integer(1), Integer(2), Integer(3), Integer(4), Integer(5), Integer(6))zWigner6j(1, 2, 3, 4, 5, 6)z/1  2  3\
<       >
\4  5  6/u)   âŽ§1  2  3âŽ«
âŽ¨       âŽ¬
âŽ©4  5  6âŽ­zD\left\{\begin{array}{ccc} 1 & 2 & 3 \\ 4 & 5 & 6 \end{array}\right\}zPWigner6j(Integer(1), Integer(2), Integer(3), Integer(4), Integer(5), Integer(6))z#Wigner9j(1, 2, 3, 4, 5, 6, 7, 8, 9)z1/1  2  3\
|       |
<4  5  6>
|       |
\7  8  9/uE   âŽ§1  2  3âŽ«
âŽª       âŽª
âŽ¨4  5  6âŽ¬
âŽª       âŽª
âŽ©7  8  9âŽ­zQ\left\{\begin{array}{ccc} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{array}\right\}ztWigner9j(Integer(1), Integer(2), Integer(3), Integer(4), Integer(5), Integer(6), Integer(7), Integer(8), Integer(9)))
r   r   r   r   rH   r9   r6   rD   r7   r?   )ZcgZwigner3jZwigner6jZwigner9jrJ   rK   r=   r=   r>   Útest_cgh   s^    ÿÿ
ÿÿÿ
ÿÿÿ

ÿ	ÿÿ
rU   c                  C  sÈ   t dƒ} t dƒ}t| |ƒ}t| d |ƒ}t|ƒdks8t‚t|ƒdksHt‚t|ƒdksXt‚t|ƒdksht‚t|dƒ t|ƒdks‚t‚d}d	}t|ƒ|ksšt‚t|ƒ|ksªt‚t|ƒd
ksºt‚t|dƒ d S )NrE   rF   rG   z[A,B]z\left[A,B\right]z7Commutator(Operator(Symbol('A')),Operator(Symbol('B')))z[A**2,B]z[ 2  ]
[A ,B]u   âŽ¡ 2  âŽ¤
âŽ£A ,BâŽ¦z\left[A^{2},B\right]zHCommutator(Pow(Operator(Symbol('A')), Integer(2)),Operator(Symbol('B'))))r   r	   rH   r9   r6   rD   r7   r?   )rE   rF   ÚcZc_tallrJ   rK   r=   r=   r>   Útest_commutator»   s$    

ÿÿrW   c                   C  sN   t tƒdkst‚ttƒdks t‚ttƒdks0t‚ttƒdks@t‚ttdƒ d S )Nr
   u   â„�z\hbarzHBar())rH   r
   r9   r6   rD   r7   r?   r=   r=   r=   r>   Útest_constantsÖ   s
    rX   c                  C  sf   t dƒ} t| ƒ}t|ƒdks t‚d}d}t|ƒ|ks8t‚t|ƒ|ksHt‚t|ƒdksXt‚t|dƒ d S )NÚxz	Dagger(x)z +
x u    â€ 
x zx^{\dagger}zDagger(Symbol('x')))r0   r   rH   r9   r6   rD   r7   r?   )rY   r;   rJ   rK   r=   r=   r>   Útest_daggerÞ   s    ÿÿrZ   c                  C  sB   t dƒ\} }}}t| |g||ggƒ}td|ƒ}t|ƒdks>t‚d S )Núa,b,c,d©r   zU(0))r0   r1   r   rH   r9   )ÚaÚbrV   ÚdÚuMatÚgr=   r=   r>   Útest_gate_failingò   s    
rb   c                  C  s"  t dƒ\} }}}t| |g||ggƒ}tdddddƒ}tdƒ}tdtdƒƒ}tddƒ}td|ƒ}	t|ƒdksnt	‚t
|ƒdks~t	‚t|ƒdksŽt	‚t|ƒd	ksžt	‚t|d
ƒ t|| ƒdks¼t	‚d}
d}t
|| ƒ|
ksØt	‚t|| ƒ|ksìt	‚t|| ƒdk�st	‚t|| dƒ t|ƒdk�s"t	‚d}
d}t
|ƒ|
k�s<t	‚t|ƒ|k�sNt	‚t|ƒdk�s`t	‚t|dƒ t|ƒdk�s|t	‚d}
d}t
|ƒ|
k�s–t	‚t|ƒ|k�s¨t	‚t|ƒdk�sºt	‚t|dƒ d}
d}t|	ƒdk�sÞt	‚t
|	ƒ|
k�sðt	‚t|	ƒ|k�st	‚t|	ƒdk�st	‚t|	dƒ d S )Nr[   rM   r   rG   )rN   r   r\   z1(2)z1 
 2z1_{2}zIdentityGate(Integer(2))z1(2)*|10101>z1 *|10101>
 2        u   1 â‹…â�˜10101âŸ©
 2        z!1_{2} {\left|10101\right\rangle }z\Mul(IdentityGate(Integer(2)), Qubit(Integer(1),Integer(0),Integer(1),Integer(0),Integer(1)))zC((3,0),X(1))zC   /X \
 3,0\ 1/u   C   âŽ›X âŽž
 3,0âŽ� 1âŽ zC_{3,0}{\left(X_{1}\right)}z6CGate(Tuple(Integer(3), Integer(0)),XGate(Integer(1)))z	CNOT(1,0)zCNOT   
    1,0z\text{CNOT}_{1,0}zCNotGate(Integer(1),Integer(0))zU 
 0z!U((0,),Matrix([
[a, b],
[c, d]]))zU_{0}zgUGate(Tuple(Integer(0)),ImmutableDenseMatrix([[Symbol('a'), Symbol('b')], [Symbol('c'), Symbol('d')]])))r0   r1   r   r   r   r   r   r   rH   r9   r6   rD   r7   r?   )r]   r^   rV   r_   r`   ÚqÚg1Úg2Zg3Zg4rJ   rK   r=   r=   r>   Ú	test_gateú   sd    


ÿÿÿÿ
ÿÿ
ÿÿÿ
rf   c                  C  s¨  t ƒ } tdƒ}tƒ }ttdtƒƒ}t| ƒdks2t‚t| ƒdksBt‚t	| ƒdksRt‚t
| ƒdksbt‚t| dƒ t|ƒdks|t‚d}d}t|ƒ|ks”t‚t	|ƒ|ks¤t‚t
|ƒdks´t‚t|d	ƒ t|ƒd
ksÎt‚t|ƒd
ksÞt‚t	|ƒd
ksît‚t
|ƒdksþt‚t|dƒ t|ƒdk�st‚d}d}t|ƒ|k�s4t‚t	|ƒ|k�sFt‚t
|ƒdk�sXt‚t|dƒ t| | ƒdk�sxt‚d}d}t| | ƒ|k�s–t‚t	| | ƒ|k�s¬t‚t
| | ƒ�s¾t‚t| | dƒ t| | ƒdk�sât‚d}d}t| | ƒ|k�s t‚t	| | ƒ|k�st‚t
| | ƒ�s(t‚t| | dƒ t| d ƒdk�sLt‚d}d}t| d ƒ|k�sjt‚t	| d ƒ|k�s€t‚t
| d ƒdk�s–t‚t| d dƒ d S )NrG   r   ÚHz\mathcal{H}zHilbertSpace()zC(2)z 2
C z\mathcal{C}^{2}zComplexSpace(Integer(2))ÚFz\mathcal{F}zFockSpace()zL2(Interval(0, oo))z 2
L z4{\mathcal{L}^2}\left( \left[0, \infty\right) \right)z)L2(Interval(Integer(0), oo, false, true))zH+C(2)z     2
H + C u        2
H âŠ• C z>DirectSumHilbertSpace(HilbertSpace(),ComplexSpace(Integer(2)))zH*C(2)z     2
H x C u        2
H â¨‚ C zBTensorProductHilbertSpace(HilbertSpace(),ComplexSpace(Integer(2)))zH**2z x2
H  u	    â¨‚2
H  z{\mathcal{H}}^{\otimes 2}z2TensorPowerHilbertSpace(HilbertSpace(),Integer(2)))r   r   r   r   r2   r,   rH   r9   r6   rD   r7   r?   )Zh1Zh2Zh3Zh4rJ   rK   r=   r=   r>   Útest_hilbertJ  sz    
ÿÿ

ÿÿ
ÿÿÿÿÿÿÿri   c            
      C  sê  t dƒ} ttƒ tƒ ƒ}ttƒ tƒ ƒ}ttddƒtddƒƒ}ttdddƒt	dddƒƒ}tt| d ƒt| d ƒƒ}tt| ƒt| d ƒƒ}tt| d ƒt| ƒƒ}t
|ƒdksªt‚t|ƒdksºt‚t|ƒdksÊt‚t|ƒdksÚt‚t|dƒ t
|ƒd	ksôt‚t|ƒd	k�st‚t|ƒd
k�st‚t|ƒdk�s*t‚t|dƒ t
|ƒdk�sFt‚t|ƒdk�sXt‚t|ƒdk�sjt‚t|ƒdk�s|t‚t|dƒ t
|ƒdk�s˜t‚t|ƒdk�sªt‚t|ƒdk�s¼t‚t|ƒdk�sÎt‚t|dƒ t
|ƒdk�sêt‚d}d}	t|ƒ|k�st‚t|ƒ|	k�st‚t|ƒdk�s(t‚t|dƒ t
|ƒdk�sDt‚d}d}	t|ƒ|k�s^t‚t|ƒ|	k�spt‚t|ƒdk�s‚t‚t|dƒ t
|ƒdk�sžt‚d }d!}	t|ƒ|k�s¸t‚t|ƒ|	k�sÊt‚t|ƒd"k�sÜt‚t|d#ƒ d S )$NrY   rM   ©rM   rM   rG   z	<psi|psi>u   âŸ¨Ïˆâ�˜ÏˆâŸ©z4\left\langle \psi \right. {\left|\psi\right\rangle }z3InnerProduct(Bra(Symbol('psi')),Ket(Symbol('psi')))z<psi;t|psi;t>u   âŸ¨Ïˆ;tâ�˜Ïˆ;tâŸ©z8\left\langle \psi;t \right. {\left|\psi;t\right\rangle }zYInnerProduct(TimeDepBra(Symbol('psi'),Symbol('t')),TimeDepKet(Symbol('psi'),Symbol('t')))z	<1,1|1,1>u   âŸ¨1,1â�˜1,1âŸ©z2\left\langle 1,1 \right. {\left|1,1\right\rangle }zGInnerProduct(JzBra(Integer(1),Integer(1)),JzKet(Integer(1),Integer(1)))z<1,1,j1=1,j2=1|1,1,j1=1,j2=1>u+   âŸ¨1,1,jâ‚�=1,jâ‚‚=1â�˜1,1,jâ‚�=1,jâ‚‚=1âŸ©zR\left\langle 1,1,j_{1}=1,j_{2}=1 \right. {\left|1,1,j_{1}=1,j_{2}=1\right\rangle }zóInnerProduct(JzBraCoupled(Integer(1),Integer(1),Tuple(Integer(1), Integer(1)),Tuple(Tuple(Integer(1), Integer(2), Integer(1)))),JzKetCoupled(Integer(1),Integer(1),Tuple(Integer(1), Integer(1)),Tuple(Tuple(Integer(1), Integer(2), Integer(1)))))z	<x/2|x/2>z / | \ 
/ x|x \
\ -|- /
 \2|2/ u;    â•± â”‚ â•² 
â•± xâ”‚x â•²
â•² â”€â”‚â”€ â•±
 â•²2â”‚2â•± zB\left\langle \frac{x}{2} \right. {\left|\frac{x}{2}\right\rangle }zYInnerProduct(Bra(Mul(Rational(1, 2), Symbol('x'))),Ket(Mul(Rational(1, 2), Symbol('x'))))z<x|x/2>z / | \ 
/  |x \
\ x|- /
 \ |2/ u9    â•± â”‚ â•² 
â•±  â”‚x â•²
â•² xâ”‚â”€ â•±
 â•² â”‚2â•± z8\left\langle x \right. {\left|\frac{x}{2}\right\rangle }zDInnerProduct(Bra(Symbol('x')),Ket(Mul(Rational(1, 2), Symbol('x'))))z<x/2|x>z / | \ 
/ x|  \
\ -|x /
 \2| / u9    â•± â”‚ â•² 
â•± xâ”‚  â•²
â•² â”€â”‚x â•±
 â•²2â”‚ â•± z8\left\langle \frac{x}{2} \right. {\left|x\right\rangle }zDInnerProduct(Bra(Mul(Rational(1, 2), Symbol('x'))),Ket(Symbol('x'))))r0   r   r$   r%   r&   r'   r   r    r   r!   rH   r9   r6   rD   r7   r?   )
rY   Zip1Zip2Zip3Zip4Zip_tall1Zip_tall2Zip_tall3rJ   rK   r=   r=   r>   Útest_innerproduct§  s’    ÿÿ
ÿ


ÿ

ÿÿÿ

ÿÿÿ
ÿÿÿÿ
ÿrk   c            	      C  sö  t dƒ} t dtdƒtjƒ}|  ¡ }tdƒ}tdƒ}tt||ƒ|ƒ||ƒƒ}t	t
ƒ tƒ ƒ}t| ƒdksht‚t| ƒdksxt‚t| ƒdksˆt‚t| ƒdks˜t‚t| dƒ t|ƒdks²t‚d}d}t|ƒ|ksÊt‚t|ƒ|ksÚt‚t|ƒd	ksêt‚t|d
ƒ t|ƒdk�st‚d}d}t|ƒ|k�s t‚t|ƒ|k�s2t‚t|ƒdk�sDt‚t|dƒ t|ƒdk�s`t‚t|ƒdk�srt‚t|ƒdk�s„t‚t|ƒdk�s–t‚t|dƒ t|ƒdk�s²t‚t|ƒdk�sÄt‚t|ƒdk�sÖt‚t|ƒdk�sèt‚t|dƒ d S )NrE   rF   ÚtÚfrY   zOperator(Symbol('A'))zA**(-1)z -1
A  zA^{-1}z'Pow(Operator(Symbol('A')), Integer(-1))z.DifferentialOperator(Derivative(f(x), x),f(x))zk                    /d            \
DifferentialOperator|--(f(x)),f(x)|
                    \dx           /u{                       âŽ›d            âŽž
DifferentialOperatorâŽœâ”€â”€(f(x)),f(x)âŽŸ
                    âŽ�dx           âŽ zTDifferentialOperator\left(\frac{d}{d x} f{\left(x \right)},f{\left(x \right)}\right)zwDifferentialOperator(Derivative(Function('f')(Symbol('x')), Tuple(Symbol('x'), Integer(1))),Function('f')(Symbol('x')))zOperator(B,t,1/2)z$Operator\left(B,t,\frac{1}{2}\right)z0Operator(Symbol('B'),Symbol('t'),Rational(1, 2))z
|psi><psi|u   â�˜ÏˆâŸ©âŸ¨Ïˆâ�˜z4{\left|\psi\right\rangle }{\left\langle \psi\right|}z3OuterProduct(Ket(Symbol('psi')),Bra(Symbol('psi'))))r   r/   r.   ZHalfÚinvr+   r0   r   r*   r   r%   r$   rH   r9   r6   rD   r7   r?   )	r]   r^   rn   rm   rY   r_   ÚoprJ   rK   r=   r=   r>   Útest_operator  sT    
ÿÿ
ÿÿÿ


rp   c                  C  sV   t dƒ} t| ƒdkst‚t| ƒdks(t‚t| ƒdks8t‚t| ƒdksHt‚t| dƒ d S )Nrc   zQExpr(Symbol('q')))r   rH   r9   r6   rD   r7   r?   )rc   r=   r=   r>   Ú
test_qexprA  s    rq   c                  C  s¨   t dƒ} tdƒ}t| ƒdks t‚t| ƒdks0t‚t| ƒdks@t‚t| ƒdksPt‚t| dƒ t|ƒdksjt‚t|ƒdkszt‚t|ƒdksŠt‚t|ƒd	ksšt‚t|d
ƒ d S )NZ0101rS   z|0101>u
   â�˜0101âŸ©z{\left|0101\right\rangle }z2Qubit(Integer(0),Integer(1),Integer(0),Integer(1))z|8>u   â�˜8âŸ©z{\left|8\right\rangle }zIntQubit(8))r   r   rH   r9   r6   rD   r7   r?   )Úq1Úq2r=   r=   r>   Ú
test_qubitJ  s    
rt   c                  C  st  t dƒ} tddƒ}tddƒ}tdddƒ}tdddƒ}tdddƒ}tdddƒ}tdddƒ}tddddd	d
ƒ}tddddddƒ}	t| ƒdksŒt‚d}
d}t	| ƒ|
ks¤t‚t
| ƒ|ks´t‚t| ƒdksÄt‚t| dƒ ttƒdksÞt‚d}
d}t	tƒ|
ksöt‚t
tƒ|k�st‚ttƒdk�st‚ttdƒ ttƒdk�s6t‚d}
d}t	tƒ|
k�sPt‚t
tƒ|k�sbt‚ttƒdk�stt‚ttdƒ t|ƒdk�s�t‚t	|ƒdk�s¢t‚t
|ƒdk�s´t‚t|ƒdk�sÆt‚t|dƒ t|ƒdk�sât‚t	|ƒdk�sôt‚t
|ƒdk�st‚t|ƒdk�st‚t|dƒ t|ƒdk�s4t‚t	|ƒdk�sFt‚t
|ƒd k�sXt‚t|ƒd!k�sjt‚t|d"ƒ t|ƒd#k�s†t‚t	|ƒd#k�s˜t‚t
|ƒd$k�sªt‚t|ƒd%k�s¼t‚t|d&ƒ t|ƒd'k�sØt‚t	|ƒd(k�sêt‚t
|ƒd)k�süt‚t|ƒd*k�st‚t|d+ƒ t|ƒd,k�s*t‚t	|ƒd-k�s<t‚t
|ƒd.k�sNt‚t|ƒd/k�s`t‚t|d0ƒ t|ƒd1k�s|t‚t	|ƒd2k�sŽt‚t
|ƒd3k�s t‚t|ƒd4k�s²t‚t|d5ƒ t|ƒd6k�sÎt‚d7}
d7}t	|ƒ|
k�sèt‚t
|ƒ|k�sút‚t|ƒd8k�st‚t|d9ƒ t|	ƒd:k�s(t‚d;}
d;}t	|	ƒ|
k�sBt‚t
|	ƒ|k�sTt‚t|	ƒd<k�sft‚t|	d=ƒ d S )>NÚLrM   r   )rM   rG   )rM   rG   rN   rG   rN   rO   rP   rQ   ZLzzL 
 zZL_zzJzOp(Symbol('L'))r   z 2
J zJ^2zJ2Op(Symbol('J'))r   zJ 
 zZJ_zzJzOp(Symbol('J'))z|1,0>u	   â�˜1,0âŸ©z{\left|1,0\right\rangle }zJzKet(Integer(1),Integer(0))z<1,0|u	   âŸ¨1,0â�˜z{\left\langle 1,0\right|}zJzBra(Integer(1),Integer(0))z|1,0,j1=1,j2=2>u   â�˜1,0,jâ‚�=1,jâ‚‚=2âŸ©z){\left|1,0,j_{1}=1,j_{2}=2\right\rangle }zrJzKetCoupled(Integer(1),Integer(0),Tuple(Integer(1), Integer(2)),Tuple(Tuple(Integer(1), Integer(2), Integer(1))))z<1,0,j1=1,j2=2|u   âŸ¨1,0,jâ‚�=1,jâ‚‚=2â�˜z){\left\langle 1,0,j_{1}=1,j_{2}=2\right|}zrJzBraCoupled(Integer(1),Integer(0),Tuple(Integer(1), Integer(2)),Tuple(Tuple(Integer(1), Integer(2), Integer(1))))z|1,0,j1=1,j2=2,j3=3,j(1,2)=3>z|1,0,j1=1,j2=2,j3=3,j1,2=3>u)   â�˜1,0,jâ‚�=1,jâ‚‚=2,jâ‚ƒ=3,jâ‚�,â‚‚=3âŸ©z;{\left|1,0,j_{1}=1,j_{2}=2,j_{3}=3,j_{1,2}=3\right\rangle }z©JzKetCoupled(Integer(1),Integer(0),Tuple(Integer(1), Integer(2), Integer(3)),Tuple(Tuple(Integer(1), Integer(2), Integer(3)), Tuple(Integer(1), Integer(3), Integer(1))))z<1,0,j1=1,j2=2,j3=3,j(1,2)=3|z<1,0,j1=1,j2=2,j3=3,j1,2=3|u)   âŸ¨1,0,jâ‚�=1,jâ‚‚=2,jâ‚ƒ=3,jâ‚�,â‚‚=3â�˜z;{\left\langle 1,0,j_{1}=1,j_{2}=2,j_{3}=3,j_{1,2}=3\right|}z©JzBraCoupled(Integer(1),Integer(0),Tuple(Integer(1), Integer(2), Integer(3)),Tuple(Tuple(Integer(1), Integer(2), Integer(3)), Tuple(Integer(1), Integer(3), Integer(1))))zR(1,2,3)z	R (1,2,3)u   â„› (1,2,3)z\mathcal{R}\left(1,2,3\right)z*Rotation(Integer(1),Integer(2),Integer(3))zWignerD(1, 2, 3, 4, 5, 6)z# 1         
D   (4,5,6)
 2,3       zD^{1}_{2,3}\left(4,5,6\right)zOWignerD(Integer(1), Integer(2), Integer(3), Integer(4), Integer(5), Integer(6))zWignerD(1, 2, 3, 0, 4, 0)z 1     
d   (4)
 2,3   zd^{1}_{2,3}\left(4\right)zOWignerD(Integer(1), Integer(2), Integer(3), Integer(0), Integer(4), Integer(0)))r4   r    r   r!   r   r"   r#   rH   r9   r6   rD   r7   r?   r   r   )ZlzÚketÚbraZcketZcbraZcket_bigZcbra_bigZrotZbigdZsmalldrJ   rK   r=   r=   r>   Ú	test_spinY  s¼    

ÿÿ
ÿÿ
ÿÿ




ÿ

ÿ


ÿÿ
ÿÿrx   c            	      C  s$  t dƒ} tƒ }tƒ }t| d ƒ}t| d ƒ}tƒ }tƒ }t|ƒdksHt‚t|ƒdksXt‚t|ƒdksht‚t	|ƒdksxt‚t
|dƒ t|ƒdks’t‚t|ƒdks¢t‚t|ƒdks²t‚t	|ƒd	ksÂt‚t
|d
ƒ t|ƒdksÜt‚d}d}t|ƒ|ksôt‚t|ƒ|k�st‚t	|ƒdk�st‚t
|dƒ t|ƒdk�s4t‚d}d}t|ƒ|k�sNt‚t|ƒ|k�s`t‚t	|ƒdk�srt‚t
|dƒ t|ƒdk�sŽt‚t|ƒdk�s t‚t|ƒdk�s²t‚t	|ƒdk�sÄt‚t
|dƒ t|ƒdk�sàt‚t|ƒdk�sòt‚t|ƒdk�st‚t	|ƒdk�st‚t
|dƒ d S )NrY   rG   z<psi|u   âŸ¨Ïˆâ�˜z{\left\langle \psi\right|}zBra(Symbol('psi'))z|psi>u   â�˜ÏˆâŸ©z{\left|\psi\right\rangle }zKet(Symbol('psi'))z<x/2|z / |
/ x|
\ -|
 \2|u%    â•± â”‚
â•± xâ”‚
â•² â”€â”‚
 â•²2â”‚z!{\left\langle \frac{x}{2}\right|}z%Bra(Mul(Rational(1, 2), Symbol('x')))z|x/2>z| \ 
|x \
|- /
|2/ u%   â”‚ â•² 
â”‚x â•²
â”‚â”€ â•±
â”‚2â•± z!{\left|\frac{x}{2}\right\rangle }z%Ket(Mul(Rational(1, 2), Symbol('x')))z<psi;t|u
   âŸ¨Ïˆ;tâ�˜z{\left\langle \psi;t\right|}z%TimeDepBra(Symbol('psi'),Symbol('t'))z|psi;t>u
   â�˜Ïˆ;tâŸ©z{\left|\psi;t\right\rangle }z%TimeDepKet(Symbol('psi'),Symbol('t')))r0   r$   r%   r&   r'   rH   r9   r6   rD   r7   r?   )	rY   rw   rv   Zbra_tallZket_tallZtbraZtketrJ   rK   r=   r=   r>   Ú
test_stateÜ  sZ    

ÿÿ
ÿÿ

ry   c                  C  sd   t tddƒtddƒƒ} t| ƒdks&t‚t| ƒdks6t‚t| ƒdksFt‚t| ƒdksVt‚t| dƒ d S )NrM   r   z|1,1>x|1,0>z|1,1>x |1,0>u   â�˜1,1âŸ©â¨‚ â�˜1,0âŸ©z>{{\left|1,1\right\rangle }}\otimes {{\left|1,0\right\rangle }}zITensorProduct(JzKet(Integer(1),Integer(1)), JzKet(Integer(1),Integer(0))))r(   r    rH   r9   r6   rD   r7   r?   )Útpr=   r=   r>   Útest_tensorproduct   s    ÿr{   c                  C  sô  t dƒ} tdƒ}tttdƒtdƒ ttt| |ƒ|ƒ| |ƒƒdƒƒtt	d tdƒtdƒ ƒ ƒt
ddƒt
ddƒ  tddƒtdd	ƒ  }tt	d tdƒtdƒ ƒtttd
ƒtdƒ ƒtdƒ ¡ d ƒ ttt	tƒƒ }tddddddƒtttdƒttdƒƒ td
ƒtdƒ ƒt	t ƒ tttt
ddƒƒt
ddƒƒƒ ttdddƒtdddƒ tdd	dƒƒ }tdƒtdƒ tƒ d  ttdtƒƒtƒ   }t|ƒdk�sšt‚d}d}t|ƒ|k�s´t‚t|ƒ|k�sÆt‚t|ƒdk�sØt‚t|dƒ t|ƒdk�sôt‚d}d}t|ƒ|k�st‚t|ƒ|k�s t‚t|ƒdk�s2t‚t|dƒ t|ƒdk�sNt‚d}d}t|ƒ|k�sht‚t|ƒ|k�szt‚t|ƒdk�sŒt‚t|dƒ t|ƒd k�s¨t‚d!}d"}t|ƒ|k�sÂt‚t|ƒ|k�sÔt‚t|ƒd#k�sæt‚t|d$ƒ d S )%Nrm   rY   rE   rF   rN   rG   rM   r   éÿÿÿÿÚCÚDÚErO   rP   rQ   rj   z’(Jz**2)x(Dagger(A) + Dagger(B))*{Dagger(DifferentialOperator(Derivative(f(x), x),f(x)))**3,Dagger(A) + Dagger(B)}*(<1,0| + <1,1|)*(|0,0> + |1,-1>)aó                   /                                      3        \                                 
                 |/                                   +\         |                                 
    2  / +    +\ <|                    /d            \ |   +    +>                                 
/J \ x \A  + B /*||DifferentialOperator|--(f(x)),f(x)| | ,A  + B |*(<1,0| + <1,1|)*(|0,0> + |1,-1>)
\ z/             \\                    \dx           / /         /                                 uY                   âŽ§                                      3        âŽ«                                 
                 âŽªâŽ›                                   â€ âŽž         âŽª                                 
    2  âŽ› â€     â€ âŽž âŽ¨âŽœ                    âŽ›d            âŽž âŽŸ   â€     â€ âŽ¬                                 
âŽ›J âŽž â¨‚ âŽ�A  + B âŽ â‹…âŽªâŽœDifferentialOperatorâŽœâ”€â”€(f(x)),f(x)âŽŸ âŽŸ ,A  + B âŽªâ‹…(âŸ¨1,0â�˜ + âŸ¨1,1â�˜)â‹…(â�˜0,0âŸ© + â�˜1,-1âŸ©)
âŽ� zâŽ              âŽ©âŽ�                    âŽ�dx           âŽ  âŽ          âŽ­                                 aY  {J_z^{2}}\otimes \left({A^{\dagger} + B^{\dagger}}\right) \left\{\left(DifferentialOperator\left(\frac{d}{d x} f{\left(x \right)},f{\left(x \right)}\right)^{\dagger}\right)^{3},A^{\dagger} + B^{\dagger}\right\} \left({\left\langle 1,0\right|} + {\left\langle 1,1\right|}\right) \left({\left|0,0\right\rangle } + {\left|1,-1\right\rangle }\right)aà  Mul(TensorProduct(Pow(JzOp(Symbol('J')), Integer(2)), Add(Dagger(Operator(Symbol('A'))), Dagger(Operator(Symbol('B'))))), AntiCommutator(Pow(Dagger(DifferentialOperator(Derivative(Function('f')(Symbol('x')), Tuple(Symbol('x'), Integer(1))),Function('f')(Symbol('x')))), Integer(3)),Add(Dagger(Operator(Symbol('A'))), Dagger(Operator(Symbol('B'))))), Add(JzBra(Integer(1),Integer(0)), JzBra(Integer(1),Integer(1))), Add(JzKet(Integer(0),Integer(0)), JzKet(Integer(1),Integer(-1))))z3[Jz**2,A + B]*{E**(-2),Dagger(D)*Dagger(C)}*[J2,Jz]ze[    2      ] / -2  +  +\ [ 2   ]
[/J \ ,A + B]*<E  ,D *C >*[J ,J ]
[\ z/       ] \         / [    z]u›   âŽ¡    2      âŽ¤ âŽ§ -2  â€   â€ âŽ« âŽ¡ 2   âŽ¤
âŽ¢âŽ›J âŽž ,A + BâŽ¥â‹…âŽ¨E  ,D â‹…C âŽ¬â‹…âŽ¢J ,J âŽ¥
âŽ£âŽ� zâŽ        âŽ¦ âŽ©         âŽ­ âŽ£    zâŽ¦z]\left[J_z^{2},A + B\right] \left\{E^{-2},D^{\dagger} C^{\dagger}\right\} \left[J^2,J_z\right]a  Mul(Commutator(Pow(JzOp(Symbol('J')), Integer(2)),Add(Operator(Symbol('A')), Operator(Symbol('B')))), AntiCommutator(Pow(Operator(Symbol('E')), Integer(-2)),Mul(Dagger(Operator(Symbol('D'))), Dagger(Operator(Symbol('C'))))), Commutator(J2Op(Symbol('J')),JzOp(Symbol('J'))))z{Wigner3j(1, 2, 3, 4, 5, 6)*[Dagger(B) + A,C + D]x(-J2 + Jz)*|1,0><1,1|*(|1,0,j1=1,j2=1> + |1,1,j1=1,j2=1>)x|1,-1,j1=1,j2=1>a›            [ +          ]  /   2     \                                                                 
/1  3  5\*[B  + A,C + D]x |- J  + J |*|1,0><1,1|*(|1,0,j1=1,j2=1> + |1,1,j1=1,j2=1>)x |1,-1,j1=1,j2=1>
|       |                 \        z/                                                                 
\2  4  6/                                                                                             uç            âŽ¡ â€           âŽ¤  âŽ›   2     âŽž                                                                 
âŽ›1  3  5âŽžâ‹…âŽ£B  + A,C + DâŽ¦â¨‚ âŽœ- J  + J âŽŸâ‹…â�˜1,0âŸ©âŸ¨1,1â�˜â‹…(â�˜1,0,jâ‚�=1,jâ‚‚=1âŸ© + â�˜1,1,jâ‚�=1,jâ‚‚=1âŸ©)â¨‚ â�˜1,-1,jâ‚�=1,jâ‚‚=1âŸ©
âŽœ       âŽŸ                 âŽ�        zâŽ                                                                  
âŽ�2  4  6âŽ                                                                                              aU  \left(\begin{array}{ccc} 1 & 3 & 5 \\ 2 & 4 & 6 \end{array}\right) {\left[B^{\dagger} + A,C + D\right]}\otimes \left({- J^2 + J_z}\right) {\left|1,0\right\rangle }{\left\langle 1,1\right|} \left({{\left|1,0,j_{1}=1,j_{2}=1\right\rangle } + {\left|1,1,j_{1}=1,j_{2}=1\right\rangle }}\right)\otimes {{\left|1,-1,j_{1}=1,j_{2}=1\right\rangle }}aÔ  Mul(Wigner3j(Integer(1), Integer(2), Integer(3), Integer(4), Integer(5), Integer(6)), TensorProduct(Commutator(Add(Dagger(Operator(Symbol('B'))), Operator(Symbol('A'))),Add(Operator(Symbol('C')), Operator(Symbol('D')))), Add(Mul(Integer(-1), J2Op(Symbol('J'))), JzOp(Symbol('J')))), OuterProduct(JzKet(Integer(1),Integer(0)),JzBra(Integer(1),Integer(1))), TensorProduct(Add(JzKetCoupled(Integer(1),Integer(0),Tuple(Integer(1), Integer(1)),Tuple(Tuple(Integer(1), Integer(2), Integer(1)))), JzKetCoupled(Integer(1),Integer(1),Tuple(Integer(1), Integer(1)),Tuple(Tuple(Integer(1), Integer(2), Integer(1))))), JzKetCoupled(Integer(1),Integer(-1),Tuple(Integer(1), Integer(1)),Tuple(Tuple(Integer(1), Integer(2), Integer(1))))))z((C(1)*C(2)+F**2)*(L2(Interval(0, oo))+H)z9// 1    2\    x2\   / 2    \
\\C  x C / + F  / x \L  + H/u[   âŽ›âŽ› 1    2âŽž    â¨‚2âŽž   âŽ› 2    âŽž
âŽ�âŽ�C  â¨‚ C âŽ  âŠ• F  âŽ  â¨‚ âŽ�L  âŠ• HâŽ z»\left(\left(\mathcal{C}^{1}\otimes \mathcal{C}^{2}\right)\oplus {\mathcal{F}}^{\otimes 2}\right)\otimes \left({\mathcal{L}^2}\left( \left[0, \infty\right) \right)\oplus \mathcal{H}\right)a  TensorProductHilbertSpace((DirectSumHilbertSpace(TensorProductHilbertSpace(ComplexSpace(Integer(1)),ComplexSpace(Integer(2))),TensorPowerHilbertSpace(FockSpace(),Integer(2)))),(DirectSumHilbertSpace(L2(Interval(Integer(0), oo, false, true)),HilbertSpace()))))r+   r0   r   r   r   r-   r   r*   r(   r   r   r    r	   rn   r   r   r   r!   r   r   r   r2   r,   r   rH   r9   r6   rD   r7   r?   )rm   rY   Úe1Úe2Ze3Ze4rJ   rK   r=   r=   r>   Útest_big_expr*  sr    vN† ÿÿÿ	ÿÿ

ÿÿÿ

ÿ
ÿÿÿ

ÿÿÿ
r‚   c                  C  s,   t dƒ} t| ƒdkst‚t| ƒdks(t‚d S )Nr]   u    â€ 
a za^{\dagger})r)   r6   r9   r7   )Úadr=   r=   r>   Ú_test_sho1d�  s    r„   N)kÚ__doc__Ú
__future__r   Útypingr   Z$sympy.physics.quantum.anticommutatorr   Zsympy.physics.quantum.cgr   r   r   r   Z sympy.physics.quantum.commutatorr	   Zsympy.physics.quantum.constantsr
   Zsympy.physics.quantum.daggerr   Zsympy.physics.quantum.gater   r   r   r   r   Zsympy.physics.quantum.hilbertr   r   r   r   Z"sympy.physics.quantum.innerproductr   Zsympy.physics.quantum.operatorr   r   r   Zsympy.physics.quantum.qexprr   Zsympy.physics.quantum.qubitr   r   Zsympy.physics.quantum.spinr   r   r   r   r    r!   r"   r#   Zsympy.physics.quantum.stater$   r%   r&   r'   Z#sympy.physics.quantum.tensorproductr(   Zsympy.physics.quantum.sho1dr)   Zsympy.core.functionr*   r+   Zsympy.core.numbersr,   Zsympy.core.powerr-   Zsympy.core.singletonr.   Zsympy.core.symbolr/   r0   Zsympy.matrices.denser1   Zsympy.sets.setsr2   Zsympy.testing.pytestr3   r4   Zsympy.printingr5   Zsympy.printing.prettyr6   rB   Zsympy.printing.latexr7   ZMutableDenseMatrixr8   Ú__annotations__Úexecr?   rD   rL   rU   rW   rX   rZ   rb   rf   ri   rk   rp   rq   rt   rx   ry   r{   r‚   r„   r=   r=   r=   r>   Ú<module>   s|   (








	S
P]`:	 D
W