
    sg3                         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 d dlmZmZmZmZmZmZmZmZ d dlmZ dd	Zd
 Zd Zd Zd Z d Z!ed        Z"ed        Z#y)    )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    t        |       t        |       t        |       t        |       f}|S )N)r   r   r	   r
   )qubitgatess     `/var/www/html/venv/lib/python3.12/site-packages/sympy/physics/quantum/tests/test_circuitutils.pycreate_gate_sequencer      s%    uXqx51U84EL    c                      d} g d}|t        |       k(  sJ d} g d}|t        |       k(  sJ t        d      }t        d      }t        d      }t	        d      }|||||f} g d}|t        |       k(  sJ |||||f} g d}|t        |       k(  sJ y )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q!Q?D%NYt_,,,q!Q?D%NYt_,,,r   c                     t        d      } t        d      }t        d      }t        d      }t        d      }t        d      }t	        d      }t        |      }t        |      }t        |      }	t        |      }
| ||f}t        || f      dk(  sJ t        ||f      dk(  sJ t        ||f      dk(  sJ t        ||f      dk(  sJ t        |t        | |            dk(  sJ t        |t        | ||            dk(  sJ t        |t        ||            dk(  sJ t        t        | | |||f      dk(  sJ t        t        | ||| f      dk(  sJ t        || fdd      dk(  sJ | || ||f}t        t        | t        | ||            dk(  sJ t        || fd      dk(  sJ t        || |fdd      dk(  sJ t        t        | | |fdd      dk(  sJ t        || |fdd	      dk(  sJ t        || |fdd	      dk(  sJ | |||| |||| ||| |||||f}t        || ||||f      d
k(  sJ | ||||	|f}t        ||||	f      dk(  sJ |||	|||
f}|||	f}t        ||      }|dk(  sJ y )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7QD)Q...7RE*b0007QD)Q...7QD)R///7C1I."4447C1aL1Q6667C1I.!3333=1aA,72===3=1a)4:::7QDq9R???!Q1oG3=#aA,71<<<7QD2a7777QF!;rAAA3=1a&qARGGG7QF!;q@@@7QF!;q@@@!QAq!Q1b!Q2q"G7Q1a$45;;;!T4q)G7T4$671<<<T4tT2Gd#JWj1FQ;;r   c                     t        d      } t        d      }t        d      }t        d      }t	        dd      }t        dt        d            }||| | f}||| f}t        |t        |       | fk(  sJ t        ||| fz         dk(  sJ t        ||d      |k(  sJ t        ||d      | fk(  sJ t        || | fd      ||fk(  sJ t        ||f      |k(  sJ | || ||f}| ||f}t        t        | t        |       | |fk(  sJ | || |f}t        ||      |fk(  sJ | ||||f}| ||f}t        |t        | d      ||fk(  sJ t        ||d      |k(  sJ ||f}t        ||      |k(  sJ ||||f}t        ||      | fk(  sJ || f}t        |||      }	|	| || fk(  sJ | ||| ||f}| |f}||f}t        ||t        |       }	|	|||| ||fk(  sJ t        |||d	      }	|	| |||||fk(  sJ y )
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   [   s   	!A	!A	!A	!A1:DD!A$G !QlGAYFgsF|4<<<gv}5;;;gv15@@@gv15!===g1v15!Q???gt,777!Q1oGAYFc7mS&\:q!fDDDAq\Fgv.1$666!Wa&GG_FgsF|<D	IIIgv15@@@VFgv.'999!T"Fgv.1$666!fG$&FaAY!Q1a GVFWoG '],FdGQ1a0000$!-FaAtWa0000r   c                     t               \  } }}}t        d      }|t        d      i}t        | f      \  }}}}	|t	        |      fk(  sJ ||k(  sJ t	        |      t        |      t        |      t        |      f}
|t        d      i}t        | |||f      \  }}}}	||
k(  sJ ||k(  sJ t        d      \  }}}}t        d      }t	        |      t        |      t        |      t        |      f}
|t        d      i}t        ||||f      \  }}}}	||
k(  sJ ||k(  sJ t	        |      t        |      t        |      t        |      t	        |      t        |      t        |      t        |      f}
|t        d      |t        d      i}t        | |||||||f      \  }}}}	||
k(  sJ ||k(  sJ |t        d      |t        d      i}t        t        ||||| |||            \  }}}}	||
k(  sJ ||k(  sJ t	        |      t	        |      t        |      t        |      t        |      t        |      t        |      t        |      f}
|t        d      |t        d      i}t        t        | |||||||            \  }}}}	||
k(  sJ ||k(  sJ |t        d      |t        d      i}t        || ||||||f      \  }}}}	||
k(  sJ ||k(  sJ t        dd      }t        dd      }t        dt        d            }t        dt        d            }t	        |      t	        |      t        |      t        |      t        |      t        |      t        |      t        |      t        ||      t        ||      t        |t        |            t        |t        |            f}
|t        d      |t        d      i}| |||||||||||f}t        |      \  }}}}	||
k(  sJ ||k(  sJ || ||||||||||f}t	        |      t	        |      t        |      t        |      t        |      t        |      t        |      t        |      t        ||      t        ||      t        |t        |            t        |t        |            f}
|t        d      |t        d      i}t        |      \  }}}}	||
k(  sJ ||k(  sJ ||||f}t        ||      t        |      t        |t        |            t        |      f}
|t        d      |t        d      i}t        |      \  }}}}	||
k(  sJ ||k(  sJ ||||f}|t        d      |t        d      i}t        |      \  }}}}	||
k(  sJ ||k(  sJ ||||f}t        ||      t        |      t        |t        |            t        |      f}
|t        d      |t        d      i}t        |      \  }}}}	||
k(  sJ ||k(  sJ t        d      }t        dt        dt        d                  }t        dt        dt	        d                  }||f}t        |t        |t        |                  t        |t        |t	        |                  f}
|t        d      |t        d      |t        d      i}t        |      \  }}}}	||
k(  sJ ||k(  sJ |t        d      i}t        dd      }t        ||||	      \  }}}}	||
k(  sJ ||k(  sJ t        d
      }t        dt	        d            }|t        d      |t        d      |t        d      |t        d      i}t        |||ft	        |            f}
|f}t        |      \  }}}}	||
k(  sJ ||k(  sJ y )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   ')LQ1a	B71:G!<aT!BFGT3aeXg"quaeQrU+H71:G!<aAq\!JFGT3Xg+A.RR	B"quaeQrU+H71:G!<b"b"=M!NFGT3Xg"quaeQrUAbE1R5!B%2GH71:r71:.G!<aAq)+RR>9 ":FGT3Xg71:r71:.G!<SR)+RAq!>= ">FGT3Xg"quaeQrUAbE1R5!B%2GH71:r71:.G!<SB)*B2q">> "?FGT3Xg71:r71:.G!<b!R)+QA>7 "8FGT3Xg1ajG1ajGq!A$Jq!A$J"quaeQrUAbE1R5"qud2rlDRLb!B% %AbE"24H 71:r71:.Gr1b!RB
$D!<T!BFGT3Xg2q"aQ
$D"quaeQrUAbE1R5"qud2rlDRLb!B% %AbE"24H 71:r71:.G!<T!BFGT3XgQ
A&DRaeU2qu%5qu=H71:r71:.G!<T!BFGT3XgRR(D71:r71:.G!<T!BFGT3XgRR(DRaeU2qu%5qu=H71:r71:.G!<T!BFGT3Xg	BQa1'HQa1'HhDb%AbE*+U2uR27G-HIH71:r71:r71:>G!<T!BFGT3Xg71:G 15I!<T3:/1-6"8FGT3 Xg	B)QqT*M71:r71:71:r71:/Gr2rlAbE*,HD!<T!BFGT3Xgr   c            
         t        d      } t        d      }t               \  }}}}t        |       }t        |       }t	        |       }| di}	|||f}
|||f}t        |
|	      }||k(  sJ t        dd      }t        dd      }t        dt	        d            }t        dt	        d            }t        ||       }t        | |      }t        |t	        |             }| d|di}	|f}
|f}t        |
|	      }||k(  sJ |f}
|f}t        |
|	      }||k(  sJ |f}
|f}t        |
|	      }||k(  sJ | d|di}	|f}
|f}t        |
|	      }||k(  sJ t        d      }t        | t        |t	        |                  }t        |t        |t        |                   }| d|d|di}	||f}
t        dt        dt	        d                  t        dt        dt        d                  f}t        t        |
 |	      }||k(  sJ | d|d|di}	||f}
t        dt        dt        d                  t        dt        dt	        d                  f}t        |
|	      }||k(  sJ y )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     s   	B	B')LQ1aR5DR5DR5DQI$D1ayH$T95FX1ajG1ajGq!A$Jq!A$Jb"Jb"J"ae$MQAI=DzH$T95FXD}H$T95FX=DzH$T95FXQAID}H$T95FX	BRr1R5)*HRr1R5)*HQAr1%IhDaq!A$(%5AaD>*BCH$S$Z;FXQAr1%IhDaq!A$(%5AaD>*BCH$T95FXr   c            
         t        d      } t        d      }t        d      }t        d      }t	        dd      }t        dt        d            }| ||g}t        t        |dd            }| ||||f}t        |g       |k(  sJ t        ||      |k(  sJ g d}	| ||| ||f}t        |||	      | ||fk(  sJ | | ||||f}t        |||	      | | ||fk(  sJ g d}	t        |||	      ||||fk(  sJ | |||||g}t        t        |d	d            }d
g}	| |||||||||f
}| |||||f}
t        |||	      |
k(  sJ t        | }t        |||	      |
k(  sJ y )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  s   	!A	!A	!A	!A1:DD!A$GAq	I
"9a1=
>C!Q4 G"%000#&'111
C!Q1a G#C0Q1I===!Q1a G#C0Q1aL@@@
C#C0Q1aL@@@Aq!T7+I
"9a1=
>C$C!Q1aGQ5G1a!T*H#C0H<<<7mG#C0H<<<r   c            	      F   t        d      } t        d      }t        d      }t        d      }t	        dd      }t        dt        d            }| | fg}||f}d\  }}	t        ||||	g      }
|
| | ||fk(  sJ | |||f}||f| ||fg}| | |||||f}d\  }}	t        ||||	g      }
|
|k(  sJ | |||||g}t        t        |dd	            }t        |      }| ||||f}| || || ||||f	}d
\  }}	t        ||||	g      }
|
|k(  sJ t        | }t        ||||	g      }
|
|k(  sJ y )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  s   	!A	!A	!A	!A1:DD!A$G1vhG!fGKC7G3-@FaAq\!!!!QlG1v1ay!G1aAq!$HKC7G3-@FXAq!T7+I
"9a1=
>CF!Qg&G1aAq!T73HKC7F#v?FX7mG7F#v?FX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   