
    \h                         S r SSKJr  SSKJr  SSKJr  SSKJr  SSK	J
r
Jr  SSKJr  / SQr\" S	5      r\(       d   " S
 S5      rO\R"                  r\" SSS/0S9r\(       d   " S S5      rSrO\R(                  r\R*                  rS rS rS rS rS rS rS rS rS rS rS r S r!S r"S  r#S! r$S" r%S# r&S$ r'S% r(S& r)S' r*S( r+g))z<Utilities to deal with sympy.Matrix, numpy and scipy.sparse.    )Expr)I)S
MatrixBase)eyezeros)import_module)numpy_ndarrayscipy_sparse_matrixsympy_to_numpysympy_to_scipy_sparsenumpy_to_sympyscipy_sparse_to_sympyflatten_scalarmatrix_daggerto_sympyto_numpyto_scipy_sparsematrix_tensor_productmatrix_zerosnumpyc                       \ rS rSrSrg)r       N__name__
__module____qualname____firstlineno____static_attributes__r       Y/var/www/auris/envauris/lib/python3.13/site-packages/sympy/physics/quantum/matrixutils.pyr   r          r"   r   scipyfromlistsparse)import_kwargsc                       \ rS rSrSrg)r   &   r   Nr   r   r"   r#   r   r   &   r$   r"   r   Nc                 j   [         (       d  [        eUR                  SS5      n[        U [        5      (       a"  [         R                  U R                  5       US9$ [        U [        5      (       a7  U R                  (       d  U R                  (       d
  U [        :X  a  [        U 5      $ [        SU -  5      ezBConvert a SymPy Matrix/complex number to a numpy matrix or scalar.dtypecomplexr-   z.Expected MatrixBase or complex scalar, got: %r)npImportErrorget
isinstancer   arraytolistr   	is_Numberis_NumberSymbolr   r.   	TypeErrormoptionsr-   s      r#   r   r   .   s    2KK+E!Z  xx
%x00	At		;;!++qAv1:
DqH
IIr"   c                    [         (       a  [        (       d  [        eUR                  SS5      n[	        U [
        5      (       a5  [        R                  [         R                  U R                  5       US95      $ [	        U [        5      (       a7  U R                  (       d  U R                  (       d
  U [        :X  a  [        U 5      $ [        SU -  5      er,   )r0   r'   r1   r2   r3   r   
csr_matrixr4   r5   r   r6   r7   r   r.   r8   r9   s      r#   r   r   ;   s    2VVKK+E!Z    !((*E!BCC	At		;;!++qAv1:
DqH
IIr"   c                 4    [        U R                  5       5      $ )z0Convert a scipy.sparse matrix to a SymPy matrix.)r   todenser:   r;   s     r#   r   r   H   s    aiik""r"   c                     [        U 5      $ )z)Convert a numpy matrix to a SymPy matrix.r   r@   s     r#   r   r   M   s    a=r"   c                     [        U [        5      (       a  U $ [        U [        5      (       a  [        U 5      $ [        U [        5      (       a  [        U 5      $ [        U [        5      (       a  U $ [        SU -  5      e)z6Convert a numpy/scipy.sparse matrix to a SymPy matrix.1Expected sympy/numpy/scipy.sparse matrix, got: %r)r3   r   r   r   r   r   r   r8   r@   s     r#   r   r   R   sh    !Z  	A}	%	%a  	A*	+	+$Q''	At		
G!K
LLr"   c                    UR                  SS5      n[        U [        [        45      (       a	  [	        XS9$ [        U [
        5      (       a  U $ [        U [        5      (       a  U R                  5       $ [        SU -  5      e)z6Convert a sympy/scipy.sparse matrix to a numpy matrix.r-   r.   r/   rC   )	r2   r3   r   r   r   r   r   r?   r8   r9   s      r#   r   r   _   sl    KK+E!j$'((a--	A}	%	%	A*	+	+yy{
G!K
LLr"   c                 .   UR                  SS5      n[        U [        [        45      (       a	  [	        XS9$ [        U [
        5      (       a&  [        (       d  [        e[        R                  U 5      $ [        U [        5      (       a  U $ [        SU -  5      e)z6Convert a sympy/numpy matrix to a scipy.sparse matrix.r-   r.   r/   rC   )r2   r3   r   r   r   r   r'   r1   r=   r   r8   r9   s      r#   r   r   k   s|    KK+E!j$'(($Q44	A}	%	%v  ##	A*	+	+
G!K
LLr"   c                     [        U [        5      (       a  U R                  S:X  a  U S   n [        U [        [        45      (       a  U R                  S:X  a  [        U S   5      n U $ )zCFlatten a 1x1 matrix to a scalar, return larger matrices unchanged.)   rG   r   )r   r   )r3   r   shaper   r   r.   es    r#   r   r   y   sV    !Z  77f!A!m%89::77f$ AHr"   c                     [        U [        5      (       a  U R                  $ [        U [        [        45      (       a  U R                  5       R                  5       $ [        SU -  5      e)z7Return the dagger of a sympy/numpy/scipy.sparse matrix.rC   )r3   r   Hr   r   	conjugate	transposer8   rI   s    r#   r   r      sQ    !Z  ss
	A':;	<	<{{}&&((
G!K
LLr"   c                      SSK Jn  U" U 6 $ )zCCompute the kronecker product of a sequence of SymPy Matrices.
    r   )matrix_kronecker_product)$sympy.matrices.expressions.kroneckerrP   )matricesrP   s     r#   _sympy_tensor_productrS      s     N#X..r"   c                  t    [         (       d  [        eU S   nU SS  H  n[         R                  X5      nM     U$ )z6numpy version of tensor product of multiple arguments.r   rG   N)r0   r1   kronproductansweritems      r#   _numpy_tensor_productrZ      s9    2QZF& Mr"   c                      [         (       d  [        eU S   nU SS  H  n[         R                  X5      nM     [         R                  U5      $ )z=scipy.sparse version of tensor product of multiple arguments.r   rG   N)r'   r1   rU   r=   rV   s      r#   _scipy_sparse_tensor_productr\      sG    6QZFV*  V$$r"   c                      [        U S   [        5      (       a  [        U 6 $ [        U S   [        5      (       a  [	        U 6 $ [        U S   [
        5      (       a  [        U 6 $ g)zGCompute the matrix tensor product of sympy/numpy/scipy.sparse matrices.r   N)r3   r   rS   r   rZ   r   r\   )rW   s    r#   r   r      s\    '!*j))$g..	GAJ	.	.$g..	GAJ 3	4	4+W55 
5r"   c                 r    [         (       d  [        e[         R                  [         R                  U SS95      $ )znumpy version of complex eye.r.   r/   )r0   r1   r4   r   ns    r#   
_numpy_eyera      s)    288BFF1IF.//r"   c                 L    [         (       d  [        e[         R                  X SS9$ )z$scipy.sparse version of complex eye.r.   r/   )r'   r1   r   r_   s    r#   _scipy_sparse_eyerc      s     6::a):,,r"   c                     UR                  SS5      nUS:X  a  [        U 5      $ US:X  a  [        U 5      $ US:X  a  [        U 5      $ [	        SU-  5      e)z=Get the version of eye and tensor_product for a given format.formatsympyr   scipy.sparsezInvalid format: %r)r2   r   ra   rc   NotImplementedError)r`   r;   re   s      r#   
matrix_eyeri      sY    [[7+F1v	7	!}	>	! ##
2V;
<<r"   c                 r    UR                  SS5      n[        (       d  [        e[        R                  X4US9$ )znumpy version of zeros.r-   float64r/   )r2   r0   r1   r	   )r:   r`   r;   r-   s       r#   _numpy_zerosrl      s2    KK+E288QF%8((r"   c                     UR                  SS5      nUR                  SS5      n[        (       d  [        eUS:X  a  [        R                  X4US9$ US:X  a  [        R	                  X4US9$ g)zscipy.sparse version of zeros.spmatrixcsrr-   rk   lilr/   N)r2   r'   r1   
lil_matrixr=   )r:   r`   r;   rn   r-   s        r#   _scipy_sparse_zerosrr      sr    {{:u-HKK+E65  !u 55	U	  !u 55 
r"   c                     UR                  SS5      nUS:X  a  [        X5      $ US:X  a  [        X40 UD6$ US:X  a  [        X40 UD6$ [	        SU-  5      e)z'"Get a zeros matrix for a given format.re   rf   r   rg   zInvaild format: %r)r2   r	   rl   rr   rh   )r:   r`   r;   re   s       r#   r   r      se    [[7+FQ{	7	A,G,,	>	!"13733
2V;
<<r"   c                     [         (       d  [        e[         R                  U 5      n[         R                  X5      (       a  gU $ )z/Convert a numpy zero matrix to the zero scalar.        )r0   r1   
zeros_likeallclose)rJ   tests     r#   _numpy_matrix_to_zerory      s2    2==D	{{1r"   c                     [         (       d  [        eU R                  5       n[         R                  U5      n[         R	                  X5      (       a  gU $ )z6Convert a scipy.sparse zero matrix to the zero scalar.ru   )r0   r1   r?   rv   rw   )rJ   edenserx   s      r#   _scipy_sparse_matrix_to_zeror|      s=    2YY[F== D	{{6  r"   c                    [        U [        5      (       a(  [        U R                  6 U :X  a  [        R
                  n U $ [        U [        5      (       a  [        U 5      n U $ [        U [        5      (       a  [        U 5      n U $ )z)Convert a zero matrix to the scalar zero.)
r3   r   r	   rH   r   Zeror   ry   r   r|   rI   s    r#   matrix_to_zeror     sn    !Z  !''?aA
 H	 
A}	%	%!!$ H 
A*	+	+(+Hr"   ),__doc__sympy.core.exprr   sympy.core.numbersr   sympy.core.singletonr   sympy.matrices.matrixbaser   sympy.matricesr   r	   sympy.externalr
   __all__r0   r   ndarrayr%   r   r'   rn   r   r   r   r   r   r   r   r   r   rS   rZ   r\   r   ra   rc   ri   rl   rr   r   ry   r|   r   r   r"   r#   <module>r      s    B     " 0 % (& 7	  JJMgj8*-EF F\\F //
J
J#


M	MMM/	%60-	=)	6	=		r"   