
    g3                         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#dS )    )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     i/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/physics/quantum/tests/test_circuitutils.pycreate_gate_sequencer      s-    uXXqxx51U884EL    c                  j   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 d S )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 d S )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R55DR55DR55DR55D!QiG7QD))Q....7RE**b00007QD))Q....7QD))R////7C1II.."44447C1aLL11Q66667C1II..!33333=1aA,772====3=1a)44::::7QDq999R????!Q1oG3=#aA,,771<<<<7QD222a77777QF!;;;rAAAA3=1a&qAAARGGGG7QF!;;;q@@@@7QF!;;;q@@@@!QAq!Q1b!Q2q"G7Q1a$455;;;;!T4q)G7T4$6771<<<<T4tT2Gd#JWj1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 d S )
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4<<<<gv}55;;;;gv1555@@@@gv1555!====g1v1555!Q????gt,,7777!Q1oGAYFc7mS&\::q!fDDDDAq\Fgv..1$6666!Wa&GG_FgsF|<<<D	IIIIgv1555@@@@VFgv..'9999!T"Fgv..1$6666!fG$& & &FaAY!Q1a GVFWoG '], , ,FdGQ1a00000$!- - -FaAtWa0000000r   c                  T   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 d S )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!BFGT3aeeXg"quuaeeQrUU+H71::G!<aAq\!J!JFGT3Xg+A..RR	B"quuaeeQrUU+H71::G!<b"b"=M!N!NFGT3Xg"quuaeeQrUUAbEE1R55!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uuaeeQrUUAbEE1R55!B%%2GH71::r71::.G!<SB)*B2q">> >> "? "?FGT3Xg71::r71::.G!<b!R)+QA>7 "8 "8FGT3Xg1ajjG1ajjGq!A$$Jq!A$$J"quuaeeQrUUAbEE1R55"quud2rllDRLLb!B%%  %AbEE"2"24H 71::r71::.Gr1b!RB
$D!<T!B!BFGT3Xg2q"aQ
$D"quuaeeQrUUAbEE1R55"quud2rllDRLLb!B%%  %AbEE"2"24H 71::r71::.G!<T!B!BFGT3XgQ
A&DRaeeU2quu%5%5quu=H71::r71::.G!<T!B!BFGT3XgRR(D71::r71::.G!<T!B!BFGT3XgRR(DRaeeU2quu%5%5quu=H71::r71::.G!<T!B!BFGT3Xg	BQa1''HQa1''HhDb%AbEE**++U2uR27G7G-H-HIH71::r71::r71::>G!<T!B!BFGT3Xg71::G 1555I!<T3:/1-6"8 "8 "8FGT3 Xg	B)QqTT**M71::r71::71::r71::/Gr2rlAbEE**,HD!<T!B!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 d S )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R55DR55DR55DQI$D1ayH$T955FX1ajjG1ajjGq!A$$Jq!A$$Jb"Jb"J"aee$$MQAI=DzH$T955FXD}H$T955FX=DzH$T955FXQAID}H$T955FX	BRr1R55))**HRr1R55))**HQAr1%IhDaq!A$$((%5AaDD>>*B*BCH$S$Z;;FXQAr1%IhDaq!A$$((%5AaDD>>*B*BCH$T955FXr   c            
      J   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 d S )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0#&&'1111


C!Q1a G#C000Q1I====!Q1a G#C000Q1aL@@@@
++C#C000Q1aL@@@@Aq!T7+I
"9a1===
>
>C$C!Q1aGQ5G1a!T*H#C000H<<<<7mG#C000H<<<<<<r   c            	         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 d S )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      s         & & & & & & $ $ $ $ $ $ , , , , , , > > > > > > > > > > > > > > > > D D D D D D                    & % % % % %   
- - -0- - -`/1 /1 /1d{ { {|= = =@ != != !=H ! ! ! ! !r   