o
    GZh  ć                	   @   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   śP/var/www/auris/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 )zģCache 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 )NZ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)ŚevaluateZeye2é   Zop11Zop00Zop10Zop01ŚXŚYŚZŚSŚTé   ŚHZHsqrt2ZSWAP)r,   r   r   r   )r   r   r,   r   )r   r,   r   r   )r   r   r   r,   ZZXZZYN)r(   Zsympy.core.numbersr   r   r   Zsympy.core.powerr   Z&sympy.functions.elementary.exponentialr   Zsympy.matrices.denser   Z!sympy.physics.quantum.matrixutilsr   r	   r
   r   Z	sqrt2_invZmatrix_cacher   r   r   r   r   Ś<module>   s4    G(  ’ "