a
    kº”hö%  ã                   @   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$J ‚t ttdƒdtdƒ gtdƒdtdƒ gƒtƒsXJ ‚ttdƒdtdƒ gtdƒdtdƒ gƒ} | jD ]\}}t |tƒsˆJ ‚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   úV/var/www/auris/lib/python3.9/site-packages/sympy/physics/quantum/tests/test_density.pyÚ<lambda>!   ó    z test_eval_args.<locals>.<lambda>)Ú
isinstancer   r
   r   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snJ ‚tt| | ƒdgt| | ƒdgƒ}	dt| | ƒtt| | ƒƒ  dt| | ƒtt| | ƒƒ   |	 ¡ ksÜJ ‚t|| | dgƒ}| ¡ d| | t|ƒ t|ƒ d| | t|ƒ t|ƒ  d| | t|ƒ t|ƒ  d| | t|ƒ t|ƒ  ksnJ ‚t|||ƒ}
t|
dgƒ}| ¡ dt|t|ƒ |t|ƒ |t|ƒ ƒ ks¼J ‚t||ƒ}t||ƒ}t|dg|dgƒ}| ¡ dt|t|ƒ |t|ƒ ƒ dt|t|ƒ |t|ƒ ƒ  ks,J ‚t|| dgƒ}| ¡ dt|t|ƒ |t|ƒ ƒ dt|t|ƒ |t|ƒ ƒ  dt|t|ƒ |t|ƒ ƒ  dt|t|ƒ |t|ƒ ƒ  ksÂJ ‚ttddƒtddƒƒ}t|dgƒ}t|ƒ}
|
 ¡ dksþJ ‚t|d	gƒ}
|
 ¡ tddƒttddƒƒ ks0J ‚t|dgƒ}
|
 ¡ tddƒttddƒƒ ksbJ ‚ttt	j
t	j
ƒtt	j
tdd
ƒƒƒ}t|dgƒ}t|ƒ}
|
 ¡ dksªJ ‚t|d	gƒ}
|
 ¡ tt	j
tdd
ƒƒttt	j
tdd
ƒƒƒ ksìJ ‚t|dgƒ}
|
 ¡ tt	j
t	j
ƒttt	j
t	j
ƒƒ ks&J ‚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   ÚHalfr   )ÚxÚyÚAÚBÚCÚDÚEÚFr$   Ú
d_with_symÚtÚt2Út3Ztp1Ztp2r   r   r   Ú	test_doit$   sr    ÿÿ"ÿÿ ÿþý&ÿ


"ÿ"ÿþý&&"6r8   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sPJ ‚d S ©Nr   r   r   )r   r
   Zapply_opr   )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^J ‚tt| | ƒdgt| | ƒdgƒ}tdt| | ƒtt| | ƒƒ  ƒtdt| | ƒtt| | ƒƒ  ƒ t|ƒksÔJ ‚tdtƒ ttƒ ƒ  tƒ dtdtƒ ttƒ ƒ  tƒ d t|tƒ dks$J ‚d S )Nr'   r   )Zbasis)r   r   r   r   r   r   r   )r,   r-   r$   r4   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sFJ ‚d S r9   )r   r
   Ústates)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>J ‚tdƒ\}}t tdƒ|gtdƒ|gƒ} |  ¡ }|d |kr„|d |ksˆJ ‚d S )Nr   ç      è?r   ç      Ð?r'   )r   r
   Úprobsr   )r$   r@   r,   r-   r   r   r   Ú
test_probsˆ   s    rA   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^J ‚d S ©Nr'   r   r   )r   r   r
   Z	get_state)r,   r-   r$   r<   r   r   r   Útest_get_state”   s    rC   c                  C   sZ   t dƒ\} }ttdƒ| gtdƒ|gƒ}| d¡| d¡f}|d | krR|d |ksVJ ‚d S rB   )r   r   r
   Zget_prob)r,   r-   r$   r@   r   r   r   Útest_get_prob›   s    rD   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sVJ ‚| ¡ tdƒd ksnJ ‚tddd}|r¾t|dd}t|ƒ}t	||j
ƒs¢J ‚|jdks°J ‚|jdks¾J ‚td	d
dgid}|r|rt|dd}t	|tƒsöJ ‚|jdksJ ‚|jdksJ ‚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!   ZndarrayÚrealÚimagr   )ÚupÚdownr$   ÚentÚnpZnp_matrG   Úmatr   r   r   Útest_entropy¢   s&    rQ   c                  C   sÔ   t tjtjƒ} t tjtddƒƒ}t| df|dfƒ}t|ƒ}| ¡ dksJJ ‚G dd„ dtƒ}tdƒ\}}|ddƒ}|dd	ƒ}t|dg|dgƒ}| ¡ dt	||j
ƒ dt	||j
ƒ  ks¸J ‚t|ƒ}| ¡ dksÐJ ‚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__rT   r   r   r   r   ÚTestTimeDepKetÇ   s   rX   zx tr   r   )r   r   r+   r   r   r   r*   r   r   r   Zdual)rL   rM   r$   r5   rX   r,   Zk1Zk2r   r   r   Útest_eval_trace¾   s    

ÿ
rY   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ŽJ ‚t	||ƒdk s J ‚tt	||ƒtjtdƒ  ƒdk sÄJ ‚tt	||ƒtjtdƒ  ƒdk sèJ ‚t
| dgƒ}t
|dgƒ}t
|dgƒ}tt	||ƒd ƒdk s(J ‚tt	||ƒƒdk s@J ‚tt	||ƒtjtdƒ  ƒdk sfJ ‚tt	||ƒtjtdƒ  ƒdk sŒJ ‚tdƒd |  tj|  }t
|dg|dgƒ}t
|dg|dgƒ}tt	||ƒd	 ƒdk sæJ ‚tt	||ƒt	||ƒ ƒdk sJ ‚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˜J ‚t	||ƒdks¬J ‚tt	||ƒdtdƒ  ƒdk sÐJ ‚tt	||ƒdtdƒ  ƒdk sôJ ‚t
|dg|dgƒ}t
|dg|dgƒ}tt	||ƒd ƒdk s4J ‚tt	||ƒd ƒdk sPJ ‚tt	||ƒt	||ƒ ƒdk srJ ‚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‰ g d¢g d¢g d¢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>)r   r   r   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#   )rL   rM   ZupdownZup_dmZdown_dmZ	updown_dmZupdown2Úd1Zd2Zstate1Zstate2Zstate3Zstate4Z	state1_dmZ	state2_dmZ	state3_dmr   )r`   ra   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&   r8   r:   r;   r=   rA   rC   rD   rQ   rY   rd   r   r   r   r   Ú<module>   s8   F