
    \h3                         S SK Jr  S SKJr  S SKJr  S SKJr  S SK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  S SKJr  SS	 jrS
 rS rS rS r S r!\S 5       r"\S 5       r#g)    )Mul)Integer)Symbol)numbered_symbols)XYZHCNOTCGate)bfs_identity_search)	kmp_tablefind_subcircuitreplace_subcircuitconvert_to_symbolic_indicesconvert_to_real_indicesrandom_reducerandom_insertflatten_ids)slowc                 Z    [        U 5      [        U 5      [        U 5      [        U 5      4nU$ )N)r   r   r	   r
   )qubitgatess     e/var/www/auris/envauris/lib/python3.13/site-packages/sympy/physics/quantum/tests/test_circuitutils.pycreate_gate_sequencer      s%    uXqx51U84EL    c                      Sn / SQnU[        U 5      :X  d   eSn / SQnU[        U 5      :X  d   e[        S5      n[        S5      n[        S5      n[	        S5      nX#X2U4n / SQnU[        U 5      :X  d   eX"X5U4n / SQnU[        U 5      :X  d   eg )N)abcdr   r   r!   )r   r   r   r         )PARTICr)   r%   r&   r(   E r)   Nr,   r%   r&   r'   r&   r*   r
   Ur(   r+   )r"   r   r   r   r   r   r   r   r#   r$   r   r   r   r   r   r   r#   r$      r   r   r   r   r   r   )r"   r   r   r   r#   )r"   r   r#   r   r   )r   r   r   r	   r
   )wordexpected_tablexyzhs         r   test_kmp_tabler6      s    .D+NYt_,,,HD:NYt_,,,	!A	!A	!A	!A!?D%NYt_,,,!?D%NYt_,,,r   c                  x   [        S5      n [        S5      n[        S5      n[        S5      n[        S5      n[        S5      n[	        S5      n[        U5      n[        U5      n[        U5      n	[        U5      n
XU4n[        X45      S:X  d   e[        X45      S:X  d   e[        X45      S:X  d   e[        X45      S:X  d   e[        U[        X5      5      S:X  d   e[        U[        XU5      5      S:X  d   e[        U[        X5      5      S:X  d   e[        [        U6 XX#45      S:X  d   e[        [        U6 X!U 45      S:X  d   e[        X4SSS9S:X  d   eXXU4n[        [        U6 [        XU5      5      S:X  d   e[        X4SS9S:X  d   e[        XU4SSS9S:X  d   e[        [        U6 X4SSS9S:X  d   e[        XU4SS	S9S:X  d   e[        XU4SS	S9S:X  d   eXX$XX#XUXX#XS4n[        XXX545      S
:X  d   eXXxX4n[        XX45      S:X  d   eXxXX4nXxU	4n[        X5      nUS:X  d   eg )Nr   r#   i0r"   r$   )startend)r9   r/         )r   r   r	   r
   r   r   r   )r2   r3   r4   r5   x1y1r8   x_i0y_i0z_i0h_i0circuit
subcircuitresults                 r   test_find_subcircuitrF   +   s   	!A	!A	!A	!A	
1B	
1B	BR5DR5DR5DR5DQiG7D)Q...7E*b0007D)Q...7D)R///7CI."4447CaL1Q6667CI.!3333=1,72===3=1)4:::7Dq9R???Q1oG3=#aA,71<<<7D2a7777F!;rAAA3=1&qARGGG7F!;q@@@7F!;q@@@QA!bQ2"G7a$45;;;T)G74$671<<<4t2Gd#JW1FQ;;r   c                  l   [        S5      n [        S5      n[        S5      n[        S5      n[	        SS5      n[        S[        S5      5      nX!X 4nX!U 4n[        U[        U6 5      U 4:X  d   e[        XgU 4-   5      S:X  d   e[        XgSS9U:X  d   e[        XgSS9U 4:X  d   e[        X`U 4SS9X!4:X  d   e[        Xc45      U:X  d   eXXU4nXU4n[        [        U6 [        U6 5      X4:X  d   eXX4n[        Xg5      U4:X  d   eXXSU4nXU4n[        U[        U6 SS9X44:X  d   e[        XgSS9U:X  d   eX34n[        Xg5      U:X  d   eX5X44n[        Xg5      U 4:X  d   eX04n[        XgUS9n	XX04:X  d   eXX0X4nX4nXE4n[        Xg[        U6 S9n	XXSXU4:X  d   e[        XgUSS	9n	XXXEU4:X  d   eg )
Nr   r#   r    )posr$   r"   )replace)rK   rJ   )r   r   r	   r
   r   r   r   r   )
r2   r3   r4   r5   cnotcgate_zrC   removerK   actuals
             r   test_replace_subcircuitrP   [   sD   	!A	!A	!A	!A1:DD!A$G QlGAYFgsF|4<<<g}5;;;g15@@@g15!===g1v15!???gt,777Q1oGAYFc7mS&\:qfDDDA\Fg.1$666W&GG_FgsF|<	IIIg15@@@VFg.'999!"Fg.1$666fG$&FYQ1 GVFoG '],FGa0000$!-Fta0000r   c                  2   [        5       u  pp#[        S5      nU[        S5      0n[        U 45      u  pgpU[	        U5      4:X  d   eXu:X  d   e[	        U5      [        U5      [        U5      [        U5      4n
U[        S5      0n[        XX#45      u  pgpXj:X  d   eXW:X  d   e[        S5      u  pp[        S5      n[	        U5      [        U5      [        U5      [        U5      4n
U[        S5      0n[        XX45      u  pgpXj:X  d   eXu:X  d   e[	        U5      [        U5      [        U5      [        U5      [	        U5      [        U5      [        U5      [        U5      4n
U[        S5      U[        S5      0n[        XX#XX45      u  pgpXj:X  d   eXu:X  d   eU[        S5      U[        S5      0n[        [        XXXX#5      5      u  pgpXj:X  d   eXu:X  d   e[	        U5      [	        U5      [        U5      [        U5      [        U5      [        U5      [        U5      [        U5      4n
U[        S5      U[        S5      0n[        [        XXX-X>5      5      u  pgpXj:X  d   eXu:X  d   eU[        S5      U[        S5      0n[        XXXX45      u  pgpXj:X  d   eXu:X  d   e[        SS5      n[        SS5      n[        S[        S5      5      n[        S[        S5      5      n[	        U5      [	        U5      [        U5      [        U5      [        U5      [        U5      [        U5      [        U5      [        X5      [        XO5      [        U[        U5      5      [        U[        U5      5      4n
U[        S5      U[        S5      0nXXX-X>UUUU4n[        U5      u  pgpXj:X  d   eXu:X  d   eXXXXUUUU4n[	        U5      [	        U5      [        U5      [        U5      [        U5      [        U5      [        U5      [        U5      [        XO5      [        X5      [        U[        U5      5      [        U[        U5      5      4n
U[        S5      U[        S5      0n[        U5      u  pgpXj:X  d   eXu:X  d   eUUUU4n[        XO5      [        U5      [        U[        U5      5      [        U5      4n
U[        S5      U[        S5      0n[        U5      u  pgpXj:X  d   eXu:X  d   eUUUU4nU[        S5      U[        S5      0n[        U5      u  pgpXj:X  d   eXu:X  d   eUUUU4n[        XO5      [        U5      [        U[        U5      5      [        U5      4n
U[        S5      U[        S5      0n[        U5      u  pgpXj:X  d   eXu:X  d   e[        S5      n[        S[        S[        S5      5      5      n[        S[        S[	        S5      5      5      nUU4n[        U[        U[        U5      5      5      [        U[        U[	        U5      5      5      4n
U[        S5      U[        S5      U[        S5      0n[        U5      u  pgpXj:X  d   eXu:X  d   eU[        S5      0n[        SSS9n[        UUUUS	9u  pgpXj:X  d   eXu:X  d   e[        S
5      n[        S[	        S5      5      nU[        S5      U[        S5      U[        S5      U[        S5      0n[        XOU4[	        U5      5      4n
U4n[        U5      u  pgpXj:X  d   eXu:X  d   eg )Nr8   r   r#   i1i2r$   i)prefixr9   )	qubit_mapr9   geni3)r/   r$   r#   r/   )r   r   r   r   r   r   r	   r
   r   r   r   r   )r2   r3   r4   r5   r8   exp_maprO   act_mapsndxrW   expectedr=   r>   z1h1rR   cnot_10cnot_01
cgate_z_10
cgate_z_01argsrS   ccgate_zccgate_xndx_map	index_genrX   cgate_x0_c321s                               r    test_convert_to_symbolic_indicesri      s   ')LQ1	B71:G!<aT!BFTaeX"quaeQrU+H71:G!<aA\!JFT+A.RR	B"quaeQrU+H71:G!<bb=M!NFT"quaeQrUAbE1R5!B%2GH71:r71:.G!<aA)+>9 ":FT71:r71:.G!<S)+q>= ">FT"quaeQrUAbE1R5!B%2GH71:r71:.G!<S)*q>> "?FT71:r71:.G!<bR)+>7 "8FT1ajG1ajGq!A$Jq!A$J"quaeQrUAbE1R5"qud2lDLb!B% %AbE"24H 71:r71:.G1!
$D!<T!BFT2"
$D"quaeQrUAbE1R5"qud2lDLb!B% %AbE"24H 71:r71:.G!<T!BFTQ
A&DRaeU2qu%5qu=H71:r71:.G!<T!BFTRR(D71:r71:.G!<T!BFTRR(DRaeU2qu%5qu=H71:r71:.G!<T!BFT	BQa1'HQa1'HhDb%AbE*+U2uR27G-HIH71:r71:r71:>G!<T!BFT71:G 15I!<T3:/1-6"8FT 	B)QqT*M71:r71:71:r71:/GrrlAbE*,HD!<T!BFTr   c            
         [        S5      n [        S5      n[        5       u  p#pE[        U 5      n[        U 5      n[	        U 5      nU S0n	XU4n
XCU4n[        X5      nX:X  d   e[        SS5      n[        SS5      n[        S[	        S5      5      n[        S[	        S5      5      n[        X5      n[        X5      n[        U[	        U 5      5      nU SUS0n	U4n
U4n[        X5      nX:X  d   eU4n
U4n[        X5      nX:X  d   eU4n
U4n[        X5      nX:X  d   eU SUS0n	U4n
U4n[        X5      nX:X  d   e[        S5      n[        U [        U[	        U5      5      5      n[        U[        U[        U 5      5      5      nU SUSUS0n	UU4n
[        S[        S[	        S5      5      5      [        S[        S[        S5      5      5      4n[        [        U
6 U	5      nX:X  d   eU SUSUS0n	UU4n
[        S[        S[        S5      5      5      [        S[        S[	        S5      5      5      4n[        X5      nX:X  d   eg )Nr8   rR   r   r#   rS   r$   )	r   r   r   r   r	   r   r   r   r   )r8   rR   r2   r3   r4   r5   r?   r@   rA   rV   rc   r\   rO   r_   r`   ra   rb   
cnot_i1_i0
cnot_i0_i1cgate_z_i1_i0rS   rd   re   s                          r   test_convert_to_real_indicesrn     sh   	B	B')LQ1R5DR5DR5DQIDayH$T5F1ajG1ajGq!A$Jq!A$JbJbJ"ae$MQAI=DzH$T5FD}H$T5F=DzH$T5FQAID}H$T5F	BRr1R5)*HRr1R5)*HQAr1%IhDaq!A$(%5AaD>*BCH$S$Z;FQAr1%IhDaq!A$(%5AaD>*BCH$T5Fr   c            
      N   [        S5      n [        S5      n[        S5      n[        S5      n[	        SS5      n[        S[        S5      5      nXU/n[        [        USSS95      nXX2U4n[        U/ 5      U:X  d   e[        X5      U:X  d   e/ SQn	XX X4n[        XU	S9XU4:X  d   eX XX"4n[        XU	S9X X4:X  d   e/ SQn	[        XU	S9XX"4:X  d   eXX#XE/n[        [        US	SS95      nS
/n	XX!X1X5X44
nXX%X44n
[        XU	S9U
:X  d   e[        U6 n[        XU	S9U
:X  d   eg )Nr   r#   rH   r;   	max_depth)r$   r<   	   r/      seed)      r   r$      )
r   r   r	   r
   r   r   listr   r   r   )r2   r3   r4   r5   rL   rM   	gate_listidsrC   seqr\   s              r   test_random_reducer}   K  su   	!A	!A	!A	!A1:DD!A$Gq	I
"9a1=
>CQ4 G"%000&'111
CQ1 GC0Q1I===Q1 GC0Q1L@@@
CC0Q1L@@@qT+I
"9a1=
>C$CQ1Q5Ga!*HC0H<<<7mGC0H<<<r   c            	         [        S5      n [        S5      n[        S5      n[        S5      n[	        SS5      n[        S[        S5      5      nX 4/nX4nSu  p[        XvX/S9n
XXU4:X  d   eXX#4nX34XU4/nX XXU4nSu  p[        XvX/S9n
X:X  d   eXX#XE/n[        [        USSS	95      n[        U5      nXX4U4nXXXX4U4	nS
u  p[        X~X/S9n
X:X  d   e[        U6 n[        X~X/S9n
X:X  d   eg )Nr   r#   rH   )r   r   rt   )r#   r#   r$   r;   rp   )r#      )r   r   r	   r
   r   r   r   ry   r   r   r   )r2   r3   r4   r5   rL   rM   choicesrC   locchoicerO   r\   rz   r{   eq_idss                  r   test_random_insertr   p  sJ   	!A	!A	!A	!A1:DD!A$GvhGfGKC73-@Fq\!!!QlGvay!GaA!$HKC73-@FqT+I
"9a1=
>CFQg&GaA!73HKC7#?F7mG7#?Fr   NrH   )$sympy.core.mulr   sympy.core.numbersr   sympy.core.symbolr   sympy.utilitiesr   sympy.physics.quantum.gater   r   r	   r
   r   r   $sympy.physics.quantum.identitysearchr   "sympy.physics.quantum.circuitutilsr   r   r   r   r   r   r   r   sympy.testing.pytestr   r   r6   rF   rP   ri   rn   r}   r   rI   r   r   <module>r      sz     & $ , > > D   &
-0-`/1d{|=@ != !=H ! !r   