
    MZd.                        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      Z0 G d de      Z1 G d de      Z2 G d de      Z3 G d de      Z4 e1d      Z5 e2d      Z6 e3d      Z7 e4d       Z8e6 ee0      f ee6      e0fe5e0f ee5       ee0      fe7e.f ee7       ee.      f ee5e6      e0e0jr                  z  f ee7e8       ee.e/      fe7dz  e.dz  fe7e8z  de7z  z   e.e/z  de.z  z   f ee7e8      e.e/z  e/e.z  z
  f ee7e8      e.e/z  e/e.z  z   f ee6e5      e0jr                  e0z  d    fgZ:d! Z;d" Z< ed#      Z=d$ Z>d% Z? ed&d'd(gi)      Z@d* ZAd+ ZB e'd,      ZC e)d,      ZD e(d-      ZEd. ZFd/ ZGd0 ZHy1)2    )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                   (    e Zd Zed        Zd Zd Zy)AKetc                     t         S N)ABraselfs    L/usr/lib/python3/dist-packages/sympy/physics/quantum/tests/test_represent.py
dual_classzAKet.dual_class           c                 &     | j                   di |S Nr(   _represent_AOpr+   optionss     r,   _represent_default_basiszAKet._represent_default_basis"       "t""3733r/   c                     t         S r(   )Avecr+   basisr5   s      r,   r3   zAKet._represent_AOp%       r/   N)__name__
__module____qualname__classmethodr-   r6   r3    r/   r,   r&   r&      s     4r/   r&   c                       e Zd Zed        Zy)r)   c                     t         S r(   )r&   r*   s    r,   r-   zABra.dual_class+   r.   r/   N)r=   r>   r?   r@   r-   rA   r/   r,   r)   r)   )   s     r/   r)   c                       e Zd Zd Zd Zy)AOpc                 &     | j                   di |S r1   r2   r4   s     r,   r6   zAOp._represent_default_basis2   r7   r/   c                     t         S r(   )Amatr:   s      r,   r3   zAOp._represent_AOp5   r<   r/   Nr=   r>   r?   r6   r3   rA   r/   r,   rE   rE   0       4r/   rE   c                       e Zd Zd Zd Zy)BOpc                 &     | j                   di |S r1   r2   r4   s     r,   r6   zBOp._represent_default_basis;   r7   r/   c                     t         S r(   )Bmatr:   s      r,   r3   zBOp._represent_AOp>   r<   r/   NrI   rA   r/   r,   rL   rL   9   rJ   r/   rL   aABc                  n    t         D ],  } t        | d   t        d      }t        | d         }||k(  r,J  y )Nr   sympyr;   formatr!   )_testsr
   rQ   r   testlhsrhss      r,   test_format_sympyr\   b   s=     Qq9tAwczzr/   c                      t        t        d            t        d      k(  sJ t        t        d            t        d      k(  sJ t        dt        z         dt        z   k(  sJ y )Nr!         ?)r
   r   r   r   rA   r/   r,   test_scalar_sympyr_   i   sS    WQZ GAJ...U3Z E#J...S1Wq(((r/   numpyc                      t         st        d       t        D ]R  } t        | d   t        d      }t        | d         }t        |t              r||k(  j                         rJJ ||k(  rRJ  y )Nnumpy not installed.r   r`   rU   r!   )	npr   rW   r
   rQ   r   
isinstancer   allrX   s      r,   test_format_numpyrf   r   si    #$ Qq9tAwc=)3J##%%%#::r/   c                      t         st        d       t        t        d      d      dk(  sJ t        t	        d      d      dk(  sJ t        dt
        z   d      dk(  sJ y )Nrb   r!   r`   rV   r^         ?      ?)rc   r   r
   r   r   r   rA   r/   r,   test_scalar_numpyrj      sY    #$WQZ0A555U3Z0C777S1WW-;;;r/   scipyfromlistsparse)import_kwargsc                  >   t         st        d       t        st        d       t        D ]r  } t	        | d   t
        d      }t        | d         }t        |t              r6t         j                  j                  ||z
  j                               dk(  rjJ ||k(  rrJ  y )Nrb   scipy not installed.r   scipy.sparserU   r!   g        )rc   r   rk   rW   r
   rQ   r   rd   r   linalgnormtodenserX   s      r,   test_format_scipy_sparseru      s    #$#$ Qq@d1g&c./99>>39"5"5"78C???#::r/   c                      t         st        d       t        st        d       t        t	        d      d      dk(  sJ t        t        d      d      dk(  sJ t        dt        z   d      dk(  sJ y )Nrb   rp   r!   rq   rh   r^   ri   )rc   r   rk   r
   r   r   r   rA   r/   r,   test_scalar_scipy_sparserw      se    #$#$WQZ71<<<U3Z73>>>S1W^4
BBBr/   xXc                  &   t        t              t        t        d      t              j	                         k(  sJ t        t
              t        t
        t        d            j	                         k(  sJ 	 t        t               y # t        $ r Y yw xY w)Nx_1T)	r   x_ketr   r   doitx_brar   x_op	TypeErrorrA   r/   r,   test_innerprod_representr      so    E"l4;&F&K&K&MMMME"l5$u+&F&K&K&MMMM s   4B 	BBc                      t        t        t              dd      } t        t              t	        | d   j
                  t        z  | d   z        k(  sJ y )Nr!   r"   r   )r   r    r   r   r   dual)
basis_ketss    r,   test_operator_representr      sP    !"4T":AqAJ
1**4/
1=>? ? ?r/   c                      t        d      } t        | dd      t        d      gk(  sJ t        | g d      t        d      t        d      t        d      gk(  sJ y )Nfoor!   foo_1)r!   r"   r$   foo_2foo_4)r   r   )rY   s    r,   test_enumerate_statesr      s]    ;DD!Q'DM?:::i!']DM4=IJ J Jr/   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    rH   rO   r9   r&   r)   rE   rL   kbrQ   rR   HrW   r\   r_   rc   rf   rj   rk   ru   rw   r|   r~   r   r   r   r   rA   r/   r,   <module>r      sX   2 2 ' ( % /P P 0 A = E 7 ? ;J J < ; / @1vAw 1v1vsQCj
3 
3 ( (  	IIHH tAYIAYtIAYt!Qdff%1a/d;<T47OqS1Q3YT	AdF"#1tDy49,-Aq49tDy01!Q$&&+q)*/
6) 7
< 	gj8*-EFC 	S	S	
3x?Jr/   