U
    ZÊ¹jý"  ã                   @   sD  d dl Z d dlmZmZ 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 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 d dl m!Z! d dl"m#Z# d dl$m%Z% d dl&m'Z' edƒ\Z(Z)dZ*dd„ Z+dd„ Z,dd„ Z-dd„ Z.dd„ Z/dd„ Z0dd„ Z1dd „ Z2d!d"„ Z3d#d$„ Z4d%d&„ Z5dS )'é    N)ÚIntegerÚRational)ÚS)Úsymbols)Úsqrt)ÚMatrix)Úmeasure_allÚmeasure_partialÚmatrix_to_qubitÚmatrix_to_densityÚqubit_to_matrixÚIntQubitÚIntQubitBraÚQubitBra)ÚHadamardGateÚCNOTÚXGateÚYGateÚZGateÚ	PhaseGate)Úqapply)Ú	represent)ÚQubit)Úraises)ÚDensity)ÚTrzx,yg�íµ ÷Æ°>c                  C   s¶   dddddg} t dƒ}| d¡t dƒks,t‚| d¡t dƒksBt‚| d¡t dƒksXt‚|jdksft‚|jd	kstt‚td	ƒD ]}|| | d|  ks|t‚q|t|ƒd	ksªt‚t d
ƒ}d S )Nr   é   Z00110Z00111Z00100é   Ú10110)r   r   r   r   r   é   Ú110)r   ÚflipÚAssertionErrorÚqubit_valuesÚ	dimensionÚrangeÚlen)ÚarrayÚqbÚi© r*   úe/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/physics/quantum/tests/test_qubit.pyÚ
test_Qubit   s    r,   c                  C   s´   t dƒ} tdƒ}|  ¡ tks t‚| ¡ t ks0t‚t dddƒ} tdddƒ}t| dd�jt|dd�ksft‚t ddƒ} tddƒ}|  |¡tdƒks�t‚tddƒ}|  |¡tdƒks°t‚d S )Nr   r   é   ©Znqubits)r   r   Ú
dual_classr"   r   ÚHZ_eval_innerproduct_QubitBrar   )r(   Zqb_brar*   r*   r+   Útest_QubitBra(   s    


r1   c                  C   sâ  t ddd�} ttdƒƒt| ƒks$t‚tdƒ}tt |ƒƒt|ƒksDt‚t ddd�} ttdƒƒt| ƒksht‚tt dƒƒt| ƒks€t‚t ddd�} ttd	ƒƒt| ƒks¤t‚tt ddƒƒt| ƒks¾t‚t d
ƒ} |  ¡ d
ksÖt‚| jdksät‚t ddƒ} | jdksüt‚t dƒt ddƒk�st‚t dƒ} tdƒ}|  ¡ tk�s6t‚| ¡ t k�sHt‚t dƒ} tdƒ}|  |¡t	dƒk�spt‚t dƒ} tdƒ}|  |¡t	dƒk�s˜t‚t
tdd„ ƒ t
tdd„ ƒ t
tdd„ ƒ t
tdd„ ƒ t
tdd„ ƒ d S )Nr   r   r.   Ú0Ú1010Ú1é   r   Z0111é   )r   r   r   r   )r   r   r   r   r-   é   r   c                   S   s
   t ddƒS )Nr   r   ©r   r*   r*   r*   r+   Ú<lambda>_   ó    ztest_IntQubit.<locals>.<lambda>c                   S   s   t dƒS )NÚ5r8   r*   r*   r*   r+   r9   a   r:   c                   S   s
   t ddƒS )Nr   r;   r8   r*   r*   r*   r+   r9   b   r:   c                   S   s   t ddd�S )Nr   r;   r.   r8   r*   r*   r*   r+   r9   c   r:   c                   S   s   t ddd�S )Nr   T)Zbad_argr8   r*   r*   r*   r+   r9   d   r:   )r   r   r   r"   Zas_intr#   r   r/   Z_eval_innerproduct_IntQubitBrar   r   Ú
ValueErrorÚ	TypeError)Ziqbr(   Ziqb_brar*   r*   r+   Útest_IntQubit:   s>    
r>   c                  C   sž   dt dƒ tdƒ dt dƒ tdƒ  } tddƒtdƒ |  }tdƒd tdƒd  tdƒd  tdƒd  }t|ƒ ¡ |ks‚t‚tt|dd�ƒ|ksšt‚d S )	Nr   r7   Ú01Ú10r   Ú00Ú11r.   )	r   r   r   r   r   Úexpandr"   r
   r   )ÚstateZ
state_gateZstate_expandedr*   r*   r+   Útest_superposition_of_statesf   s
    (0rE   c               
   C   s:  t tdt ¡  ƒƒttdt ¡  ƒƒttdt ¡  ƒƒttdt ¡  ƒƒttdt ¡  ƒƒttdt ¡  ƒƒg} ttt ¡ d ƒtt ¡ d ƒtt ¡ d ƒtt ¡ d ƒtt ¡ d ƒtt ¡ d ƒƒ}ttt ¡ d ƒƒD ]}| tt ¡ d ƒ | }qÞt	|dd�}t
