U
    ZÊ¹j9  ã                   @   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- d dlm.Z. edege dggƒZ/eddgddggƒZ0edgeggƒZ1G dd„ deƒZ2G dd„ deƒZ3G dd„ deƒZ4G dd„ deƒZ5e2dƒZ6e3dƒZ7e4d ƒZ8e5d!ƒZ9e7ee1ƒfee7ƒe1fe6e1fee6ƒee1ƒfe8e/fee8ƒee/ƒfee6e7ƒe1e1j: fee8e9ƒee/e0ƒfe8d e/d fe8e9 de8  e/e0 de/  fee8e9ƒe/e0 e0e/  fee8e9ƒe/e0 e0e/  fee7e6ƒe1j:e1 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.�ZAd/d0„ ZBd1d2„ ZCe'd3ƒZDe)d3ƒZEe(d4ƒZFd5d6„ ZGd7d8„ ZHd9d:„ ZId;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)Úraisesé   é   é   é   c                   @   s(   e Zd Zedd„ ƒZdd„ Zdd„ ZdS )ÚAKetc                 C   s   t S ©N)ÚABra©Úself© r*   úi/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/physics/quantum/tests/test_represent.pyÚ
dual_class   s    zAKet.dual_classc                 K   s   | j d|ŽS ©N)N©Ú_represent_AOp©r)   Úoptionsr*   r*   r+   Ú_represent_default_basis#   s    zAKet._represent_default_basisc                 K   s   t S r&   )ÚAvec©r)   Úbasisr1   r*   r*   r+   r/   &   s    zAKet._represent_AOpN)Ú__name__Ú
__module__Ú__qualname__Úclassmethodr,   r2   r/   r*   r*   r*   r+   r%      s   
r%   c                   @   s   e Zd Zedd„ ƒZdS )r'   c                 C   s   t S r&   )r%   r(   r*   r*   r+   r,   ,   s    zABra.dual_classN)r6   r7   r8   r9   r,   r*   r*   r*   r+   r'   *   s   r'   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚAOpc                 K   s   | j d|ŽS r-   r.   r0   r*   r*   r+   r2   3   s    zAOp._represent_default_basisc                 K   s   t S r&   )ÚAmatr4   r*   r*   r+   r/   6   s    zAOp._represent_AOpN©r6   r7   r8   r2   r/   r*   r*   r*   r+   r:   1   s   r:   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚBOpc                 K   s   | j d|ŽS r-   r.   r0   r*   r*   r+   r2   <   s    zBOp._represent_default_basisc                 K   s   t S r&   )ÚBmatr4   r*   r*   r+   r/   ?   s    zBOp._represent_AOpNr<   r*   r*   r*   r+   r=   :   s   r=   ÚaÚAÚBc                  C   s8   t D ].} t| d tdd�}t| d ƒ}||kst‚qd S )Nr   Zsympy©r5   Úformatr!   )Ú_testsr	   r@   r   ÚAssertionError©ÚtestÚlhsÚrhsr*   r*   r+   Útest_format_sympyc   s    rJ   c                   C   sL   t tdƒƒtdƒkst‚t tdƒƒtdƒks0t‚t dt ƒdt ksHt‚d S )Nr!   ç      ð?)r	   r   rE   r   r   r*   r*   r*   r+   Útest_scalar_sympyj   s    rL   Únumpyc                  C   s`   t stdƒ tD ]J} t| d tdd�}t| d ƒ}t|tƒrN||k ¡ sZt	‚q||kst	‚qd S )Núnumpy not installed.r   rM   rB   r!   )
Únpr   rD   r	   r@   r   Ú
isinstancer   ÚallrE   rF   r*   r*   r+   Útest_format_numpys   s    
rR   c                   C   sX   t stdƒ ttdƒdd�dks$t‚ttdƒdd�dks<t‚tdt dd�dksTt‚d S )NrN   r!   rM   ©rC   rK   ù      ð?      ð?)rO   r   r	   r   rE   r   r   r*   r*   r*   r+   Útest_scalar_numpy€   s
    rU   ÚscipyÚfromlistÚsparse)Zimport_kwargsc                  C   sx   t stdƒ tstdƒ tD ]V} t| d tdd�}t| d ƒ}t|tƒrft j	 
||  ¡ ¡dksrt‚q||kst‚qd S )NrN   úscipy not installed.r   úscipy.sparserB   r!   g        )rO   r   rV   rD   r	   r@   r   rP   r   ZlinalgZnormZtodenserE   rF   r*   r*   r+   Útest_format_scipy_sparseŒ   s    
r[   c                   C   sd   t stdƒ tstdƒ ttdƒdd�dks0t‚ttdƒdd�dksHt‚tdt dd�dks`t‚d S )NrN   rY   r!   rZ   rS   rK   rT   )rO   r   rV   r	   r   rE   r   r   r*   r*   r*   r+   Útest_scalar_scipy_sparse›   s    r\   ÚxÚXc                   C   sN   t tƒttdƒtƒ ¡ kst‚t tƒtttdƒƒ ¡ ks<t‚tt	dd„ ƒ d S )NZx_1c                   S   s   t tƒS r&   )r
   Úx_opr*   r*   r*   r+   Ú<lambda>­   ó    z*test_innerprod_represent.<locals>.<lambda>)
r
   Úx_ketr   r   ZdoitrE   Úx_brar   r    Ú	TypeErrorr*   r*   r*   r+   Útest_innerprod_representª   s    re   c                  C   s:   t ttƒddƒ} ttƒt| d jt | d  ƒks6t‚d S )Nr!   r"   r   )r   r   r_   r   r   ZdualrE   )Z
basis_ketsr*   r*   r+   Útest_operator_represent°   s    ÿÿrf   c                  C   sP   t dƒ} t| ddƒt dƒgks"t‚t| dddgƒt dƒt dƒt dƒgksLt‚d S )NZfoor!   Zfoo_1r"   r$   Zfoo_2Zfoo_4)r   r   rE   )rG   r*   r*   r+   Útest_enumerate_states¶   s     ÿÿrg   N)JZsympy.core.numbersr   r   r   Zsympy.matrices.denser   Zsympy.externalr   Zsympy.testing.pytestr   Zsympy.physics.quantum.daggerr   Zsympy.physics.quantum.representr	   r
   r   r   Zsympy.physics.quantum.stater   r   Zsympy.physics.quantum.operatorr   r   Z#sympy.physics.quantum.tensorproductr   r   Z sympy.physics.quantum.commutatorr   Z$sympy.physics.quantum.anticommutatorr   Z"sympy.physics.quantum.innerproductr   Z!sympy.physics.quantum.matrixutilsr   r   r   r   r   Zsympy.physics.quantum.cartesianr   r   r   Zsympy.physics.quantum.qapplyr   Z!sympy.physics.quantum.operatorsetr   r    r;   r>   r3   r%   r'   r:   r=   ÚkÚbr@   rA   ÚHrD   rJ   rL   rO   rR   rU   rV   r[   r\   rb   rc   r_   re   rf   rg   r*   r*   r*   r+   Ú<module>   sp   		

é	
