U
    	Ç-eö%  ã                   @   sL  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mZm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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' d dl(m)Z) d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)S )*é    )ÚRational)ÚS)Úsymbols)Úlog)Úimport_module)ÚDensityÚentropyÚfidelity)ÚKetÚ
TimeDepKet)ÚQubit)Ú	represent)ÚDagger)ÚXKetÚPxKetÚPxOpÚXOp)ÚJzKet)ÚOuterProduct)ÚTr)Úsqrt)Úraises)Úscipy_sparse_matrix)ÚTensorProductc                  C   s²   t ttdƒdgtdƒdgƒtƒs$t‚t ttdƒdtdƒ gtdƒdtdƒ gƒtƒsXt‚ttdƒdtdƒ gtdƒdtdƒ gƒ} | jD ]\}}t |tƒsˆt‚qˆttdd„ ƒ d S )	Nr   ç      à?é   Z00é   Z11c                   S   s   t tdƒgtdƒgƒS )Nr   r   )r   r
   © r   r   úi/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/sympy/physics/quantum/tests/test_density.pyÚ<lambda>!   ó    z test_eval_args.<locals>.<lambda>)	Ú
isinstancer   r
   ÚAssertionErrorr   r   Úargsr   Ú
ValueError)ÚdÚstateZprobr   r   r   Útest_eval_args   s    $ÿÿ*r'   c                  C   s*  t dƒ\} }t ddd\}}}}}}ttƒ dgtƒ dgƒ}dtƒ ttƒ ƒ  dtƒ ttƒ ƒ   | ¡ ksnt‚tt| | ƒdgt| | ƒdgƒ}	dt| | ƒtt| | ƒƒ  dt| | ƒtt| | ƒƒ   |	 ¡ ksÜt‚t|| | dgƒ}| ¡ d| | t|ƒ t|ƒ d| | t|ƒ t|ƒ  d| | t|ƒ t|ƒ  d| | t|ƒ t|ƒ  ksnt‚t|||ƒ}
t|
dgƒ}| ¡ dt|t|ƒ |t|ƒ |t|ƒ ƒ ks¼t‚t||ƒ}t||ƒ}t|dg|dgƒ}| ¡ dt|t|ƒ |t|ƒ ƒ dt|t|ƒ |t|ƒ ƒ  ks,t‚t|| dgƒ}| ¡ dt|t|ƒ |t|ƒ ƒ dt|t|ƒ |t|ƒ ƒ  dt|t|ƒ |t|ƒ ƒ  dt|t|ƒ |t|ƒ ƒ  ksÂt‚ttddƒtddƒƒ}t|dgƒ}t	|ƒ}
|
 ¡ dksþt‚t	|d	gƒ}
|
 ¡ tddƒttddƒƒ ks0t‚t	|dgƒ}
|
 ¡ tddƒttddƒƒ ksbt‚ttt
jt
jƒtt
jtdd
ƒƒƒ}t|dgƒ}t	|ƒ}
|
 ¡ dksªt‚t	|d	gƒ}
|
 ¡ tt
jtdd
ƒƒttt
jtdd
ƒƒƒ ksìt‚t	|dgƒ}
|
 ¡ tt
jt
jƒttt
jt
jƒƒ ks&t‚d S )Núx yzA B C D E FF)Zcommutativer   ç      ð?r   éÿÿÿÿr   r   )r   r   r   r   r   Údoitr"   r   r   r   r   ÚHalfr   )ÚxÚyÚAÚBÚCÚDÚEÚFr%   Ú
d_with_symÚtÚt2Út3Ztp1Ztp2r   r   r   Ú	test_doit$   sr    ÿÿ"ÿÿ ÿþý&ÿ


