Ë
    7^(h   ã                   óŠ  — d 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 g d¢Z ed	«      Zes G d
„ d«      Znej"                  Z edddgi¬«      Zes G d„ d«      ZdZnej(                  Zej*                  Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!d„ Z"d „ Z#d!„ Z$d"„ Z%d#„ Z&d$„ Z'd%„ Z(d&„ Z)d'„ Z*d(„ Z+y))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                   ó   — e Zd Zy)r   N©Ú__name__Ú
__module__Ú__qualname__© ó    ú_/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/physics/quantum/matrixutils.pyr   r      ó   „ Ør   r   ÚscipyÚfromlistÚsparse)Úimport_kwargsc                   ó   — e Zd Zy)r   Nr   r   r   r    r   r   &   r!   r   r   Nc                 ó<  — t         st        ‚|j                  dd«      }t        | t        «      r%t         j                  | j                  «       |¬«      S t        | t        «      r,| j                  s| j                  s	| t        k(  rt        | «      S t        d| z  «      ‚©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   .   sx   € åÜÐØ�K‰K˜ Ó+€EÜ�!”ZÔ Ü�x‰x˜Ÿ™›
¨%ˆxÓ0Ð0Ü	�A”tÔ	Ø�;Š;˜!×+Ò+¨q´AªvÜ˜1“:ÐÜ
ÐDÀqÑHÓ
IÐIr   c                 ón  — t         rt        st        ‚|j                  dd«      }t	        | t
        «      r8t        j                  t         j                  | j                  «       |¬«      «      S t	        | t        «      r,| j                  s| j                  s	| t        k(  rt        | «      S t        d| z  «      ‚r(   )r,   r$   r-   r.   r/   r   Ú
csr_matrixr0   r1   r   r2   r3   r   r*   r4   r5   s      r    r   r   ;   s…   € å•VÜÐØ�K‰K˜ Ó+€EÜ�!”ZÔ Ü× Ñ ¤§¡¨!¯(©(«*¸E Ó!BÓCÐCÜ	�A”tÔ	Ø�;Š;˜!×+Ò+¨q´AªvÜ˜1“:ÐÜ
ÐDÀqÑHÓ
IÐIr   c                 ó4   — t        | j                  «       «      S )z0Convert a scipy.sparse matrix to a SymPy matrix.)r   Útodense©r6   r7   s     r    r   r   H   s   € ä�a—i‘i“kÓ"Ð"r   c                 ó   — t        | «      S )z)Convert a numpy matrix to a SymPy matrix.r   r<   s     r    r   r   M   s   € ä�a‹=Ðr   c                 óÒ   — t        | t        «      r| S t        | t        «      rt        | «      S t        | t        «      rt        | «      S t        | t        «      r| S t        d| z  «      ‚)z6Convert a numpy/scipy.sparse matrix to a SymPy matrix.ú1Expected sympy/numpy/scipy.sparse matrix, got: %r)r/   r   r   r   r   r   r   r4   r<   s     r    r   r   R   s\   € ä�!”ZÔ ØˆÜ	�A”}Ô	%Ü˜aÓ Ð Ü	�AÔ*Ô	+Ü$ QÓ'Ð'Ü	�A”tÔ	ØˆÜ
ÐGÈ!ÑKÓ
LÐLr   c                 óì   — |j                  dd«      }t        | t        t        f«      rt	        | |¬«      S t        | t
        «      r| S t        | t        «      r| j                  «       S t        d| z  «      ‚)z6Convert a sympy/scipy.sparse matrix to a numpy matrix.r)   r*   r+   r?   )	r.   r/   r   r   r   r   r   r;   r4   r5   s      r    r   r   _   se   € à�K‰K˜ Ó+€EÜ�!”j¤$Ð'Ô(Ü˜a uÔ-Ð-Ü	�A”}Ô	%ØˆÜ	�AÔ*Ô	+Ø�y‰y‹{ÐÜ
