U
    9%e                      @   sz  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 dd	d
ddddddddddgZedZesG dd dZnejZedddgidZesG dd	 d	ZdZnejZejZdd
 Zdd Zdd Zd d Zd!d Zd"d Zd#d Zd$d Zd%d Zd&d' Zd(d) Z d*d+ Z!d,d Z"d-d. Z#d/d0 Z$d1d2 Z%d3d4 Z&d5d6 Z'd7d Z(d8d9 Z)d:d; Z*d<d= Z+dS )>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                   @   s   e Zd ZdS )r
   N__name__
__module____qualname__ r   r   `/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/sympy/physics/quantum/matrixutils.pyr
      s   scipyfromlistsparse)Zimport_kwargsc                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r   &   s   Nc                 K   sf   t st|dd}t| tr0t j|  |dS t| trV| jsN| j	sN| t
krVt| S td|  dS zBConvert a SymPy Matrix/complex number to a numpy matrix or scalar.dtypecomplexr"   z.Expected MatrixBase or complex scalar, got: %rN)npImportErrorget
isinstancer   arraytolistr   	is_Numberis_NumberSymbolr   r#   	TypeErrormoptionsr"   r   r   r   r   .   s    

c                 K   sp   t rtst|dd}t| tr:tt j|  |dS t| t	r`| j
sX| jsX| tkr`t| S td|  dS r!   )r%   r    r&   r'   r(   r   
csr_matrixr)   r*   r   r+   r,   r   r#   r-   r.   r   r   r   r   ;   s    

c                 K   s   t |  S )z0Convert a scipy.sparse matrix to a SymPy matrix.)r   todenser/   r0   r   r   r   r   H   s    c                 K   s   t | S )z)Convert a numpy matrix to a SymPy matrix.r   r3   r   r   r   r   M   s    c                 K   sP   t | tr| S t | tr t| S t | tr2t| S t | tr@| S td|  dS )z6Convert a numpy/scipy.sparse matrix to a SymPy matrix.1Expected sympy/numpy/scipy.sparse matrix, got: %rN)r(   r   r
   r   r   r   r   r-   r3   r   r   r   r   R   s    



c                 K   sV   | dd}t| ttfr&t| |dS t| tr4| S t| trF|  S td|  dS )z6Convert a sympy/scipy.sparse matrix to a numpy matrix.r"   r#   r$   r4   N)	r'   r(   r   r   r   r
   r   r2   r-   r.   r   r   r   r   _   s    

c                 K   s`   | dd}t| ttfr&t| |dS t| trBts8tt| S t| t	rP| S t
d|  dS )z6Convert a sympy/numpy matrix to a scipy.sparse matrix.r"   r#   r$   r4   N)r'   r(   r   r   r   r
   r    r&   r1   r   r-   r.   r   r   r   r   k   s    


c                 C   sD   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.)   r5   r   )r   r   )r(   r   shaper
   r   r#   er   r   r   r   y   s    


c                 C   s:   t | tr| jS t | ttfr*|   S td|  dS )z7Return the dagger of a sympy/numpy/scipy.sparse matrix.r4   N)r(   r   Hr
   r   	conjugateZ	transposer-   r7   r   r   r   r      s
    
c                  G   s   ddl m} ||  S )zCCompute the kronecker product of a sequence of SymPy Matrices.
    r   )matrix_kronecker_product)Z$sympy.matrices.expressions.kroneckerr;   )Zmatricesr;   r   r   r   _sympy_tensor_product   s    r<   c                  G   s2   t st| d }| dd D ]}t ||}q|S )z6numpy version of tensor product of multiple arguments.r   r5   N)r%   r&   kronproductZansweritemr   r   r   _numpy_tensor_product   s    rA   c                  G   s8   t st| d }| dd D ]}t ||}qt |S )z=scipy.sparse version of tensor product of multiple arguments.r   r5   N)r    r&   r=   r1   r>   r   r   r   _scipy_sparse_tensor_product   s    rB   c                  G   sF   t | d trt|  S t | d tr,t|  S t | d trBt|  S dS )zGCompute the matrix tensor product of sympy/numpy/scipy.sparse matrices.r   N)r(   r   r<   r
   rA   r   rB   )r?   r   r   r   r      s    c                 C   s   t stt t j| ddS )znumpy version of complex eye.r#   r$   )r%   r&   r)   r   nr   r   r   
_numpy_eye   s    rE   c                 C   s   t stt j| | ddS )z$scipy.sparse version of complex eye.r#   r$   )r    r&   r   rC   r   r   r   _scipy_sparse_eye   s    rF   c                 K   sL   | dd}|dkrt| S |dkr,t| S |dkr<t| S td| dS )z=Get the version of eye and tensor_product for a given format.formatsympyr   scipy.sparsezInvalid format: %rN)r'   r   rE   rF   NotImplementedError)rD   r0   rG   r   r   r   
matrix_eye   s    rK   c                 K   s&   | dd}tsttj| |f|dS )znumpy version of zeros.r"   float64r$   )r'   r%   r&   r   )r/   rD   r0   r"   r   r   r   _numpy_zeros   s    rM   c                 K   sX   | dd}| dd}ts t|dkr:tj| |f|dS |dkrTtj| |f|dS dS )zscipy.sparse version of zeros.spmatrixZcsrr"   rL   Zlilr$   N)r'   r    r&   Z
lil_matrixr1   )r/   rD   r0   rN   r"   r   r   r   _scipy_sparse_zeros   s    rO   c                 K   sZ   | dd}|dkrt| |S |dkr4t| |f|S |dkrJt| |f|S td| dS )z'"Get a zeros matrix for a given format.rG   rH   r   rI   zInvaild format: %rN)r'   r   rM   rO   rJ   )r/   rD   r0   rG   r   r   r   r      s    
c                 C   s*   t stt | }t | |r"dS | S dS )z/Convert a numpy zero matrix to the zero scalar.        N)r%   r&   
zeros_likeallclose)r8   testr   r   r   _numpy_matrix_to_zero   s    
rT   c                 C   s2   t st|  }t |}t ||r*dS | S dS )z6Convert a scipy.sparse zero matrix to the zero scalar.rP   N)r%   r&   r2   rQ   rR   )r8   ZedenserS   r   r   r   _scipy_sparse_matrix_to_zero   s    
rU   c                 C   sJ   t | tr t| j | krFtj} n&t | tr4t| } nt | trFt	| } | S )z)Convert a zero matrix to the scalar zero.)
r(   r   r   r6   r   ZZeror
   rT   r   rU   r7   r   r   r   matrix_to_zero  s    



rV   ),__doc__Zsympy.core.exprr   Zsympy.core.numbersr   Zsympy.core.singletonr   Zsympy.matrices.matricesr   Zsympy.matricesr   r   Zsympy.externalr	   __all__r%   r
   Zndarrayr   r   r    rN   r   r   r   r   r   r   r   r   r   r<   rA   rB   r   rE   rF   rK   rM   rO   r   rT   rU   rV   r   r   r   r   <module>   sh   