|ƒ}t|ƒ}| ¡ }| ¡ }||k�s6t‚d S )Nr-   r7   é   r.   )r   ÚintÚrandomr   r   r   r   r   r%   r   r   r
   rC   r"   )ZgatesZcircuitr)   ÚmatZstatesZ	state_repr*   r*   r+   Útest_apply_represent_equalityo   s*      ý  þrJ   c                  C   s  t ddddƒ} tddddddddddddddddgƒ}t|ƒ| ksFt‚t| ƒ|ksVt‚dtdƒ t dddƒt dddƒ t dddƒ t dddƒ t dddƒ t dddƒ t dddƒ t dddƒ  }tdƒd tddddddddgƒ }t|ƒ| ¡ ksút‚t|ƒ|k�st‚d S )Nr   r   r7   )r   r   r
   r"   r   r   rC   )r(   rI   rD   Zonesr*   r*   r+   Útest_matrix_to_qubitsƒ   s$    (,
ÿ
ÿ
ÿ
þ
þ$rK   c                  C   s¢   t dƒ\} }| tdƒ |tdƒ  }t|ddd�| tdƒ | |  ¡  f|tdƒ || ¡  fgksft‚t|dd�tdƒ| |  ¡  ftdƒ|| ¡  fgksžt‚d S )Nza br    Z111©r   F)Ú	normalize)r   r   r	   Ú	conjugater"   r   )ÚaÚbrD   r*   r*   r+   Útest_measure_normalize‘   s    .ÿ
&ÿrQ   c                  C   s  t dƒt dƒ } t| dƒt dƒtjft dƒtjfgks:t‚t| tdƒƒt dƒtjft dƒtjfgksht‚t| dƒt| dƒd d d… ksŠt‚tdƒtdƒ t d	ƒ d
tdƒ t dƒ  }t|dƒtdƒtdƒ t d	ƒ d
tdƒ t dƒ  d
fgksöt‚t|dƒt|dƒk�st‚t|dƒt d	ƒtddƒft dƒtd
dƒfgk�sDt‚t dƒt dƒ t dƒ t dƒ }t|dƒt dƒtd
dƒft dƒtd
dƒft dƒtdƒ t dƒtdƒ  tjfgk�s¼t‚t|dƒt dƒtd
dƒft dƒtdƒ t dƒtdƒ  t dƒtdƒ  tddƒfgk�st‚d S )Nr?   r@   rL   r   )r   éÿÿÿÿr7   r-   Z00001r   Z11111)r   r7   )r-   r   )r   r7   r-   Z1111Z1101Ú1011Z1000)r   r   r-   r   )r   r	   r   ÚHalfr"   rG   r   r   )rD   Zstate1Ústate2r*   r*   r+   Útest_measure_partialš   sB    ÿÿÿ,0ÿ"ÿ
  $ÿÿ
ÿÿÿÿrV   c                  C   sÐ   t tdƒƒtdƒdfgkst‚tdƒtdƒ } t | ƒtdƒtjftdƒtjfgksVt‚tdƒtdƒ dtdƒ tdƒ  }t |ƒtdƒtddƒftdƒtddƒfgksªt‚t ttdƒƒƒtdƒdfgksÌt‚d S )	NrB   r   r@   r   r7   rA   r   r2   )r   r   r"   r   rT   r   r   r   )rD   rU   r*   r*   r+   Útest_measure_all·   s    ÿ
$"ÿrW   c                  C   sÌ  t dƒ} t dƒ}t| dg|dgƒ}t|ƒ}| ¡ dks:t‚t|dƒ}| ¡ dtt dƒdgƒ dtt d	ƒdgƒ  ksxt‚t|d
ƒ}| ¡ dtt dƒdgƒ dtt dƒdgƒ  ks¶t‚t|dƒ}| ¡ dtt dƒdgƒ dtt dƒdgƒ  ksôt‚t|ddddd
gƒ}| ¡ dk�st‚t|dddgƒ}| ¡ dtt dƒdgƒ dtt dƒdgƒ  k�s`t‚dtdƒ t dƒt dƒ  }t|dgƒ}t|dƒ}| ¡ dtt dƒdgƒ dtt dƒdgƒ  k�sÈt‚d S )Nr   Z01010g333333ã?gš™™™™™Ù?g      ð?r   Z0101r   rS   r   r3   Z0110r7   r-   rA   r@   rB   g      à?r2   r4   )r   r   r   Zdoitr"   r   )Úq1Úq2ÚdÚtÚqr*   r*   r+   Útest_eval_traceÄ   s:    
ÿ

ÿ

ÿ
ÿ
ÿr]   c                  C   s"  t ddgddggƒ} t| ƒttdƒdgƒks0t‚t ddgddggƒ} t| ƒttdƒdgƒks`t‚t ddgddggƒ} t| ƒdks„t‚t ddddgddddgddddgddddggƒ} t| ƒttdƒdgƒksÐt‚t ddddgddddgddddgddddggƒ} t| ƒttdƒdgƒk�st‚d S )Nr   r   r4   r2   r@   rA   )r   r   r   r   r"   )rI   r*   r*   r+   Útest_matrix_to_densityé   s$    


ý


ýr^   )6rH   Zsympy.core.numbersr   r   Zsympy.core.singletonr   Zsympy.core.symbolr   Z(sympy.functions.elementary.miscellaneousr   Zsympy.matrices.denser   Zsympy.physics.quantum.qubitr   r	   r
   r   r   r   r   r   Zsympy.physics.quantum.gater   r   r   r   r   r   Zsympy.physics.quantum.qapplyr   Zsympy.physics.quantum.representr   Zsympy.physics.quantum.shorr   Zsympy.testing.pytestr   Zsympy.physics.quantum.densityr   Zsympy.physics.quantum.tracer   ÚxÚyÚepsilonr,   r1   r>   rE   rJ   rK   rQ   rV   rW   r]   r^   r*   r*   r*   r+   Ú<module>   s4   ( ,		%