o
    g%                     @   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         ?   00   11c                   S   s   t tdgtdgS )Nr   r   )r   r
    r   r   _/var/www/visachat/venv/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state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sJ t|||}
t|
dg}| dt|t| |t| |t|  ksJ 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sJ t|dg}
|
 tddttdd ksJ ttt	j
t	j
tt	j
tdd
}t|dg}t|}
|
 dksJ t|d	g}
|
 tt	j
tdd
ttt	j
tdd
 ksJ 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)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t3tp1tp2r   r   r    	test_doit$   sr   " 
&

""&&"62r=   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
   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sjJ tdt tt   t dtdt tt   t d t|t dksJ d S )Nr)   r   )basis)r   r   r   r   r   r   r   )r/   r0   r%   r7   r   r   r    test_representp   s$   """rB   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 r>   )r   r
   states)r%   rC   r   r   r    test_states   s   (rD   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%   rG   r/   r0   r   r   r    
test_probs   s    rH   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
   	get_state)r/   r0   r%   rC   r   r   r    test_get_state   s   (rK   c                  C   sZ   t d\} }ttd| gtd|g}|d|df}|d | kr)|d |ks+J d S rI   )r   r   r
   get_prob)r/   r0   r%   rG   r   r   r    test_get_prob   s    rM   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|rt|dd}t	|tsyJ |jdksJ |jdksJ d S d S d S )Nr,   r   numpyz1.4.0)min_module_version)formatg9B.?r   scipyfromlistsparse)import_kwargszscipy.sparse)r   r   r.   r   r   r   r   r   r   r"   ndarrayrealimagr   )updownr%   entnpnp_matrQ   matr   r   r    test_entropy   s*   r^   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   )selfbraoptionsr   r   r    _eval_trace   s   z3test_eval_trace.<locals>.TestTimeDepKet._eval_traceN)__name__
__module____qualname__rb   r   r   r   r    TestTimeDepKet   s    rf   zx tr   r   )r   r   r.   r   r   r   r-   r   r   r   dual)rX   rY   r%   r8   rf   r/   k1k2r   r   r    test_eval_trace   s   


rj   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 sJ tt	||dk sJ tt	||tjtd  dk sJ tt	||tjtd  dk sJ tdd |  tj|  }t
|dg|dg}t
|dg|dg}tt	||d	 dk sJ tt	||t	|| dk sJ 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 sJ tt	||d dk sJ tt	||t	|| dk sJ 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   gMbP?r+      rF   rE   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                      rn   ro   rp   r   rq   r   r    r!     rt   )r   r   c                      rn   ro   rp   r   )r/   r0   r   r    r!   !  rt   )r   r   r.   r   Oner   r   r   absr	   r   r   r   r$   )rX   rY   updownup_dmdown_dm	updown_dmupdown2d1d2state1state2state3state4	state1_dm	state2_dm	state3_dmr   )rr   rs   r/   r0   r    test_fidelity   sp   $$$$$ $$$$"r   N)5sympy.core.numbersr   sympy.core.singletonr   sympy.core.symbolr   &sympy.functions.elementary.exponentialr   sympy.externalr   sympy.physics.quantum.densityr   r   r	   sympy.physics.quantum.stater
   r   sympy.physics.quantum.qubitr   sympy.physics.quantum.representr   sympy.physics.quantum.daggerr   sympy.physics.quantum.cartesianr   r   r   r   sympy.physics.quantum.spinr   sympy.physics.quantum.operatorr   sympy.physics.quantum.tracer   sympy.functionsr   sympy.testing.pytestr   !sympy.physics.quantum.matrixutilsr   #sympy.physics.quantum.tensorproductr   r(   r=   r@   rB   rD   rH   rK   rM   r^   rj   r   r   r   r   r    <module>   s:    F