U
    0e"                     @   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stt d
}d S )Nr      Z00110Z00111Z00100   10110)r   r   r   r   r      110)r   ZflipAssertionErrorqubit_valuesZ	dimensionrangelen)arrayqbi r(   J/tmp/pip-unpacked-wheel-_6tpq7m6/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sttdd}| |tdkstd S )Nr   r      Znqubits)r   r   
dual_classr!   r   HZ_eval_innerproduct_QubitBrar   )r&   Zqb_brar(   r(   r)   test_QubitBra(   s    


r/   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stt ddd} ttd	t| ksttt ddt| kstt d
} |  d
kst| jdkstt dd} | jdkst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st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5r6   r(   r(   r(   r)   r7   a   r8   c                   S   s
   t ddS )Nr   r9   r6   r(   r(   r(   r)   r7   b   r8   c                   S   s   t dddS )Nr   r9   r,   r6   r(   r(   r(   r)   r7   c   r8   c                   S   s   t dddS )Nr   T)Zbad_argr6   r(   r(   r(   r)   r7   d   r8   )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sttt|dd|kstd S )	Nr   r5   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rC   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  | }qt	|dd}t
|}t|}| }| }||ks6td S )Nr+   r5      r,   )r   intrandomr   r   r   r   r   r#   r   r   r
   rA   r!   )ZgatesZcircuitr'   matZstatesZ	state_repr(   r(   r)   test_apply_represent_equalityo   s*        rH   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stt||kstd S )Nr   r   r5   )r   r   r
   r!   r   r   rA   )r&   rG   rB   Zonesr(   r(   r)   test_matrix_to_qubits   s$    (,




$rI   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std S )Nza br    Z111r   F)	normalize)r   r   r	   	conjugater!   r   )abrB   r(   r(   r)   test_measure_normalize   s    .
&rO   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st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st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st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>   rJ   r   )r   r5   r+   Z00001r   Z11111)r   r5   )r+   r   )r   r5   r+   Z1111Z11011011Z1000)r   r   r+   r   )r   r	   r   Halfr!   rE   r   r   )rB   Zstate1state2r(   r(   r)   test_measure_partial   sB    ,0"
  $
rT   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stt ttdtddfgkstd S )	Nr@   r   r>   r   r5   r?   r   r0   )r   r   r!   r   rR   r   r   r   )rB   rS   r(   r(   r)   test_measure_all   s    
$"rU   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stt|d}| dtt ddg dtt ddg  kst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std S )Nr   Z01010g333333?g?g      ?r   Z0101r   rQ   r   r1   Z0110r5   r+   r?   r>   r@   g      ?r0   r2   )r   r   r   Zdoitr!   r   )Zq1Zq2dtqr(   r(   r)   test_eval_trace   s:    






rY   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st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st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   r2   r0   r>   r?   )r   r   r   r   r!   )rG   r(   r(   r)   test_matrix_to_density   s$    





rZ   )6rF   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*   r/   r<   rC   rH   rI   rO   rT   rU   rY   rZ   r(   r(   r(   r)   <module>   s4   ( ,		%