
    sgQE                         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mZmZ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"d Z#d Z$d Z%d Z&d Z'y)    )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    t        |       t        |       t        |       t        |       f}|S )N)r   r   r	   r
   )qubitgatess     b/var/www/html/venv/lib/python3.12/site-packages/sympy/physics/quantum/tests/test_identitysearch.pycreate_gate_sequencer      s%    uXqx51U84EL    c                     t               \  } }}}t        d      }t        dt        d            }t	        | f      | fdfhk(  sJ | | fdf| f| ffh}t	        | | f      |k(  sJ | || fdf|| | fdf| | |fdf|| f| ff| |f| ff|f| | ffh}t	        | || f      |k(  sJ | ||fdf||| fdf|| |fdfd| ||ffd|| |ffd||| ff| f||ff||f| ff|f| |ff|| f|ff|f|| ff| |f|ffh}t	        | ||f      }||k(  sJ d|||| ffd| |||ffd|| ||ffd||| |ff|f||| ff| f|||ff|f| ||ff|f|| |ff|| f||ff| |f||ff||f| |ff||f|| ff|| |f|ff| ||f|ff|||f| ff||| f|ff|| ||fdf| |||fdf|||| fdf||| |fdfh}t	        | |||f      }||k(  sJ d|dz  |dz  | ffd|dz  | |dz  ffd| |dz  |dz  ff|f|dz  | ff|f| |dz  ff| f|dz  |dz  ff|| f|dz  ff||f| ff| |f|dz  ff|| |fdf||| fdf| ||fdfh}t	        | ||f      }||k(  sJ t        d      |dz  |dz  z  | z  ft        d      |dz  | z  |dz  z  ft        d      | |dz  z  |dz  z  f||dz  | z  f|| |dz  z  f| |dz  |dz  z  f|| z  |dz  f||z  | f| |z  |dz  f|| z  |z  t        d      f||z  | z  t        d      f| |z  |z  t        d      fh}t	        | ||fd      }||k(  sJ y )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-   ')LQ1a	1BAuQx Gt$1$444q62,taTl$J1v&*444q!9b/1ay"o1ay"o1vtn1vtntaVn&J 1ay)Z777q!9b/Q1Ir?aAYOAq!9oQ1IaAYtaVn1vtntaVn1vtntaVn1vtnFJ !!Q+FZ 
