
    \hQE                         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JrJr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 r#S r$S r%S r&S r'g)    )import_module)Mul)Integer)Dagger)	XYZHCNOTIdentityGateCGate	PhaseGateTGate)generate_gate_rulesgenerate_equivalent_idsGateIdentitybfs_identity_searchis_scalar_sparse_matrixis_scalar_nonsparse_matrixis_degenerateis_reducible)skipc                 Z    [        U 5      [        U 5      [        U 5      [        U 5      4nU$ )N)r   r   r	   r
   )qubitgatess     g/var/www/auris/envauris/lib/python3.13/site-packages/sympy/physics/quantum/tests/test_identitysearch.pycreate_gate_sequencer      s%    uXqx51U84EL    c                  B   [        5       u  pp#[        S5      n[        S[        S5      5      n[	        U 45      U 4S41:X  d   eX 4S4U 4U 441n[	        X 45      U:X  d   eXU 4S4XU 4S4X U4S4X4U 44X4U 44U4X 441n[	        XU 45      U:X  d   eXU4S4XU 4S4X U4S4SXU44SXU44SX!U 44U 4X!44X4U 44U4X44X 4U44U4X44X4U441n[	        XU45      nXv:X  d   eSX2X44SXX!44SXX244SX!X44U4X!U 44U 4X2U44U4XU44U4XU44X04X!44X4X244X4X44X#4X44X0U4U44XU4U44XU4U 44X#U 4U44X0X4S4XX#4S4XX04S4X#X4S41n[	        XX#45      nXv:X  d   eSUS-  US-  U 44SUS-  XS-  44SXS-  US-  44U4US-  U 44U4XS-  44U 4US-  US-  44XP4US-  44XE4U 44X4US-  44XPU4S4XEU 4S4XU4S41n[	        XU45      nXv:X  d   e[        S5      US-  US-  -  U -  4[        S5      US-  U -  US-  -  4[        S5      XS-  -  US-  -  4XTS-  U -  4X@US-  -  4XS-  US-  -  4XP-  US-  4XE-  U 4X-  US-  4XP-  U-  [        S5      4XE-  U -  [        S5      4X-  U-  [        S5      41n[	        XU4SS9nXv:X  d   eg )Nr       Treturn_as_muls)r   r   r   r   r   r   )xyzhphcgate_t
gate_rulesactuals           r   test_generate_gate_rules_1r-      s   ')LQ1	1BAuQx Gt$1$44462,taTl$Jv&*444!9b/ay"oay"ovtnvtntaVn&J ay)Z777!9b/Q1Ir?aAYOA!9oQ1IaAYtaVnvtntaVnvtntaVnvtnFJ !!+F 
aA\R!.aA\0B
qQl	qdQ1I.!ay0A$q		aTA!9-/?&1&	QFQF+qfqf-=)aT	aAY-q	A4/@)aT	aA\2.!r0B,	qQlB/1J !!.F"rBx34BHa278A}b2h78zBHa=1uqB-01tgmR"X67|b2h[1}qd+w2 01B',Q',w',.J !!!12F1:w}R"X5a78qz28A:gm#;<qz1r]?28#;<R
+Wr]?+B-R01y"r(+z1otWr]+y|WQZ0z!|WQZ0tG|WQZ02J !!!1$GFr   c                  v   [        5       u  pp#[        S5      n[        S[        S5      5      nU [	        S5      41n[        U 4SS9U:X  d   e[	        S5      [	        S5      41n[        X -  SS9U:X  d   eS1n[        X -  SS9U:X  d   eX-  U -  [	        S5      4U[	        S5      4X-  U 4X-  U 41n[        X-  U -  SS9U:X  d   eX-  U-  [	        S5      4X-  U -  [	        S5      4X -  U-  [	        S5      4[	        S5      X-  U-  4[	        S5      X-  U-  4[	        S5      X!-  U -  4XU-  4X-  U 4XU-  4X -  U4X!U -  4X-  U41n[        X-  U-  SS9nX:X  d   e[	        S5      X2-  U-  U -  4[	        S5      X-  U-  U-  4[	        S5      X-  U-  U-  4[	        S5      X!-  U -  U-  4X2U-  U -  4XU-  U-  4XU-  U-  4X!U -  U-  4X0-  X!-  4X#-  X-  4X-  X2-  4X-  X-  4X0-  U-  U4X-  U-  U4X-  U-  U 4X#-  U -  U4X0-  U-  U-  [	        S5      4X-  U-  U-  [	        S5      4X-  U-  U -  [	        S5      4X#-  U -  U-  [	        S5      41n[        X-  U-  U-  SS9nX:X  d   e[	        S5      US-  US-  -  U -  4[	        S5      US-  U -  US-  -  4[	        S5      XS-  -  US-  -  4XTS-  U -  4X@US-  -  4XS-  US-  -  4XP-  US-  4XE-  U 4X-  US-  4XP-  U-  [	        S5      4XE-  U -  [	        S5      4X-  U-  [	        S5      41n[        X-  U-  SS9nX:X  d   eSUS-  US-  U 44SUS-  XS-  44SXS-  US-  44U4US-  U 44U4XS-  44U 4US-  US-  44XP4US-  44XE4U 44X4US-  44XPU4S4XEU 4S4XU4S41n[        X-  U-  5      nX:X  d   eg )	Nr   r    Tr#   )r!   r!   Fr"   r!   )r   r   r   r   r   r   )	r%   r&   r'   r(   r)   r*   expectedr+   r,   s	            r   test_generate_gate_rules_2r0   X   s   ')LQ1	1BAuQx G GAJ HtD9XEEEWQZ()Hqs48HDDDzHqs59XEEE3q5'!*%'!*osAhsAh J qs1uT:jHHH3q5'!*%s1ugaj)s1ugaj)qz13q5)qz13q5)qz13q5)A#hsAhA#hsAhA#hsAh J !Qt<F1:qs1uQw'qz13q57+qz13q57+qz13q57+A#a%j1c!e*A#a%j1c!e*sACj13*sACj13*s1uaj13q5!*s1uaj13q5!*s1uQw
+s1uQw
+s1uQw
+s1uQw
+-J !Qq>F1:w}R"X5a78qz28A:gm#;<qz1r]?28#;<R
+Wr]?+B-R01y"r(+z1otWr]+y|WQZ0z!|WQZ0tG|WQZ02J !gdCF"rBx34BHa278A}b2h78zBHa=1uqB-01tgmR"X67|b2h[1}qd+w2 01B',Q',w',.J !g.Fr   c                     [        5       u  pp#[        U 45      U 41:X  d   e[        X 45      X 41:X  d   e[        X45      X4X41:X  d   eXU4nXU4XU 4X U4X!U 4XU4XU41n[        U5      U:X  d   e[        XU5      [        XU 5      [        X U5      [        X!U 5      [        XU5      [        XU5      1n[        USS9U:X  d   eXX#4nXX#4XX04X0X4X2X4X!X4XX24X#X4XX!41n[        U5      U:X  d   eXX4nXX4XX41n[        U5      U:X  d   e[        SU5      nXX4nXX4XaXa41n[        U5      U:X  d   e[	        SS5      n[        S[        S5      5      nXsX4nXsX4X8X74X7X84XXs41n[        U5      U:X  d   eg )NTr#   r    r    r   r   )r   r   r   r   r   r	   )	r%   r&   r'   r(   gate_seqgate_idscgate_ycnotcgate_zs	            r   test_generate_equivalent_ids_1r9      s   ')LQ1"A4(aTF222"A6*vh666"A6*vv.>>>>ayHq	A!9qQi!1Iay*H"8,888A!c!lCaLaL#aA,A!>H"8DAXMMMa|HqqQl1L1,1L1,1L1,0H #8,888a|HqqQl+H"8,888D!nGA'HQ(7w*BCH"8,8881:DD!A$G$H'%A'<a)G+@BH"8,888r   c            	         [        5       u  pp#[        U 4SS9U 1:X  d   e[        S5      1n[        X -  SS9U:X  d   eX-  X-  1n[        X-  SS9U:X  d   eX4X41n[        X-  5      U:X  d   e[        XU46 nX-  U-  X-  U -  X -  U-  X!-  U -  X-  U-  X-  U-  1n[        USS9U:X  d   e[        XX#46 nX-  U-  U-  X-  U-  U -  X0-  U-  U-  X2-  U-  U -  X!-  U -  U-  X-  U-  U-  X#-  U -  U-  X-  U-  U-  1n[        USS9U:X  d   e[        XX46 nX-  U -  U-  X-  U-  U -  1n[        USS9U:X  d   e[	        SU5      n[        XX46 nX-  U-  U-  Xa-  U-  U-  1n[        USS9U:X  d   e[        SS5      n[	        S[        S5      5      n[        XsX46 nXs-  U-  U-  X8-  U-  U-  X7-  U-  U-  X-  U-  U-  1n[        USS9U:X  d   eg )NTr#   r    r2   r   r3   )r   r   r   r   r   r   r	   )	r%   r&   r'   r(   r5   circuitr6   r7   r8   s	            r   test_generate_equivalent_ids_2r<      s   ')LQ1"A4=!DDD
|H"13t<HHHQSzH"13t<HHHH"13'8333A!9oGAqs1uac!eQSUCE13q5"H"74@HLLLA!< GAaQqCE!GQSU1WCE!GQSU1WCE!GQSU1W&H #74@HLLLA!< GAaQq!H"74@HLLLD!nGA+,G	!G#WYw%6q%89H"74@HLLL1:DD!A$GDW()Gwq !)A+d"2F1HW$ginQ&68H"74@HLLLr   c                     Sn Sn[        S5      4n[        X U5      nUSL d   e[        S5      nXD4n[        XPU5      nUSL d   e[        S5      n[        S5      nXg4n[        XU5      nUSL d   e[	        S5      n	XgU	4n
[        XU5      nUSL d   e[        SS5      nX4n[        XU5      nUSL d   e[        S5      nX4n[        XU5      nUSL d   e[        S5      nXoX4n[        UX5      nUSL d   eSn[        UX5      nUSL d   e[        XU5      nUSL d   e[        XU5      nUSL d   e[        XU5      nUSL d   eg )N   Fr    Tr   )r   r   r   r   r	   r   r
   )	numqubitsid_onlyid_gater,   x0
xx_circuitx1y1
xy_circuitz1xyz_circuitr7   cnot_circuitr(   
hh_circuith1xhzh_circuits                    r   test_is_scalar_nonsparse_matrixrM     s   IGA G'GDFT>>	
1BJ'
wGFT>>	
1B	
1BJ'
wGFU??	
1B2,K'HFT>>1:D<L'IFT>>	!AJ'
wGFT>>	
1BB#L'iIFT>>G'iIFT>>'HFU??'IFT>>'
wGFT>>r   c                     [        S5      n U (       d  [        S5        [        SSS/0S9nU(       d  [        S5        SnS	n[        S
5      4n[        XBU5      SL d   e[	        S5      nXU4n[        XbU5      SL d   e[	        S
5      n[        S
5      nXx4n	[        XU5      S	L d   e[        S
5      n
XxU
4n[        XU5      SL d   e[        S
S5      nX4n[        XU5      SL d   e[        S5      nX4n[        XU5      SL d   e[        S
5      nUUU
U4n[        UX#5      SL d   eSn[        UX#5      SL d   e[        XU5      S	L d   e[        XU5      SL d   e[        XU5      SL d   eg )Nnumpyznumpy not installed.scipyfromlistsparse)import_kwargszscipy not installed.r>   Fr    Tr   )	r   r   r   r   r   r   r	   r   r
   )nprP   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   r7   rI   r(   rJ   rK   rL   s                     r   test_is_scalar_sparse_matrixrU   4  s   	w	B#$'*xj1IJE#$IGA G"7w?4GGG	
1BJ":'BdJJJ	
1B	
1BJ":'BeKKK	
1B2,K";7CtKKK1:D<L"<GDLLL	!AJ":'BdJJJ
 
1BB#L"<DLLLG"<DLLL";7CuLLL"<GDLLL":'BdJJJr   c                  d    [        5       u  pp#[        XU5      nU1nX!U 4n[        XV5      SL d   eg )NT)r   r   r   )r%   r&   r'   r(   gate_idids
another_ids          r   test_is_degeneraterZ   f  s=    ')LQ11#G)CJ)T111r   c                      Sn [        5       u  pp4XU4n[        XPSS5      SL d   eXU4n[        XPSS5      SL d   eXX!4n[        XPSS5      SL d   eXX!4n[        XPSS5      SL d   eXX2U4n[        XPSS5      SL d   eg )	Nr>   r       TFr         )r   r   )nqubitsr%   r&   r'   r(   r;   s         r   test_is_reducibler`   p  s    G')LQ1QiG!Q/4777QiG!Q/5888QlG!Q/4777QlG!Q/4777Q1oG!Q/4777r   c                  X   [        / S5      [        5       :X  d   e[        5       u  pp#U /n[        X 5      1n[        USSS9U:X  d   eXU/n[        X 5      [        X5      [        X"5      [        XU5      1n[        US5      U:X  d   e[        X 5      [        X5      [        X"5      [        XU5      [        XX5      [        XX5      [        XX5      1n[        USSS9U:X  d   e[        USSS9U:X  d   eXX#/n[        X 5      [        X5      [        X"5      [        X35      [        XU5      [        XX5      [        XX5      [        XX#5      [        XX5      [        XX5      1
n[        US5      U:X  d   e[        X 5      [        X5      [        X"5      [        X35      1nU[        USSSS9:X  d   e[        X 5      [        X5      [        X"5      [        X35      [        XU5      [        XX5      [        XX5      [        XX#5      [        XX5      [        XX5      [        XX0U5      [        XX1U5      [        XX2U5      1n[        USSS9U:X  d   e[        X 5      [        X5      [        X"5      [        X35      [        XX#5      1nU[        USSSS9:X  d   e[	        SS	5      nX/n[        X 5      [        Xf5      [        XX5      1n[        USSS9U:X  d   e[        S
U 5      nX/n[        X 5      [        Xw5      [        XX5      1n[        USSS9U:X  d   e[        S[        S5      5      nXhU/n[        X35      [        X5      [        Xf5      [        XcX5      1n[        USSS9U:X  d   e[        S	5      n	[        S	5      n
X/n[        XX5      1n[        USSS9U:X  d   eg )Nr    r>   	max_depthr]   r^   r\   T)rc   identity_onlyr   r2   r3   )	r   setr   r   r   r   r	   r   r   )r%   r&   r'   r(   	gate_listid_setr7   cgate_xr8   sts              r   test_bfs_identity_searchrk     s   r1%...')LQ1I1 !Fy!q9VCCC q	I1 q$q$qQ')F y!,6661 q$q$qQ'qQ*qQ*qQ*,F y!q9VCCCy!q9VCCCqI1 q$q$q$qQ'qQ*qQ*qQ*qQ*qQ*	,F y!,6661 q$q$q$&F (A7;= = = = 1 q$q$q$qQ'qQ*qQ*qQ*qQ*qQ*qQ1-qQ1-qQ1-/F y!q9VCCC1 q$q$q$qQ*	,F
 (A7;= = = = 1:D	I1 t*q02F y!q9VCCCD!nGI1 w0q168F y!q9VCCCD!A$G"I1 w0t*t35F y!q9VCCC!AaAI1&'Fy!q9VCCCr   c                      [        S5      n [        S5      n[        U 5      U/n[        [        U 5      X5      1n[	        USSS9U:X  d   eg )Nr   r    r\   rb   )r   r   r   r   r   )ri   rj   rf   rg   s       r   test_bfs_identity_search_xfailrm     sK    !AaAAI6!9a+,Fy!q9VCCCr   Nr3   )(sympy.externalr   sympy.core.mulr   sympy.core.numbersr   sympy.physics.quantum.daggerr   sympy.physics.quantum.gater   r   r	   r
   r   r   r   r   r   $sympy.physics.quantum.identitysearchr   r   r   r   r   r   r   r   sympy.testing.pytestr   r   r-   r0   r9   r<   rM   rU   rZ   r`   rk   rm   r!   r   r   <module>ru      s|    (  & // / /A A A &
B JR j&9R)MX/d/Kd28(`DFDr   