U
    ZÊ¹jQE  ã                   @   sî   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d	„Zd
d„ Zdd„ Zdd„ Z dd„ Z!dd„ Z"dd„ Z#dd„ Z$dd„ Z%dd„ Z&d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                 C   s    t | ƒt| ƒt| ƒt| ƒf}|S )N)r   r   r   r	   )ZqubitZgates© r   ún/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/physics/quantum/tests/test_identitysearch.pyÚcreate_gate_sequence   s    r   c                  C   s–  t ƒ \} }}}tdƒ}tdtdƒƒ}t| fƒ| fdfhks>t‚| | fdf| f| ffh}t| | fƒ|ksjt‚| || fdf|| | fdf| | |fdf|| f| ff| |f| ff|f| | ffh}t| || fƒ|ksÌt‚| ||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|t‚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¶t‚d|d |d | ffd|d | |d ffd| |d |d ff|f|d | ff|f| |d ff| f|d |d ff|| f|d ff||f| ff| |f|d ff|| |fdf||| fdf| ||fdfh}t| ||fƒ}||k�s–t‚tdƒ|d |d  |  ftdƒ|d |  |d  ftdƒ| |d  |d  f||d |  f|| |d  f| |d |d  f||  |d f|| | f| | |d f||  | tdƒf|| |  tdƒf| | | tdƒfh}t| ||fdd�}||k�s’t‚d S )Nr   é   r   éÿÿÿÿT©Zreturn_as_muls)r   r   r   r   r   ÚAssertionErrorr   )ÚxÚyÚzÚhÚphÚcgate_tÚ
gate_rulesÚactualr   r   r   Útest_generate_gate_rules_1   s¤    

ÿû$      ý             ùõ
õr'   c            	      C   s  t ƒ \} }}}tdƒ}tdtdƒƒ}| tdƒfh}t| fdd�|ksHt‚tdƒtdƒfh}t| |  dd�|ksrt‚dh}t| |  dd�|ks�t‚| | |  tdƒf|tdƒf||  | f| | | fh}t| | |  dd�|ksàt‚| | | tdƒf|| |  tdƒf||  | tdƒftdƒ| | | ftdƒ||  | ftdƒ|| |  f| || f|| | f|| | f||  |f|||  f| | |fh}t| | | dd�}||k�s®t‚tdƒ|| | |  ftdƒ| | | | ftdƒ||  | | ftdƒ|| |  | f||| |  f| || | f|| | | f|||  | f||  || f|| ||  f| | || f|| | | f||  | |f| | | |f|| | | f|| |  |f||  | | tdƒf| | | | tdƒf|| | |  tdƒf|| |  | tdƒfh}t| | | | dd�}||k�s0t‚tdƒ|d |d  |  ftdƒ|d |  |d  ftdƒ| |d  |d  f||d |  f|| |d  f| |d |d  f||  |d f|| | f| | |d f||  | tdƒf|| |  tdƒf| | | tdƒfh}t| | | dd�}||k�s.t‚d|d |d | ffd|d | |d ffd| |d |d ff|f|d | ff|f| |d ff| f|d |d ff|| f|d ff||f| ff| |f|d ff|| |fdf||| fdf| ||fdfh}t| | | ƒ}||k�st‚d S )	Nr   r   Tr   )r   r   Fr   r   )r   r   r   r   r   r   r   )	r   r    r!   r"   r#   r$   Úexpectedr%   r&   r   r   r   Útest_generate_gate_rules_2X   s¦    


ý





õ      ó
õõr)   c            	      C   sP  t ƒ \} }}}t| fƒ| fhks$t‚t| | fƒ| | fhks>t‚t| |fƒ| |f|| fhks^t‚| ||f}| ||f||| f|| |f||| f|| |f| ||fh}t|ƒ|ks¬t‚t| ||ƒt||| ƒt|| |ƒt||| ƒt|| |ƒt| ||ƒh}t|dd�|k�st‚| |||f}| |||f|||| f|| ||f|||| f||| |f|| ||f||| |f| |||fh}t|ƒ|k�stt‚| || |f}| || |f|| || fh}t|ƒ|k�sªt‚td|ƒ}||||f}||||f||||fh}t|ƒ|k�sêt‚tddƒ}tdtdƒƒ}||||f}||||f||||f||||f||||fh}t|ƒ|k�sLt‚d S )NTr   ©r   r   r   ©r   )r   r   r   r   r   r
   r   )	r   r    r!   r"   Zgate_seqÚgate_idsÚcgate_yÚcnotÚcgate_zr   r   r   Útest_generate_equivalent_ids_1­   sR     
  ÿ
 
 
ÿ
 

 

 
ý


 
ÿr0   c            	   	   C   s¤  t ƒ \} }}}t| fdd�| hks&t‚tdƒh}t| |  dd�|ksHt‚| | ||  h}t| | dd�|kspt‚| |f|| fh}t| | ƒ|ks”t‚t| ||fŽ }| | | || |  ||  | || |  ||  | | | | h}t|dd�|ksöt‚t| |||fŽ }| | | | || | |  ||  | | || | |  || |  | ||  | | || |  | | | | | h}t|dd�|k�s�t‚t| || |fŽ }| | |  | ||  | |  h}t|dd�|k�sÖt‚td|ƒ}t||||fŽ }|| | | || | | h}t|dd�|k�s&t‚tddƒ}tdtdƒƒ}t||||fŽ }|| | | || | | || | | || | | h}t|dd�|k�s t‚d S )NTr   r   r*   r   r+   )r   r   r   r   r   r   r
   r   )	r   r    r!   r"   r,   Úcircuitr-   r.   r/   r   r   r   Útest_generate_equivalent_ids_2Ö   sN    