aAq\R!Q1.aAq\0B
q!Ql	qdQ1I.!1ay0A$Aq		aTAq!9-AA/?a&1a&	QFQF+q!fq!f-=a)aT	aAY-Aq	A4/@a)aT	aAq\2.!Q1r0BaA,	q!QlB/1J !!Q1.FZ"rBx34BHa278Aw}b2h78zBHa=1uq'B-01tgmR"X67|b2h[1G}qd+2w2 01B',GQ',2w',.J !!R!12FZ1:w}R"X5a78qz28A:gm#;<qz1Wr]?28#;<R
+1Wr]?+'B-R01qy"r(+'z1otWr]+qy|WQZ0'z!|WQZ0tG|WQZ02J !!R!1$GFZr   c                     t               \  } }}}t        d      }t        dt        d            }| t	        d      fh}t        | fd      |k(  sJ t	        d      t	        d      fh}t        | | z  d      |k(  sJ dh}t        | | z  d      |k(  sJ | |z  | z  t	        d      f|t	        d      f|| z  | f| |z  | fh}t        | |z  | z  d      |k(  sJ | |z  |z  t	        d      f||z  | z  t	        d      f|| z  |z  t	        d      ft	        d      | |z  |z  ft	        d      || z  |z  ft	        d      ||z  | z  f| ||z  f||z  | f|| |z  f|| z  |f||| z  f| |z  |fh}t        | |z  |z  d      }||k(  sJ t	        d      ||z  |z  | z  ft	        d      | |z  |z  |z  ft	        d      || z  |z  |z  ft	        d      ||z  | z  |z  f|||z  | z  f| ||z  |z  f|| |z  |z  f||| z  |z  f|| z  ||z  f||z  || z  f| |z  ||z  f||z  | |z  f|| z  |z  |f| |z  |z  |f||z  |z  | f||z  | z  |f|| z  |z  |z  t	        d      f| |z  |z  |z  t	        d      f||z  |z  | z  t	        d      f||z  | z  |z  t	        d      fh}t        | |z  |z  |z  d      }||k(  sJ t	        d      |dz  |dz  z  | z  ft	        d      |dz  | z  |dz  z  ft	        d      | |dz  z  |dz  z  f||dz  | z  f|| |dz  z  f| |dz  |dz  z  f|| z  |dz  f||z  | f| |z  |dz  f|| z  |z  t	        d      f||z  | z  t	        d      f| |z  |z  t	        d      fh}t        | |z  |z  d      }||k(  sJ d|dz  |dz  | ffd|dz  | |dz  ffd| |dz  |dz  ff|f|dz  | ff|f| |dz  ff| f|dz  |dz  ff|| f|dz  ff||f| ff| |f|dz  ff|| |fdf||| fdf| ||fdfh}t        | |z  |z        }||k(  sJ y )	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   ')LQ1a	1BAuQx G GAJ HtD9XEEEWQZ()Hqs48HDDDzHqs59XEEEQ3q5'!*%'!*osAhsAh J qs1uT:jHHHQ3q5'!*%s1ugaj)s1ugaj)qz1Q3q5)qz1Q3q5)qz1Q3q5)!A#hsAh!A#hsAh!A#hsAh J !1Qt<FZ1:qs1uQw'qz1Q3q57+qz1Q3q57+qz1Q3q57+!A#a%j1ac!e*!A#a%j1ac!e*sAaCj1Q3!*sAaCj1Q3!*s1uaj1Q3q5!*s1uaj1Q3q5!*s1uQw
+s1uQw
+s1uQw
+s1uQw
+-J !1Qq>FZ1:w}R"X5a78qz28A:gm#;<qz1Wr]?28#;<R
+1Wr]?+'B-R01qy"r(+'z1otWr]+qy|WQZ0'z!|WQZ0tG|WQZ02J !2gdCFZ"rBx34BHa278Aw}b2h78zBHa=1uq'B-01tgmR"X67|b2h[1G}qd+2w2 01B',GQ',2w',.J !2g.FZr   c                  r   t               \  } }}}t        | f      | fhk(  sJ t        | | f      | | fhk(  sJ t        | |f      | |f|| fhk(  sJ | ||f}| ||f||| f|| |f||| f|| |f| ||fh}t        |      |k(  sJ t        | ||      t        |||       t        || |      t        |||       t        || |      t        | ||      h}t        |d      |k(  sJ | |||f}| |||f|||| f|| ||f|||| f||| |f|| ||f||| |f| |||fh}t        |      |k(  sJ | || |f}| || |f|| || fh}t        |      |k(  sJ t        d|      }||||f}||||f||||fh}t        |      |k(  sJ t	        dd      }t        dt        d            }||||f}||||f||||f||||f||||fh}t        |      |k(  sJ y )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   ')LQ1a"A4(aTF222"Aq6*1vh666"Aq6*1v1v.>>>>1ayHAq	Aq!9q!Qi!Q1I1ay*H"8,888Aq!c!QlC1aL1aL#aA,Aq!>H"8DAXMMM1a|HAq!q!Ql1aL1aA,1aL1aA,1aL1aA,0H #8,8881a|HAq!q!Ql+H"8,888D!nG7Aw'HGQ(7Aw*BCH"8,8881:DD!A$Ga!$Hq'1%7At'<a)GQa+@BH"8,888r   c            	      ,   t               \  } }}}t        | fd      | hk(  sJ t        d      h}t        | | z  d      |k(  sJ | |z  || z  h}t        | |z  d      |k(  sJ | |f|| fh}t        | |z        |k(  sJ t        | ||f }| |z  |z  ||z  | z  || z  |z  ||z  | z  || z  |z  | |z  |z  h}t        |d      |k(  sJ t        | |||f }| |z  |z  |z  ||z  |z  | z  || z  |z  |z  ||z  |z  | z  ||z  | z  |z  || z  |z  |z  ||z  | z  |z  | |z  |z  |z  h}t        |d      |k(  sJ t        | || |f }| |z  | z  |z  || z  |z  | z  h}t        |d      |k(  sJ t	        d|      }t        ||||f }||z  |z  |z  ||z  |z  |z  h}t        |d      |k(  sJ t        dd      }t	        dt        d            }t        ||||f }||z  |z  |z  ||z  |z  |z  ||z  |z  |z  ||z  |z  |z  h}t        |d      |k(  sJ y )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   ')LQ1a"A4=!DDD
|H"1Q3t<HHH!QqSzH"1Q3t<HHHAAH"1Q3'8333Aq!9oG!Aqs1uac!eQqSUaCE1Q3q5"H"74@HLLLAq!Q< G!Aa1QqaCE!GQqSU1WaCE!GQqSU1WaCE!GQqSU1W&H #74@HLLLAq!Q< G!Aa1Qq!H"74@HLLLD!nGAw7+,G'	!G#WQYw%6q%89H"74@HLLL1:DD!A$GD!Wa()GQwq !G)A+d"2dF1HW$gainQ&68H"74@HLLLr   c                     d} d}t        d      f}t        || |      }|du sJ t        d      }||f}t        || |      }|du sJ t        d      }t        d      }||f}t        || |      }|du sJ t	        d      }	|||	f}
t        |
| |      }|du sJ t        dd      }||f}t        || |      }|du sJ t        d      }||f}t        || |      }|du sJ t        d      }|||	|f}t        || |      }|du sJ d}t        || |      }|du sJ t        |
| |      }|du sJ t        || |      }|du sJ t        || |      }|du sJ y )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bJ'
IwGFT>>	
1B	
1BbJ'
IwGFU??	
1Br2,K'YHFT>>1:D$<L'iIFT>>	!AQJ'
IwGFT>>	
1BB#L'iIFT>>G'iIFT>>'YHFU??'iIFT>>'
IwGFT>>r   c                     t        d      } | st        d       t        dddgi      }|st        d       d}d	}t        d
      f}t        |||      du sJ t	        d      }||f}t        |||      du sJ t	        d
      }t        d
      }||f}	t        |	||      d	u sJ t        d
      }