"ÿ"ÿþý&&"6r9   c                  C   sT   t tdƒdgtdƒdgƒ} |  tƒ ¡t tƒ tdƒ dgtƒ tdƒ dgƒksPt‚d S ©Nr   r   r   )r   r
   Zapply_opr   r"   )r%   r   r   r   Útest_apply_opj   s    ÿr;   c                  C   s(  t dƒ\} }ttƒ dgtƒ dgƒ}tdtƒ ttƒ ƒ  ƒtdtƒ ttƒ ƒ  ƒ t|ƒks^t‚tt| | ƒdgt| | ƒdgƒ}tdt| | ƒtt| | ƒƒ  ƒtdt| | ƒtt| | ƒƒ  ƒ t|ƒksÔt‚tdtƒ ttƒ ƒ  tƒ dtdtƒ ttƒ ƒ  tƒ d t|tƒ dks$t‚d S )Nr(   r   )Zbasis)r   r   r   r   r   r   r"   r   )r-   r.   r%   r5   r   r   r   Útest_representp   s$    ÿÿ"""ÿþÿþr<   c                  C   sJ   t tdƒdgtdƒdgƒ} |  ¡ }|d tdƒkrB|d tdƒksFt‚d S r:   )r   r
   Ústatesr"   )r%   r=   r   r   r   Útest_states‚   s    r>   c                  C   sŒ   t tdƒdgtdƒdgƒ} |  ¡ }|d dkr:|d dks>t‚tdƒ\}}t tdƒ|gtdƒ|gƒ} |  ¡ }|d |kr„|d |ksˆt‚d S )Nr   ç      è?r   ç      Ð?r(   )r   r
   Úprobsr"   r   )r%   rA   r-   r.   r   r   r   Ú
test_probsˆ   s    rB   c                  C   sb   t dƒ\} }ttdƒ| gtdƒ|gƒ}| d¡| d¡f}|d tdƒkrZ|d tdƒks^t‚d S ©Nr(   r   r   )r   r   r
   Z	get_stater"   )r-   r.   r%   r=   r   r   r   Útest_get_state”   s    rD   c                  C   sZ   t dƒ\} }ttdƒ| gtdƒ|gƒ}| d¡| d¡f}|d | krR|d |ksVt‚d S rC   )r   r   r
   Zget_probr"   )r-   r.   r%   rA   r   r   r   Útest_get_prob›   s    rE   c                  C   s  t tjtjƒ} t tjtddƒƒ}t| tjf|tjfƒ}t|ƒ}t|ƒtdƒd ksVt‚| ¡ tdƒd ksnt‚tddd}|r¾t	|dd}t|ƒ}t
||jƒs¢t‚|jdks°t‚|jdks¾t‚td	d
dgid}|r|rt	|dd}t
|tƒsöt‚|jdkst‚|jdkst‚d S )Nr*   r   Únumpyz1.4.0)Zmin_module_version)Úformatgï9úþB.æ?r   ÚscipyÚfromlistÚsparse)Zimport_kwargszscipy.sparse)r   r   r,   r   r   r   r   r"   r   r   r!   ZndarrayÚrealÚimagr   )ÚupÚdownr%   ÚentÚnpZnp_matrH   Úmatr   r   r   Útest_entropy¢   s&    rR   c                  C   sÔ   t tjtjƒ} t tjtddƒƒ}t| df|dfƒ}t|ƒ}| ¡ dksJt‚G dd„ dtƒ}t	dƒ\}}|ddƒ}|dd	ƒ}t|dg|dgƒ}| ¡ dt
||jƒ dt
||jƒ  ks¸t‚t|ƒ}| ¡ dksÐt‚d S )
Nr*   r   r   r)   c                   @   s   e Zd Zdd„ ZdS )z'test_eval_trace.<locals>.TestTimeDepKetc                 [   s   dS )Nr   r   )ÚselfZbraÚoptionsr   r   r   Ú_eval_traceÈ   s    z3test_eval_trace.<locals>.TestTimeDepKet._eval_traceN)Ú__name__Ú
__module__Ú__qualname__rU   r   r   r   r   ÚTestTimeDepKetÇ   s   rY   zx tr   r   )r   r   r,   r   r   r   r+   r"   r   r   r   Zdual)rM   rN   r%   r6   rY   r-   Zk1Zk2r   r   r   Útest_eval_trace¾   s    

ÿ
rZ   c                     s  t tjtjƒ} t tjtddƒƒ}tjtdƒ |  tjtdƒ |  }t| t| ƒ ƒ}t|t|ƒ ƒ}t|t|ƒ ƒ}tt	||ƒd ƒdk sŽt
‚t	||ƒdk s t
‚tt	||ƒtjtdƒ  ƒdk sÄt
‚tt	||ƒtjtdƒ  ƒdk sèt
‚t| dgƒ}t|dgƒ}t|dgƒ}tt	||ƒd ƒdk s(t
‚tt	||ƒƒdk s@t
‚tt	||ƒtjtdƒ  ƒdk sft
‚tt	||ƒtjtdƒ  ƒdk sŒt
‚tdƒd |  tj|  }t|dg|dgƒ}t|dg|dgƒ}tt	||ƒd	 ƒdk sæt
‚tt	||ƒt	||ƒ ƒdk st
‚td
ƒ}	tdƒ}
tjtdƒ |	 tjtdƒ |
  }ttddƒƒ|	 tjtdƒ |
  }t|	dgƒ}t|
dgƒ}t|dgƒ}t	||ƒdks˜t
‚t	||ƒdks¬t
‚tt	||ƒdtdƒ  ƒdk sÐt
‚tt	||ƒdtdƒ  ƒdk sôt
‚t|dg|dgƒ}t|dg|dgƒ}tt	||ƒd ƒdk s4t
‚tt	||ƒd ƒdk sPt
‚tt	||ƒt	||ƒ ƒdk srt
‚ddgddgddgg‰ ddgddgg‰tt‡ ‡fdd„ƒ ddgddgg‰ dddgdddgdddgg‰tt‡ ‡fdd„ƒ d\‰‰tt‡‡fdd„ƒ d S )Nr*   r   r   gü©ñÒMbP?r)   é   r@   r?   gƒÀÊ¡E¶ï?Ú0Ú1r   gffffffæ?g333333Ó?gš™™™™™É?gš™™™™™é?g¬Zd;ßï?c                      s
   t ˆ ˆƒS ©N©r	   r   ©Úmat1Úmat2r   r   r     r    ztest_fidelity.<locals>.<lambda>c                      s
   t ˆ ˆƒS r^   r_   r   r`   r   r   r     r    )r   r   c                      s
   t ˆ ˆƒS r^   r_   r   )r-   r.   r   r   r   !  r    )r   r   r,   r   ZOner   r   r   Úabsr	   r"   r   r   r   r$   )rM   rN   ZupdownZup_dmZdown_dmZ	updown_dmZupdown2Zd1Zd2Zstate1Zstate2Zstate3Zstate4Z	state1_dmZ	state2_dmZ	state3_dmr   )ra   rb   r-   r.   r   Útest_fidelityÖ   sp    $$$&&"$$$$"þÿÿþrd   N)5Zsympy.core.numbersr   Zsympy.core.singletonr   Zsympy.core.symbolr   Z&sympy.functions.elementary.exponentialr   Zsympy.externalr   Zsympy.physics.quantum.densityr   r   r	   Zsympy.physics.quantum.stater
   r   Zsympy.physics.quantum.qubitr   Zsympy.physics.quantum.representr   Zsympy.physics.quantum.daggerr   Zsympy.physics.quantum.cartesianr   r   r   r   Zsympy.physics.quantum.spinr   Zsympy.physics.quantum.operatorr   Zsympy.physics.quantum.tracer   Zsympy.functionsr   Zsympy.testing.pytestr   Z!sympy.physics.quantum.matrixutilsr   Z#sympy.physics.quantum.tensorproductr   r'   r9   r;   r<   r>   rB   rD   rE   rR   rZ   rd   r   r   r   r   Ú<module>   s8   F