ÐGÈ!ÑKÓ
LÐLr   c                 ó  — |j                  dd«      }t        | t        t        f«      rt	        | |¬«      S t        | t
        «      r!t        st        ‚t        j                  | «      S t        | t        «      r| S t        d| z  «      ‚)z6Convert a sympy/numpy matrix to a scipy.sparse matrix.r)   r*   r+   r?   )r.   r/   r   r   r   r   r$   r-   r9   r   r4   r5   s      r    r   r   k   ss   € à�K‰K˜ Ó+€EÜ�!”j¤$Ð'Ô(Ü$ Q¨eÔ4Ð4Ü	�A”}Ô	%ÝÜÐÜ× Ñ  Ó#Ð#Ü	�AÔ*Ô	+ØˆÜ
ÐGÈ!ÑKÓ
LÐLr   c                 ó´   — t        | t        «      r| j                  dk(  r| d   } t        | t        t        f«      r| j                  dk(  rt        | d   «      } | S )zCFlatten a 1x1 matrix to a scalar, return larger matrices unchanged.)é   rC   r   )r   r   )r/   r   Úshaper   r   r*   ©Úes    r    r   r   y   sP   € ä�!”ZÔ Ø�7‰7�fÒØ�!‘ˆAÜ�!”mÔ%8Ð9Ô:Ø�7‰7�fÒÜ˜˜$™Ó ˆAØ€Hr   c                 ó¾   — t        | t        «      r| j                  S t        | t        t        f«      r| j                  «       j                  «       S t        d| z  «      ‚)z7Return the dagger of a sympy/numpy/scipy.sparse matrix.r?   )r/   r   ÚHr   r   Ú	conjugateÚ	transposer4   rE   s    r    r   r   „   sK   € ä�!”ZÔ Ø�s‰sˆ
Ü	�AœÔ':Ð;Ô	<Ø�{‰{‹}×&Ñ&Ó(Ð(Ü
ÐGÈ!ÑKÓ
LÐLr   c                  ó   — ddl m}  || Ž S )zCCompute the kronecker product of a sequence of SymPy Matrices.
    r   )Úmatrix_kronecker_product)Ú$sympy.matrices.expressions.kroneckerrL   )ÚmatricesrL   s     r    Ú_sympy_tensor_productrO   Ž   s   € õ Ná# XÐ.Ð.r   c                  óh   — t         st        ‚| d   }| dd D ]  }t         j                  ||«      }Œ |S )z6numpy version of tensor product of multiple arguments.r   rC   N)r,   r-   Úkron©ÚproductÚanswerÚitems      r    Ú_numpy_tensor_productrV   –   s>   € åÜÐØ�Q‰Z€FØ˜˜�ò 'ˆÜ—‘˜ Ó&‰ð'à€Mr   c                  óŽ   — t         st        ‚| d   }| dd D ]  }t         j                  ||«      }Œ t         j                  |«      S )z=scipy.sparse version of tensor product of multiple arguments.r   rC   N)r$   r-   rQ   r9   rR   s      r    Ú_scipy_sparse_tensor_productrX       sL   € åÜÐØ�Q‰Z€FØ˜˜�ò +ˆÜ—‘˜V TÓ*‰ð+ô ×Ñ˜VÓ$Ð$r   c                  ó¦   — t        | d   t        «      rt        | Ž S t        | d   t        «      rt	        | Ž S t        | d   t
        «      rt        | Ž S y)zGCompute the matrix tensor product of sympy/numpy/scipy.sparse matrices.r   N)r/   r   rO   r   rV   r   rX   )rS   s    r    r   r   ¬   sS   € ä�'˜!‘*œjÔ)Ü$ gÐ.Ð.Ü	�G˜A‘J¤Ô	.Ü$ gÐ.Ð.Ü	�G˜A‘JÔ 3Ô	4Ü+¨WÐ5Ð5ð 
