o
    	¢Äi7$  ć                   @   sP  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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 Z0dd Z1dd Z2dd  Z3d!d" Z4d#d$ Z5d%d& Z6d'd( Z7dS ))é    N)ŚIntegerŚRational)ŚS)Śsymbols)Śsqrt)ŚMatrix)	Śmeasure_allŚmeasure_all_oneshotŚ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°   g d¢} t d}| d”t dksJ | d”t dksJ | d”t dks)J |jdks0J |jd	ks7J td	D ]}|| | d|  ksIJ q;t|d	ksRJ t d
}d S )N)r   r   é   r   r   Z00110r   Z00111r   Z00100é   Ś10110é   Ś110)r   ŚflipŚqubit_valuesŚ	dimensionŚrangeŚlen)ŚarrayŚqbŚi© r*   ś`/home/kim/smarthome/.venv/lib/python3.10/site-packages/sympy/physics/quantum/tests/test_qubit.pyŚ
test_Qubit   s   r,   c                  C   s“   t d} td}|  ” tksJ | ” t ksJ t ddd} tddd}t| ddjt|ddks3J t dd} tdd}|  |”tdksHJ tdd}|  |”tdksXJ d S )Nr   r   é   ©Znqubits)r   r   Ś
dual_classr   Ś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J td}tt |t|ks"J t ddd} ttdt| ks4J tt dt| ks@J t ddd} ttd	t| ksRJ tt ddt| ks_J t d
} |  ” d
kskJ | jdksrJ t dd} | jdks~J t dt ddksJ t d} td}|  ” tksJ | ” t ks”J t d} td}|  |”tdks“J t d} td}|  |”tdksĒJ 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   ó
   t ddS )Nr   r   ©r   r*   r*   r*   r+   Ś<lambda>_   ó   
 ztest_IntQubit.<locals>.<lambda>c                   S   s   t dS )NŚ5r:   r*   r*   r*   r+   r;   a   s    c                   S   r9   )Nr    r=   r:   r*   r*   r*   r+   r;   b   r<   c                   S   ó   t dddS )Nr    r=   r.   r:   r*   r*   r*   r+   r;   c   ó    c                   S   r>   )Nr    T)Zbad_argr:   r*   r*   r*   r+   r;   d   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>   
rB   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sAJ tt|dd|ksMJ d S )	Nr   r8   Ś01Ś10r   Ś00Ś11r.   )r   r   r   r   r   Śexpandr   r   )ŚstateZ
state_gateZstate_expandedr*   r*   r+   Śtest_superposition_of_statesf   s
   (0rI   c               
   C   s8  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  | }qot	|dd}t
|}t|}| ” }| ” }||ksJ d S )Nr-   r8   é   r.   )r   ŚintŚrandomr   r   r   r   r   r%   r   r   r   rG   )ZgatesZcircuitr)   ŚmatZstatesZ	state_repr*   r*   r+   Śtest_apply_represent_equalityo   s"   $$ż*žrN   c                  C   sę   t dddd} tg d¢}t|| ksJ t| |ksJ 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g d¢ }t|| ” ksiJ t||ksqJ d S )Nr   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r8   r   )r   r   r   r   r   r   r   r   )r   r   r   r   r   rG   )r(   rM   rH   Zonesr*   r*   r+   Śtest_matrix_to_qubits   s$   ,
’
’
’
ž
žrO   c                  C   s¢   t d\} }| td |td  }t|ddd| td | |  ”  f|td || ”  fgks3J t|ddtd| |  ”  ftd|| ”  fgksOJ d S )Nza br!   Z111©r   F)Ś	normalize)r   r   r
   Ś	conjugater   )ŚaŚbrH   r*   r*   r+   Śtest_measure_normalize   s   .’
&’rU   c                  C   s  t dt d } t| dt dtjft dtjfgksJ t| tdt dtjft dtjfgks4J t| dt| dd d d ksEJ 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{J t|dt|dksJ t|dt d	tddft dtd
dfgks J 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ŪJ 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	J d S )NrC   rD   rP   r   )r   é’’’’r8   r-   Z00001r   Z11111)r   r8   )r-   r   )r   r8   r-   Z1111Z1101Ś1011Z1000)r   r   r-   r   )r   r
   r   ŚHalfrK   r   r   )rH   Zstate1Śstate2r*   r*   r+   Śtest_measure_partial   sB   ’’’,0’"’  $’’’’’’rZ   c                  C   sŠ   t tdtddfgksJ tdtd } t | tdtjftdtjfgks+J tdtd dtd td  }t |tdtddftdtddfgksUJ t ttdtddfgksfJ d S )	NrF   r   rD   r    r8   rE   r   r2   )r   r   r   rX   r   r   r   )rH   rY   r*   r*   r+   Śtest_measure_all·   s   
’$"’&r[   c                   C   sn   t  d” ttdtdksJ ttdtdksJ ttdtd tdtd  tdks5J d S )Né*   rF   r4   r2   r8   )rL   Śseedr	   r   r   r*   r*   r*   r+   Śtest_measure_all_oneshotÄ   s   
"’r^   c                  C   s¾  t d} t d}t| dg|dg}t|}| ” dksJ t|d}| ” dtt ddg dtt d	dg  ks<J t|d
}| ” dtt ddg dtt ddg  ks[J t|d}| ” dtt ddg dtt ddg  kszJ t|g d¢}| ” dksJ t|g d¢}| ” dtt ddg dtt ddg  ksŖJ 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ŻJ d S )Nr   Z01010g333333ć?gŁ?g      š?r   Z0101r   rW   r   r3   Z0110r8   )r   r   r8   r-   r   )r8   r   r-   rE   rD   rF   g      ą?r2   r4   )r   r   r   Zdoitr   )Śq1Śq2ŚdŚtŚqr*   r*   r+   Śtest_eval_traceĶ   s:   

’

’

’
’
’rd   c                  C   s   t ddgddgg} t| ttddgksJ t ddgddgg} t| ttddgks0J t ddgddgg} t| dksBJ t g d¢g d¢g d¢g d¢g} t| ttddgks`J t g d¢g d¢g d¢g d¢g} t| ttd	dgks~J d S )
Nr   r   r4   r2   )r   r   r   r   )r   r   r   r   rD   r7   rE   )r   r   r   r   )rM   r*   r*   r+   Śtest_matrix_to_densityņ   s$   żż re   )8rL   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   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   rB   rI   rN   rO   rU   rZ   r[   r^   rd   re   r*   r*   r*   r+   Ś<module>   s8    , ,			%