U
    9%e"                     @   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   flipAssertionErrorqubit_values	dimensionrangelen)arrayqbi r*   e/var/www/html/Darija-Ai-API/env/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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    


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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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sttt|dd|kst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  | }qt	|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st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st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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@   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stt ttdtddfgkst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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   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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   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   ( ,		%