5r   c                 ón   — t         st        ‚t         j                  t         j                  | d¬«      «      S )znumpy version of complex eye.r*   r+   )r,   r-   r0   r   ©Úns    r    Ú
_numpy_eyer]   ¶   s'   € åÜÐÜ�8‰8”B—F‘F˜1 I�FÓ.Ó/Ð/r   c                 óJ   — t         st        ‚t         j                  | | d¬«      S )z$scipy.sparse version of complex eye.r*   r+   )r$   r-   r   r[   s    r    Ú_scipy_sparse_eyer_   ½   s    € åÜÐÜ�:‰:�a˜ )ˆ:Ó,Ð,r   c                 ó¢   — |j                  dd«      }|dk(  rt        | «      S |dk(  rt        | «      S |dk(  rt        | «      S t	        d|z  «      ‚)z=Get the version of eye and tensor_product for a given format.ÚformatÚsympyr   úscipy.sparsezInvalid format: %r)r.   r   r]   r_   ÚNotImplementedError)r\   r7   ra   s      r    Ú
matrix_eyere   Ä   sY   € à�[‰[˜ 7Ó+€FØ�ÒÜ�1‹vˆØ	�7Ò	Ü˜!‹}ÐØ	�>Ò	!Ü  Ó#Ð#Ü
Ð2°VÑ;Ó
<Ð<r   c                 óp   — |j                  dd«      }t        st        ‚t        j                  | |f|¬«      S )znumpy version of zeros.r)   Úfloat64r+   )r.   r,   r-   r	   )r6   r\   r7   r)   s       r    Ú_numpy_zerosrh   Ð   s2   € à�K‰K˜ Ó+€EÝÜÐÜ�8‰8�Q˜�F %ˆ8Ó(Ð(r   c                 óÜ   — |j                  dd«      }|j                  dd«      }t        st        ‚|dk(  rt        j                  | |f|¬«      S |dk(  rt        j	                  | |f|¬«      S y)zscipy.sparse version of zeros.ÚspmatrixÚcsrr)   rg   Úlilr+   N)r.   r$   r-   Ú
lil_matrixr9   )r6   r\   r7   rj   r)   s        r    Ú_scipy_sparse_zerosrn   Ø   st   € à�{‰{˜: uÓ-€HØ�K‰K˜ Ó+€EÝÜÐØ�5ÒÜ× Ñ  ! Q ¨uÐ Ó5Ð5Ø	�UÒ	Ü× Ñ  ! Q ¨uÐ Ó5Ð5ð 
r   c                 ó¬   — |j                  dd«      }|dk(  rt        | |«      S |dk(  rt        | |fi |¤ŽS |dk(  rt        | |fi |¤ŽS t	        d|z  «      ‚)z'"Get a zeros matrix for a given format.ra   rb   r   rc   zInvaild format: %r)r.   r	   rh   rn   rd   )r6   r\   r7   ra   s       r    r   r   ä   sk   € à�[‰[˜ 7Ó+€FØ�ÒÜ�Q˜‹{ÐØ	�7Ò	Ü˜A˜qÑ, GÑ,Ð,Ø	�>Ò	!Ü" 1 aÑ3¨7Ñ3Ð3Ü
Ð2°VÑ;Ó
<Ð<r   c                 óv   — t         st        ‚t         j                  | «      }t         j                  | |«      ry| S )z/Convert a numpy zero matrix to the zero scalar.ç        )r,   r-   Ú
zeros_likeÚallclose)rF   Útests     r    Ú_numpy_matrix_to_zeroru   ð   s/   € åÜÐÜ�=‰=˜Ó€DÜ	‡{�{�1�dÔØàˆr   c                 ó–   — t         st        ‚| j                  «       }t         j                  |«      }t         j	                  ||«      ry| S )z6Convert a scipy.sparse zero matrix to the zero scalar.rq   )r,   r-   r;   rr   rs   )rF   Úedensert   s      r    Ú_scipy_sparse_matrix_to_zerorx   û   s:   € åÜÐØ�Y‰Y‹[€FÜ�=‰=˜Ó €DÜ	‡{�{�6˜4Ô Øàˆr   c                 óä   — t        | t        «      r't        | j                  Ž | k(  rt        j
                  } | S t        | t        «      rt        | «      } | S t        | t        «      rt        | «      } | S )z)Convert a zero matrix to the scalar zero.)
r/   r   r	   rD   r   ÚZeror   ru   r   rx   rE   s    r    Úmatrix_to_zeror{     se   € ä�!”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__r,   r   Úndarrayr"   r   r$   rj   r   r   r   r   r   r   r   r   r   rO   rV   rX   r   r]   r_   re   rh   rn   r   ru   rx   r{   r   r   r    ú<module>r…      sñ   ðÙ Bå  Ý  Ý "Ý 0ß %Ý (ò€ñ& �7Ó€Ù	÷ò ð —J‘J€Má�g¨j¸8¸*Ð-EÔF€Ù÷ñ à�Fà�\‰\€FØ Ÿ/™/Ðò
Jò
Jò#ò
ò

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