(
 
ÿ   ý 
 
 ÿr2   c                  C   sœ  d} d}t dƒf}t|| |ƒ}|dks*t‚tdƒ}||f}t|| |ƒ}|dksRt‚tdƒ}tdƒ}||f}t|| |ƒ}|dks‚t‚tdƒ}	|||	f}
t|
| |ƒ}|dks¬t‚tddƒ}||f}t|| |ƒ}|dksÖt‚tdƒ}||f}t|| |ƒ}|dksþt‚tdƒ}|||	|f}t|| |ƒ}|dk�s,t‚d}t|| |ƒ}|dk�sJt‚t|
| |ƒ}|dk�sdt‚t|| |ƒ}|dk�s~t‚t|| |ƒ}|dk�s˜t‚d S )Né   Fr   Tr   )r   r   r   r   r   r   r
   r	   )Ú	numqubitsÚid_onlyÚid_gater&   Úx0Ú
xx_circuitÚx1Úy1Ú
xy_circuitÚz1Úxyz_circuitr.   Úcnot_circuitr"   Ú
hh_circuitÚh1Úxhzh_circuitr   r   r   Útest_is_scalar_nonsparse_matrix  sN    


rB   c                  C   s¤  t dƒ} | stdƒ t dddgid�}|s2tdƒ d}d	}td
ƒf}t|||ƒdksXt‚tdƒ}||f}t|||ƒdks|t‚td
ƒ}td
ƒ}||f}	t|	||ƒd	ks¨t‚td
ƒ}
|||
f}t|||ƒdksÎt‚td
dƒ}||f}t|||ƒdksôt‚t	dƒ}||f}t|||ƒdk�st‚t	d
ƒ}|||
|f}t|||ƒdk�sDt‚d}t|||ƒdk�s^t‚t|||ƒd	k�stt‚t|||ƒdk�sŠt‚t|||ƒdk�s t‚d S )NÚnumpyznumpy not installed.ÚscipyÚfromlistÚsparse)Zimport_kwargszscipy not installed.r3   Fr   Tr   )
r   r   r   r   r   r   r   r   r
   r	   )ÚnprD   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r.   r>   r"   r?   r@   rA   r   r   r   Útest_is_scalar_sparse_matrix4  sD    


rH   c                  C   s@   t ƒ \} }}}t| ||ƒ}|h}||| f}t||ƒdks<t‚d S )NT)r   r   r   r   )r   r    r!   r"   Zgate_idZidsZ
another_idr   r   r   Útest_is_degeneratef  s
    
rI   c                  C   s¾   d} t ƒ \}}}}|||f}t|| ddƒdks2t‚|||f}t|| ddƒdksRt‚||||f}t|| ddƒdkstt‚||||f}t|| ddƒdks–t‚|||||f}t|| ddƒdksºt‚d S )	Nr3   r   é   TFr   é   é   )r   r   r   )Znqubitsr   r    r!   r"   r1   r   r   r   Útest_is_reduciblep  s    

rM   c                  C   sò  t g dƒtƒ kst‚tƒ \} }}}| g}t| | ƒh}t |ddd�|ksJt‚| ||g}t| | ƒt||ƒt||ƒt| ||ƒh}t |dƒ|ksŒt‚t| | ƒt||ƒt||ƒt| ||ƒt| || |ƒt| || |ƒt||||ƒh}t |ddd�|ksìt‚t |ddd�|k�st‚| |||g}t| | ƒt||ƒt||ƒt||ƒt| ||ƒt| || |ƒt| || |ƒt| |||ƒt||||ƒt||||ƒh
}t |dƒ|k�sŽt‚t| | ƒt||ƒt||ƒt||ƒh}|t |dddd�k�sÌt‚t| | ƒt||ƒt||ƒt||ƒt| ||ƒt| || |ƒt| || |ƒt| |||ƒt||||ƒt||||ƒt| ||| |ƒt| ||||ƒt|||||ƒh}t |ddd�|k�sxt‚t| | ƒt||ƒt||ƒt||ƒt| |||ƒh}|t |dddd�k�sÂt‚tdd	ƒ}| |g}t| | ƒt||ƒt| || |ƒh}t |ddd�|k�st‚td
| ƒ}| |g}t| | ƒt||ƒt| || |ƒh}t |ddd�|k�sVt‚tdtdƒƒ}|||g}t||ƒt||ƒt||ƒt||||ƒh}t |ddd�|k�s®t‚td	ƒ}	t	d	ƒ}
|	|
g}t|	|	|	|	ƒh}t |ddd�|k�sît‚d S )Nr   r3   ©Ú	max_depthrK   rL   rJ   T)rO   Zidentity_onlyr   r*   r+   )
r   Úsetr   r   r   r
   r   r   r   r   )r   r    r!   r"   Ú	gate_listÚid_setr.   Zcgate_xr/   ÚsÚtr   r   r   Útest_bfs_identity_search„  s¼    

ý
ú
÷
ý
ÿ
ôü
ÿ
þ
þ
ýrU   c                  C   sH   t dƒ} tdƒ}t| ƒ|g}tt| ƒ||ƒh}t|ddd�|ksDt‚d S )Nr   r   rJ   rN   )r   r   r   r   r   r   )rS   rT   rQ   rR   r   r   r   Útest_bfs_identity_search_xfailç  s
    rV   N)r   )(Zsympy.externalr   Zsympy.core.mulr   Zsympy.core.numbersr   Zsympy.physics.quantum.daggerr   Zsympy.physics.quantum.gater   r   r   r	   r
   r   r   r   r   Z$sympy.physics.quantum.identitysearchr   r   r   r   r   r   r   r   Zsympy.testing.pytestr   r   r'   r)   r0   r2   rB   rH   rI   rM   rU   rV   r   r   r   r   Ú<module>   s"   ,(
EU),22
c