o
    jg                  	   @   sD  d 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
 ddlmZmZmZ G dd dZed	ed
d	ddZe Zede
ddgddgg ede
ddgddgg ede
ddgddgg ede
ddgddgg ede
ddgddgg ede
ddgddgg ede
de gedgg ede
ddgdd
gg ede
ddgdegg ede
ddgdeee d gg edee
ddgdd
gg  ede
ddgdd
gg ede
g dg dg dg dg ed ee
ddgdd
gg  ed!e
edgde gg d"S )#z7A cache for storing small matrices in multiple formats.    )IRationalpi)Pow)exp)Matrix)to_sympyto_numpyto_scipy_sparsec                   @   sJ   e Zd ZdZdddZdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )MatrixCachea  A cache for small matrices in different formats.

    This class takes small matrices in the standard ``sympy.Matrix`` format,
    and then converts these to both ``numpy.matrix`` and
    ``scipy.sparse.csr_matrix`` matrices. These matrices are then stored for
    future recovery.
    complexc                 C   s   i | _ || _d S N)_cachedtype)selfr    r   Y/var/www/html/zoom/venv/lib/python3.10/site-packages/sympy/physics/quantum/matrixcache.py__init__   s   
zMatrixCache.__init__c                 C   sp   z|  || W n	 ty   Y nw z| || W n	 ty#   Y nw z	| || W dS  ty7   Y dS w )zCache a matrix by its name.

        Parameters
        ----------
        name : str
            A descriptive name for the matrix, like "identity2".
        m : list of lists
            The raw matrix data as a SymPy Matrix.
        N)_sympy_matrixImportError_numpy_matrix_scipy_sparse_matrixr   namemr   r   r   cache_matrix   s   
zMatrixCache.cache_matrixc                 C   s,   | j ||f}|dur|S td||f )a  Get a cached matrix by name and format.

        Parameters
        ----------
        name : str
            A descriptive name for the matrix, like "identity2".
        format : str
            The format desired ('sympy', 'numpy', 'scipy.sparse')
        Nz3Matrix with name %s and format %s is not available.)r   getNotImplementedErrorr   r   formatr   r   r   r   
get_matrix1   s   
zMatrixCache.get_matrixc                 C   s   || j ||f< d S r   )r   r   r   r   r   _store_matrixC   s   zMatrixCache._store_matrixc                 C   s   |  |dt| d S )Nsympy)r!   r   r   r   r   r   r   F   s   zMatrixCache._sympy_matrixc                 C       t || jd}| |d| d S )Nr   numpy)r	   r   r!   r   r   r   r   r   I   s   zMatrixCache._numpy_matrixc                 C   r#   )Nr$   zscipy.sparse)r
   r   r!   r   r   r   r   r   M   s   z MatrixCache._scipy_sparse_matrixN)r   )__name__
__module____qualname____doc__r   r   r    r!   r   r   r   r   r   r   r   r      s    
r      F)evaluateeye2   op11op00op10op01XYZST   HHsqrt2SWAP)r.   r   r   r   )r   r   r.   r   )r   r.   r   r   )r   r   r   r.   ZXZYN)r)   sympy.core.numbersr   r   r   sympy.core.powerr   &sympy.functions.elementary.exponentialr   sympy.matrices.denser   !sympy.physics.quantum.matrixutilsr   r	   r
   r   	sqrt2_invmatrix_cacher   r   r   r   r   <module>   s4    G(   "