a
    kh7$                     @   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sRJ |jdks`J |jd	ksnJ td	D ]}|| | d|  ksvJ qvt|d	ksJ t d
}d S )N)r   r      r   r   Z00110r   Z00111r   Z00100   10110   110)r   Zflipqubit_valuesZ	dimensionrangelen)arrayqbi r(   T/var/www/auris/lib/python3.9/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s0J t ddd} tddd}t| ddjt|ddksfJ t dd} tdd}| |tdksJ tdd}| |tdksJ d S )Nr   r      Znqubits)r   r   
dual_classr   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$J td}tt |t|ksDJ t ddd} ttdt| kshJ tt dt| ksJ t ddd} ttd	t| ksJ tt ddt| ksJ t d
} |  d
ksJ | jdksJ t dd} | jdksJ t dt ddksJ t d} td}|  tks6J | t ksHJ t d} td}| |tdkspJ t d} td}| |tdksJ 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5r7   r(   r(   r(   r)   r8   a   r9   c                   S   s
   t ddS )Nr    r:   r7   r(   r(   r(   r)   r8   b   r9   c                   S   s   t dddS )Nr    r:   r,   r7   r(   r(   r(   r)   r8   c   r9   c                   S   s   t dddS )Nr    T)Zbad_argr7   r(   r(   r(   r)   r8   d   r9   )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sJ tt|dd|ksJ d S )	Nr   r6   0110r   0011r,   )r   r   r   r   r   expandr   r   )stateZ
state_gateZstate_expandedr(   r(   r)   test_superposition_of_statesf   s
    (0rD   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s6J d S )Nr+   r6      r,   )r   intrandomr   r   r   r   r   r#   r   r   r   rB   )ZgatesZcircuitr'   matZstatesZ	state_repr(   r(   r)   test_apply_represent_equalityo   s"    $$*rI   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sJ t||ksJ d S )Nr   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r6   r   )r   r   r   r   r   r   r   r   )r   r   r   r   r   rB   )r&   rH   rC   Zonesr(   r(   r)   test_matrix_to_qubits   s$    ,




rJ   c                  C   s   t d\} }| td |td  }t|ddd| td | |   f|td ||  fgksfJ t|ddtd| |   ftd||  fgksJ d S )Nza br!   Z111r   F)	normalize)r   r   r
   	conjugater   )abrC   r(   r(   r)   test_measure_normalize   s    .
&rP   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shJ t| dt| dd d d ksJ 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sJ t|dt|dksJ t|dt d	tddft dtd
dfgksDJ 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sJ 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 )Nr>   r?   rK   r   )r   r6   r+   Z00001r   Z11111)r   r6   )r+   r   )r   r6   r+   Z1111Z11011011Z1000)r   r   r+   r   )r   r
   r   HalfrF   r   r   )rC   Zstate1state2r(   r(   r)   test_measure_partial   sB    ,0"
  $
rU   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sVJ tdtd dtd td  }t |tdtddftdtddfgksJ t ttdtddfgksJ d S )	NrA   r   r?   r    r6   r@   r   r0   )r   r   r   rS   r   r   r   )rC   rT   r(   r(   r)   test_measure_all   s    
$"rV   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sjJ d S )N*   rA   r2   r0   r6   )rG   seedr	   r   r   r(   r(   r(   r)   test_measure_all_oneshot   s    
"rY   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sxJ t|d
}| dtt ddg dtt ddg  ksJ t|d}| dtt ddg dtt ddg  ksJ t|g d}| dksJ t|g d}| dtt ddg dtt ddg  ksXJ 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sJ d S )Nr   Z01010g333333?g?g      ?r   Z0101r   rR   r   r1   Z0110r6   )r   r   r6   r+   r   )r6   r   r+   r@   r?   rA   g      ?r0   r2   )r   r   r   Zdoitr   )Zq1Z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s0J 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| dksJ t g dg dg dg dg} t| ttddgksJ t g dg dg dg dg} t| ttd	dgksJ d S )
Nr   r   r2   r0   )r   r   r   r   )r   r   r   r   r?   r5   r@   )r   r   r   r   )rH   r(   r(   r)   test_matrix_to_density   s$    r^   )8rG   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*   r/   r=   rD   rI   rJ   rP   rU   rV   rY   r]   r^   r(   r(   r(   r)   <module>   s6   , ,			%