o
    *ήc.                     @   s  d dl 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mZmZmZ d dl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 d dlmZ d dl m!Z!m"Z"m#Z#m$Z$m%Z% d dl&m'Z'm(Z(m)Z) d dl*m+Z+ d dl,m-Z- edege dggZ.eddgddggZ/edgeggZ0G dd deZ1G dd deZ2G dd deZ3G dd deZ4e1dZ5e2dZ6e3dZ7e4d Z8e6ee0fee6e0fe5e0fee5ee0fe7e.fee7ee.fee5e6e0e0j9 fee7e8ee.e/fe7d e.d fe7e8 de7  e.e/ de.  fee7e8e.e/ e/e.  fee7e8e.e/ e/e.  fee6e5e0j9e0 d  fgZ:d!d" Z;d#d$ Z<ed%Z=d&d' Z>d(d) Z?ed*d+d,gid-Z@d.d/ ZAd0d1 ZBe'd2ZCe)d2ZDe(d3ZEd4d5 ZFd6d7 ZGd8d9 ZHd:S );    )FloatIInteger)Matrix)import_module)skip)Dagger)	representrep_innerproductrep_expectationenumerate_states)BraKet)OperatorOuterProduct)TensorProduct)matrix_tensor_product)
Commutator)AntiCommutator)InnerProduct)numpy_ndarrayscipy_sparse_matrixto_numpyto_scipy_sparseto_sympy)XKetXOpXBra)qapply)operators_to_state            c                   @   s(   e Zd Zedd Zdd Zdd ZdS )AKetc                 C      t S N)ABraself r*   Q/tmp/pip-target-vg8gfxp4/lib/python/sympy/physics/quantum/tests/test_represent.py
dual_class      zAKet.dual_classc                 K      | j di |S Nr&   _represent_AOpr)   optionsr*   r*   r+   _represent_default_basis"      zAKet._represent_default_basisc                 K   r%   r&   )Avecr)   basisr3   r*   r*   r+   r1   %      zAKet._represent_AOpN)__name__
__module____qualname__classmethodr,   r4   r1   r*   r*   r*   r+   r$      s
    
r$   c                   @   s   e Zd Zedd ZdS )r'   c                 C   r%   r&   )r$   r(   r*   r*   r+   r,   +   r-   zABra.dual_classN)r:   r;   r<   r=   r,   r*   r*   r*   r+   r'   )   s    r'   c                   @      e Zd Zdd Zdd ZdS )AOpc                 K   r.   r/   r0   r2   r*   r*   r+   r4   2   r5   zAOp._represent_default_basisc                 K   r%   r&   )Amatr7   r*   r*   r+   r1   5   r9   zAOp._represent_AOpNr:   r;   r<   r4   r1   r*   r*   r*   r+   r?   0       r?   c                   @   r>   )BOpc                 K   r.   r/   r0   r2   r*   r*   r+   r4   ;   r5   zBOp._represent_default_basisc                 K   r%   r&   )Bmatr7   r*   r*   r+   r1   >   r9   zBOp._represent_AOpNrA   r*   r*   r*   r+   rC   9   rB   rC   aABc                  C   s8   t D ]} t| d tdd}t| d }||ksJ qd S )Nr   sympyr8   formatr    )_testsr	   rF   r   testlhsrhsr*   r*   r+   test_format_sympyb   s
   rP   c                   C   sL   t tdtdksJ t tdtdksJ t dt dt ks$J d S )Nr          ?)r	   r   r   r   r*   r*   r*   r+   test_scalar_sympyi   s   rR   numpyc                  C   s`   t std tD ]%} t| d tdd}t| d }t|tr'||k s&J q||ks-J qd S )Nnumpy not installed.r   rS   rI   r    )	npr   rK   r	   rF   r   
isinstancer   allrL   r*   r*   r+   test_format_numpyr   s   
rX   c                   C   sX   t std ttddddksJ ttddddksJ tdt dddks*J d S )NrT   r    rS   rJ   rQ         ?      ?)rU   r   r	   r   r   r   r*   r*   r*   r+   test_scalar_numpy   s
   r[   scipyfromlistsparse)import_kwargsc                  C   sx   t std tstd tD ]+} t| d tdd}t| d }t|tr3t j	
||  dks2J q||ks9J qd S )NrT   scipy not installed.r   scipy.sparserI   r    g        )rU   r   r\   rK   r	   rF   r   rV   r   linalgnormtodenserL   r*   r*   r+   test_format_scipy_sparse   s   
re   c                   C   sd   t std tstd ttddddksJ ttddddks$J tdt dddks0J d S )NrT   r`   r    ra   rY   rQ   rZ   )rU   r   r\   r	   r   r   r   r*   r*   r*   r+   test_scalar_scipy_sparse   s   rf   xXc                   C   s`   t tttdt ksJ t ttttd ksJ zt t W d S  ty/   Y dS w )Nx_1T)	r
   x_ketr   r   doitx_brar   x_op	TypeErrorr*   r*   r*   r+   test_innerprod_represent   s   ro   c                  C   s:   t ttdd} ttt| d jt | d  ksJ d S )Nr    r!   r   )r   r   rm   r   r   dual)
basis_ketsr*   r*   r+   test_operator_represent   s   rr   c                  C   sN   t d} t| ddt dgksJ t| g dt dt dt dgks%J d S )Nfoor    foo_1)r    r!   r#   foo_2foo_4)r   r   )rM   r*   r*   r+   test_enumerate_states   s   rw   N)Isympy.core.numbersr   r   r   sympy.matrices.denser   sympy.externalr   sympy.testing.pytestr   sympy.physics.quantum.daggerr   sympy.physics.quantum.representr	   r
   r   r   sympy.physics.quantum.stater   r   sympy.physics.quantum.operatorr   r   #sympy.physics.quantum.tensorproductr   r    sympy.physics.quantum.commutatorr   $sympy.physics.quantum.anticommutatorr   "sympy.physics.quantum.innerproductr   !sympy.physics.quantum.matrixutilsr   r   r   r   r   sympy.physics.quantum.cartesianr   r   r   sympy.physics.quantum.qapplyr   !sympy.physics.quantum.operatorsetr   r@   rD   r6   r$   r'   r?   rC   kbrF   rG   HrK   rP   rR   rU   rX   r[   r\   re   rf   rj   rl   rm   ro   rr   rw   r*   r*   r*   r+   <module>   sp    		

	

