o
    *Î®cØ  ã                   @   s<  d dl mZ d dlmZ d dl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 d dlmZ d d	lmZmZ d d
lmZ d dlmZ d dlmZ eddd\ZZZZedƒZedde gde dggƒZ ede dgde dggƒZ!dd„ Z"dd„ Z#dd„ Z$dd„ Z%dd„ Z&dd „ Z'd!d"„ Z(d#d$„ Z)d%S )&é    )ÚI)Úsymbols)Ú	unchanged)ÚMatrixÚSparseMatrix)Ú
Commutator)ÚTensorProduct)Útensor_product_simp)ÚDagger)ÚQubitÚQubitBra)ÚOuterProduct)ÚDensity)ÚTrzA,B,C,DF©ÚcommutativeÚxé   é   é   é   c                  C   s    t  dd¡} tt| | ƒsJ ‚d S )Nr   r   )r   Údiagr   r   )Úspm© r   úU/tmp/pip-target-vg8gfxp4/lib/python/sympy/physics/quantum/tests/test_tensorproduct.pyÚtest_sparse_matrices   s   r   c                   C   sV   t ttt tƒƒt tt tƒt tƒƒ ksJ ‚t tttƒƒtt tƒt tƒƒks)J ‚d S )N)r
   r   r   ÚAÚBÚmat1Úmat2r   r   r   r   Útest_tensor_product_dagger   s   ÿÿr    c                   C   sŒ   t tt dt ƒtd t ttƒ ksJ ‚t ttƒt ttƒks J ‚t ttƒjdu s*J ‚tt ttƒt ƒs4J ‚t ttƒ tt¡t ttƒksDJ ‚d S )Nr   F)ÚTPr   r   r   Úis_commutativeÚ
isinstanceÚsubsÚCr   r   r   r   Útest_tensor_product_abstract#   s
   ($r&   c                   C   sJ   t tt tt ƒjddt ttƒt ttƒ t ttƒ t ttƒ ks#J ‚d S ©NT)Útensorproduct)r!   r   r   r%   Úexpandr   r   r   r   Útest_tensor_product_expand,   s   &ÿr*   c                   C   s†   t tttƒtƒ ¡ jddt tt tƒt tt tƒ ksJ ‚tt ttƒt ttƒƒ ¡ t ttƒt ttƒ t ttƒt ttƒ  ksAJ ‚d S r'   )r!   ÚCommr   r   r%   Údoitr)   r   r   r   r   Útest_tensor_product_commutator1   s   ÿ&ÿr-   c                   C   s  t tttƒtttƒ ƒttt tt ƒksJ ‚t tttƒt ƒttt tt ƒks+J ‚t ttttƒd  ƒtttd td ƒ ksCJ ‚t ttttƒd  tttƒ ƒtttd t td t ƒ ksdJ ‚t tttƒtttƒt  ƒtttƒttt tt ƒ ks‚J ‚d S )Nr   )r	   r!   r   r   r%   r   ÚDr   r   r   r   Útest_tensor_product_simp8   s
   .(0B@r/   c                   C   s8   t dtdƒtdƒj ƒt dttdƒtdƒƒƒksJ ‚d S )Nr   Ú1)r   r   Údualr   r   r   r   r   r   Útest_issue_5923A   s   ÿr2   c                  C   s:  t ddd\} }}}}}t| |ƒ}t|dgƒ}t|ƒ}| ¡ dt| t| ƒ ƒ t|t|ƒ ƒ ks3J ‚t| ||ƒ}t|dgƒ}t|dgƒ}| ¡ d|  t| ƒ t|t|ƒ ƒ | t|ƒ ksaJ ‚t|ddgƒ}| ¡ dt| t| ƒ ƒ | t|ƒ t|t|ƒ ƒ ks†J ‚t| |ƒ}	t||ƒ}
t|	dg|
dgƒ}t|ƒ}| ¡ dt| t| ƒ ƒ t|t|ƒ ƒ dt|t|ƒ ƒ t|t|ƒ ƒ  ksÇJ ‚t|dgƒ}| ¡ dt| t| ƒ ƒ | t|ƒ dt|t|ƒ ƒ | t|ƒ  ksóJ ‚t|	|
 dgƒ}t|ƒ}| ¡ dt| t| ƒ ƒ t|t|ƒ ƒ dt| t|ƒ ƒ t|t|ƒ ƒ  dt|t| ƒ ƒ t|t|ƒ ƒ  dt|t|ƒ ƒ t|t|ƒ ƒ  ksNJ ‚t|dgƒ}| ¡ d|  t| ƒ t|t|ƒ ƒ d|  t|ƒ t|t|ƒ ƒ  d| t| ƒ t|t|ƒ ƒ  d| t|ƒ t|t|ƒ ƒ  ks›J ‚d S )	NzA B C D E FFr   g      ð?r   r   r   g      à?)r   r   r   r   r,   r
   )r   r   r%   r.   ÚEÚFÚtÚdÚtrÚt2Út3r   r   r   Útest_eval_traceI   sN   
08<

("
ÿ$
ÿ("ÿ"þ"ý$ÿþýr:   N)*Úsympy.core.numbersr   Úsympy.core.symbolr   Úsympy.core.exprr   Úsympy.matricesr   r   Ú sympy.physics.quantum.commutatorr   r+   Ú#sympy.physics.quantum.tensorproductr   r!   r	   Úsympy.physics.quantum.daggerr
   Úsympy.physics.quantum.qubitr   r   Úsympy.physics.quantum.operatorr   Úsympy.physics.quantum.densityr   Úsympy.physics.quantum.tracer   r   r   r%   r.   r   r   r   r   r    r&   r*   r-   r/   r2   r:   r   r   r   r   Ú<module>   s2    		