
    gQE                         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'dS )    )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     k/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/physics/quantum/tests/test_identitysearch.pycreate_gate_sequencer      s-    uXXqxx51U884EL    c                  x   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 d S )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-      sv   '))LQ1a	1BAuQxx  Gt$$1$4444q62,taTl$J1v&&*4444q!9b/1ay"o1ay"o1vtn1vtntaVn&J 1ay))Z7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22FZ1::w}R"X5a78qzz28A:gm#;<qzz1Wr]?28#;<R
+1Wr]?+'B-R01qy"r(+'z1otWr]+qy|WQZZ0'z!|WQZZ0tG|WQZZ02J !!R!1$GGGFZr   c                  X	   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 d S )	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AuQxx  G GAJJ HtD999XEEEEWQZZ()Hqs4888HDDDDzHqs5999XEEEEQ3q5'!**%'!**osAhsAh J qs1uT:::jHHHHQ3q5'!**%s1ugajj)s1ugajj)qzz1Q3q5)qzz1Q3q5)qzz1Q3q5)!A#hsAh!A#hsAh!A#hsAh J !1Qt<<<FZ1::qs1uQw'qzz1Q3q57+qzz1Q3q57+qzz1Q3q5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qzz28A:gm#;<qzz1Wr]?28#;<R
+1Wr]?+'B-R01qy"r(+'z1otWr]+qy|WQZZ0'z!|WQZZ0tG|WQZZ02J !2gdCC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                  &   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 d S )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2"Aq6**1vh6666"Aq6**1v1v.>>>>>1ayHAq	Aq!9q!Qi!Q1I1ay*H"8,,8888Aq!c!QllC1aLL1aLL#aA,,Aq!>H"8DAAAXMMMM1a|HAq!q!Ql1aL1aA,1aL1aA,1aL1aA,0H #8,,88881a|HAq!q!Ql+H"8,,8888D!nnG7Aw'HGQ(7Aw*BCH"8,,88881::DD!A$$Ga!$Hq'1%7At'<a)GQa+@BH"8,,88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 d S )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D

|H"1Q3t<<<HHHH!QqSzH"1Q3t<<<HHHHAAH"1Q3''83333Aq!9oG!Aqs1uac!eQqSUaCE1Q3q5"H"74@@@HL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LAq!Q< G!Aa1Qq!H"74@@@HLLLLD!nnGAw7+,G'	!G#WQYw%6q%89H"74@@@HL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LLLLr   c                  6   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 d S )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DDFT>>>>	
1BbJ'
IwGGFT>>>>	
1B	
1BbJ'
IwGGFU????	
1Br2,K'YHHFT>>>>1::D$<L'iIIFT>>>>	!AQJ'
IwGGFT>>>>	
1BB#L'iIIFT>>>>G'iIIFT>>>>'YHHFU????'iIIFT>>>>'
IwG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 d S )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  sF   	w		B %#$$$'*xj1IJJJE %#$$$IGA G"7Iw??4GGGG	
1BbJ":y'BBdJJJJ	
1B	
1BbJ":y'BBeKKKK	
1Br2,K";	7CCtKKKK1::D$<L"<GDDLLLL	!AQJ":y'BBdJJJJ
 
1BB#L"<GDDLLLLG"<GDDLLLL";	7CCuLLLL"<GDDLLLL":y'BBdJJJJJJr   c                      t                      \  } }}}t          | ||          }|h}||| f}t          ||          du sJ d S )NT)r   r   r   )r%   r&   r'   r(   gate_idids
another_ids          r   test_is_degeneraterZ   f  sY    '))LQ1a1a##G)CQJj))T111111r   c                  F   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 d S )	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7!QiG!Q//58888!QlG!Q//47777!QlG!Q//47777!Q1oG!Q//4777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 d S )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999VCCCC Aq	I1a  q!$$q!$$q!Q'')F y!,,66661a  q!$$q!$$q!Q''q!Q**q!Q**q!Q**,F y!q999VCCCCy!q999VC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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999VCCCC1a  q!$$q!$$q!$$q!Q**	,F
 (A7;= = = = = = = 1::DD	I1a  tT**q$4002F y!q999VCCCCD!nnGGI1a  w00q'1g668F y!q999VCCCCD!A$$Gw"I1a  w00tT**tQ335F y!q999VCCCC!AaAAI1aA&&'Fy!q999VCCCCCCr   c                      t          d          } t          d          }t          |           |g}t          t          |           ||          h}t	          |dd          |k    sJ d S )Nr   r    r\   rb   )r   r   r   r   r   )ri   rj   rf   rg   s       r   test_bfs_identity_search_xfailrm     sg    !AaAAI6!99a++,Fy!q999VCCC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 A A A A A A A A A A A A A A A A A & % % % % %   
B  B  B JR  R  R j&9 &9 &9R)M )M )MX/ / /d/K /K /Kd2 2 28 8 8(`D `D `DFD D D D Dr   