|||
f}t        |||      du sJ t        d
d      }||f}t        |||      du sJ t        d      }||f}t        |||      du sJ t        d
      }|||
|f}t        |||      du sJ d}t        |||      du sJ t        |||      d	u sJ t        |||      du sJ t        |||      du sJ y )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"7Iw?4GGG	
1BbJ":y'BdJJJ	
1B	
1BbJ":y'BeKKK	
1Br2,K";	7CtKKK1:D$<L"<GDLLL	!AQJ":y'BdJJJ
 
1BB#L"<GDLLLG"<GDLLL";	7CuLLL"<GDLLL":y'BdJJJr   c                  l    t               \  } }}}t        | ||      }|h}||| f}t        ||      du sJ y )NT)r   r   r   )r%   r&   r'   r(   gate_idids
another_ids          r   test_is_degeneraterZ   f  sG    ')LQ1a1a#G)CQJj)T111r   c                     d} t               \  }}}}|||f}t        || dd      du sJ |||f}t        || dd      du sJ ||||f}t        || dd      du sJ ||||f}t        || dd      du sJ |||||f}t        || dd      du sJ y )	Nr>   r       TFr         )r   r   )nqubitsr%   r&   r'   r(   r;   s         r   test_is_reducibler`   p  s    G')LQ1a!QiG!Q/4777!QiG!Q/5888!QlG!Q/4777!QlG!Q/4777!Q1oG!Q/4777r   c                  $   t        g d      t               k(  sJ t               \  } }}}| g}t        | |       h}t        |dd      |k(  sJ | ||g}t        | |       t        ||      t        ||      t        | ||      h}t        |d      |k(  sJ t        | |       t        ||      t        ||      t        | ||      t        | || |      t        | || |      t        ||||      h}t        |dd      |k(  sJ t        |dd      |k(  sJ | |||g}t        | |       t        ||      t        ||      t        ||      t        | ||      t        | || |      t        | || |      t        | |||      t        ||||      t        ||||      h
}t        |d      |k(  sJ t        | |       t        ||      t        ||      t        ||      h}|t        |ddd      k(  sJ t        | |       t        ||      t        ||      t        ||      t        | ||      t        | || |      t        | || |      t        | |||      t        ||||      t        ||||      t        | ||| |      t        | ||||      t        |||||      h}t        |dd      |k(  sJ t        | |       t        ||      t        ||      t        ||      t        | |||      h}|t        |ddd      k(  sJ t	        dd	      }| |g}t        | |       t        ||      t        | || |      h}t        |dd      |k(  sJ t        d
|       }| |g}t        | |       t        ||      t        | || |      h}t        |dd      |k(  sJ t        dt        d            }|||g}t        ||      t        ||      t        ||      t        ||||      h}t        |dd      |k(  sJ t        d	      }	t        d	      }
|	|
g}t        |	|	|	|	      h}t        |dd      |k(  sJ y )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%...')LQ1aI1a !Fy!q9VCCC Aq	I1a q!$q!$q!Q')F y!,6661a q!$q!$q!Q'q!Q*q!Q*q!Q*,F y!q9VCCCy!q9VCCCAq!I1a q!$q!$q!$q!Q'q!Q*q!Q*q!Q*q!Q*q!Q*	,F y!,6661a q!$q!$q!$&F (A7;= = = = 1a q!$q!$q!$q!Q'q!Q*q!Q*q!Q*q!Q*q!Q*q!Q1-q!Q1-q!Q1-/F y!q9VCCC1a q!$q!$q!$q!Q*	,F
 (A7;= = = = 1:DD	I1a tT*q$402F y!q9VCCCD!nGGI1a w0q'1g68F y!q9VCCCD!A$Gw"I1a w0tT*tQ35F y!q9VCCC!AaAAI1aA&'Fy!q9VCCCr   c                      t        d      } t        d      }t        |       |g}t        t        |       ||      h}t	        |dd      |k(  sJ y )Nr   r    r\   rb   )r   r   r   r   r   )ri   rj   rf   rg   s       r   test_bfs_identity_search_xfailrm     sM    !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   