o
    GZŽ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ƒs,J ‚ttdƒdtdƒ gtdƒdtdƒ gƒ} | jD ]\}}t |tƒsOJ ‚qDt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   úW/var/www/auris/lib/python3.10/site-packages/sympy/physics/quantum/tests/test_density.pyÚ<lambda>!   s    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s7J ‚tt| | ƒdgt| | ƒdgƒ}	dt| | ƒtt| | ƒƒ  dt| | ƒtt| | ƒƒ   |	 ¡ ksnJ ‚t|| | dgƒ}| ¡ d| | t|ƒ t|ƒ d| | t|ƒ t|ƒ  d| | t|ƒ t|ƒ  d| | t|ƒ t|ƒ  ks¶J ‚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s–J ‚t|dgƒ}
|
 ¡ tddƒttddƒƒ ks¯J ‚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2r7   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s(J ‚d S ©Nr   r   r   )r   r
   Zapply_opr   )r#   r   r   r   Útest_apply_opj   s   ÿr9   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sjJ ‚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#   r3   r   r   r   Útest_representp   s$   ÿÿ"""ÿþÿþr:   c                  C   sJ   t tdƒdgtdƒdgƒ} |  ¡ }|d tdƒkr!|d tdƒks#J ‚d S r8   )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rB|d |ksDJ ‚d S )Nr   ç      è?r   ç      Ð?r&   )r   r
   Úprobsr   )r#   r?   r+   r,   r   r   r   Ú
test_probsˆ   s    r@   c                  C   sb   t dƒ\} }ttdƒ| gtdƒ|gƒ}| d¡| d¡f}|d tdƒkr-|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   (rB   c                  C   sZ   t dƒ\} }ttdƒ| gtdƒ|gƒ}| d¡| d¡f}|d | kr)|d |ks+J ‚d S rA   )r   r   r
   Zget_prob)r+   r,   r#   r?   r   r   r   Útest_get_prob›   s    rC   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s+J ‚| ¡ tdƒd ks7J ‚tddd}|r_t|dd}t|ƒ}t	||j
ƒsQJ ‚|jdksXJ ‚|jdks_J ‚td	d
dgid}|r‡|r‰t|dd}t	|tƒsyJ ‚|jdks€J ‚|jdks‹J ‚d S d S 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_matrF   Úmatr   r   r   Útest_entropy¢   s*   ûrP   c                  C   sÔ   t tjtjƒ} t tjtddƒƒ}t| df|dfƒ}t|ƒ}| ¡ dks%J ‚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shJ ‚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__rS   r   r   r   r   ÚTestTimeDepKetÇ   s    rW   zx tr   r   )r   r   r*   r   r   r   r)   r   r   r   Zdual)rK   rL   r#   r4   rW   r+   Zk1Zk2r   r   r   Útest_eval_trace¾   s   


ÿrX   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 sGJ ‚t	||ƒdk sPJ ‚tt	||ƒtjtdƒ  ƒdk sbJ ‚tt	||ƒtjtdƒ  ƒdk stJ ‚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 s°J ‚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sFJ ‚t	||ƒdksPJ ‚tt	||ƒdtdƒ  ƒdk sbJ ‚tt	||ƒdtdƒ  ƒdk stJ ‚t
|dg|dgƒ}t
|dg|dgƒ}tt	||ƒd ƒdk s”J ‚tt	||ƒd ƒdk s¢J ‚tt	||ƒt	||ƒ ƒdk s³J ‚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                      ó
   t ˆ ˆƒS ©N©r	   r   ©Úmat1Úmat2r   r   r     ó   
 ztest_fidelity.<locals>.<lambda>)r   r   r   c                      r\   r]   r^   r   r_   r   r   r     rb   )r   r   c                      r\   r]   r^   r   )r+   r,   r   r   r   !  rb   )r   r   r*   r   ZOner   r   r   Úabsr	   r   r   r   r"   )rK   rL   ZupdownZup_dmZdown_dmZ	updown_dmZupdown2Z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%   r7   r9   r:   r<   r@   rB   rC   rP   rX   rd   r   r   r   r   Ú<module>   s:    F