Ë
    ÏÍ:j|ƒ  ã                   ó²   — d Z ddlZddlmZ ddlZddlmZmZmZm	Z	m
Z
mZmZmZmZ ddlmZmZmZ ddlmZ g d¢Zd„ Zd	„ Zed
œd„Zdd„Z G d„ d«      Zd„ Zy)z‡
  Matrix Market I/O in Python.
  See http://math.nist.gov/MatrixMarket/formats.html
  for information about the Matrix Market format.
é    N)Úwarn)	ÚasarrayÚrealÚimagÚconjÚzerosÚndarrayÚconcatenateÚonesÚcan_cast)Ú	coo_arrayÚissparseÚ
coo_matrix)Ú_NoValue)ÚmminfoÚmmreadÚmmwriteÚMMFilec                 óZ   — t        | t        «      r| j                  d«      S t        | «      S )NÚlatin1)Ú
isinstanceÚbytesÚdecodeÚstr)Úss    úc/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/scipy/io/_mmio.pyÚasstrr      s$   € Ü�!”UÔØ�x‰x˜Ó!Ð!Üˆq‹6€Mó    c                 ó,   — t         j                  | «      S )a­  
    Return size and storage parameters from Matrix Market file-like 'source'.

    Parameters
    ----------
    source : str or file-like
        Matrix Market filename (extension .mtx) or open file-like object

    Returns
    -------
    rows : int
        Number of matrix rows.
    cols : int
        Number of matrix columns.
    entries : int
        Number of non-zero entries of a sparse matrix
        or rows*cols for a dense matrix.
    format : str
        Either 'coordinate' or 'array'.
    field : str
        Either 'real', 'complex', 'pattern', or 'integer'.
    symmetry : str
        Either 'general', 'symmetric', 'skew-symmetric', or 'hermitian'.

    Examples
    --------
    >>> from io import StringIO
    >>> from scipy.io import mminfo

    >>> text = '''%%MatrixMarket matrix coordinate real general
    ...  5 5 7
    ...  2 3 1.0
    ...  3 4 2.0
    ...  3 5 3.0
    ...  4 1 4.0
    ...  4 2 5.0
    ...  4 3 6.0
    ...  4 4 7.0
    ... '''


    ``mminfo(source)`` returns the number of rows, number of columns,
    format, field type and symmetry attribute of the source file.

    >>> mminfo(StringIO(text))
    (5, 5, 7, 'coordinate', 'real', 'general')
    )r   Úinfo)Úsources    r   r   r   !   s   € ô` �;‰;�vÓÐr   ©Úspmatrixc                ó8   — t        «       j                  | |¬«      S )a~  
    Reads the contents of a Matrix Market file-like 'source' into a matrix.

    Parameters
    ----------
    source : str or file-like
        Matrix Market filename (extensions .mtx, .mtz.gz)
        or open file-like object.
    spmatrix : bool, optional (default: True)
        If ``True``, return sparse matrix. Otherwise return sparse array.

        .. deprecated:: 1.18.0
            The default value for `spmatrix` is changing to False in v1.20.
            That means the default return value will be a sparse array.
            Unless you use * instead of @, ** for matrix power, or you depend
            on 2D shapes from e.g. ``A.sum(axis=0)`` it may not matter to you.
            See :ref:`Migration from spmatrix to sparray <migration_to_sparray>`.

    Returns
    -------
    a : ndarray or coo_array or coo_matrix
        Dense or sparse array depending on the matrix format in the
        Matrix Market file.

    Examples
    --------
    >>> from io import StringIO
    >>> from scipy.io import mmread

    >>> text = '''%%MatrixMarket matrix coordinate real general
    ...  5 5 7
    ...  2 3 1.0
    ...  3 4 2.0
    ...  3 5 3.0
    ...  4 1 4.0
    ...  4 2 5.0
    ...  4 3 6.0
    ...  4 4 7.0
    ... '''

    ``mmread(source)`` returns the data as sparse matrix in COO format.

    >>> m = mmread(StringIO(text), spmatrix=False)
    >>> m
    <COOrdinate sparse array of dtype 'float64'
         with 7 stored elements and shape (5, 5)>
    >>> m.toarray()
    array([[0., 0., 0., 0., 0.],
           [0., 0., 1., 0., 0.],
           [0., 0., 0., 2., 3.],
           [4., 5., 6., 7., 0.],
           [0., 0., 0., 0., 0.]])
    r"   )r   Úread)r!   r#   s     r   r   r   V   s   € ôl ‹8�=‰=˜¨(ˆ=Ó3Ð3r   c                 ó@   — t        «       j                  | |||||«       y)aü
  
    Writes the sparse or dense array `a` to Matrix Market file-like `target`.

    Parameters
    ----------
    target : str or file-like
        Matrix Market filename (extension .mtx) or open file-like object.
    a : array like
        Sparse or dense 2-D array.
    comment : str, optional
        Comments to be prepended to the Matrix Market file.
    field : None or str, optional
        Either 'real', 'complex', 'pattern', or 'integer'.
    precision : None or int, optional
        Number of digits to display for real or complex values.
    symmetry : None or str, optional
        Either 'general', 'symmetric', 'skew-symmetric', or 'hermitian'.
        If symmetry is None the symmetry type of 'a' is determined by its
        values.

    Examples
    --------
    >>> from io import BytesIO
    >>> import numpy as np
    >>> from scipy.sparse import coo_array
    >>> from scipy.io import mmwrite

    Write a small NumPy array to a matrix market file.  The file will be
    written in the ``'array'`` format.

    >>> a = np.array([[1.0, 0, 0, 0], [0, 2.5, 0, 6.25]])
    >>> target = BytesIO()
    >>> mmwrite(target, a)
    >>> print(target.getvalue().decode('latin1'))
    %%MatrixMarket matrix array real general
    %
    2 4
    1
    0
    0
    2.5
    0
    0
    0
    6.25

    Add a comment to the output file, and set the precision to 3.

    >>> target = BytesIO()
    >>> mmwrite(target, a, comment='\n Some test data.\n', precision=3)
    >>> print(target.getvalue().decode('latin1'))
    %%MatrixMarket matrix array real general
    %
    % Some test data.
    %
    2 4
    1.00e+00
    0.00e+00
    0.00e+00
    2.50e+00
    0.00e+00
    0.00e+00
    0.00e+00
    6.25e+00

    Convert to a sparse matrix before calling ``mmwrite``.  This will
    result in the output format being ``'coordinate'`` rather than
    ``'array'``.

    >>> target = BytesIO()
    >>> mmwrite(target, coo_array(a), precision=3)
    >>> print(target.getvalue().decode('latin1'))
    %%MatrixMarket matrix coordinate real general
    %
    2 4 3
    1 1 1.00e+00
    2 2 2.50e+00
    2 4 6.25e+00

    Write a complex Hermitian array to a matrix market file.  Note that
    only six values are actually written to the file; the other values
    are implied by the symmetry.

    >>> z = np.array([[3, 1+2j, 4-3j], [1-2j, 1, -5j], [4+3j, 5j, 2.5]])
    >>> z
    array([[ 3. +0.j,  1. +2.j,  4. -3.j],
           [ 1. -2.j,  1. +0.j, -0. -5.j],
           [ 4. +3.j,  0. +5.j,  2.5+0.j]])

    >>> target = BytesIO()
    >>> mmwrite(target, z, precision=2)
    >>> print(target.getvalue().decode('latin1'))
    %%MatrixMarket matrix array complex hermitian
    %
    3 3
    3.0e+00 0.0e+00
    1.0e+00 -2.0e+00
    4.0e+00 3.0e+00
    1.0e+00 0.0e+00
    0.0e+00 5.0e+00
    2.5e+00 0.0e+00

    N)r   Úwrite)ÚtargetÚaÚcommentÚfieldÚ	precisionÚsymmetrys         r   r   r   ‘   s   € ôP ƒH‡N�N�6˜1˜g u¨i¸ÕBr   c            
       ó´  — e Zd ZdZed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Z	ed„ «       Z
ed„ «       Zd	Zd
ZeefZed„ «       ZdZdZdZdZdZeeeeefZed„ «       ZdZdZdZdZeeeefZed„ «       ZededededediZed„ «       Z ed„ «       Z!ed„ «       Z"ed*d„«       Z#ed„ «       Z$ed „ «       Z%d!„ Z&e'd"œd#„Z(	 	 d+d%„Z)d&„ Z*d'„ Z+d(„ Z,	 	 d+d)„Z-y$),r   )Ú_rowsÚ_colsÚ_entriesÚ_formatÚ_fieldÚ	_symmetryc                 ó   — | j                   S ©N)r/   ©Úselfs    r   ÚrowszMMFile.rows  ó   € à�z‰zÐr   c                 ó   — | j                   S r6   )r0   r7   s    r   ÚcolszMMFile.cols	  r:   r   c                 ó   — | j                   S r6   )r1   r7   s    r   ÚentrieszMMFile.entries  s   € à�}‰}Ðr   c                 ó   — | j                   S r6   )r2   r7   s    r   ÚformatzMMFile.format  s   € à�|‰|Ðr   c                 ó   — | j                   S r6   )r3   r7   s    r   r+   zMMFile.field  s   € à�{‰{Ðr   c                 ó   — | j                   S r6   )r4   r7   s    r   r-   zMMFile.symmetry  s   € à�~‰~Ðr   c                 ó`   — | j                   | j                  | j                  | j                  fv S r6   )r4   ÚSYMMETRY_SYMMETRICÚSYMMETRY_SKEW_SYMMETRICÚSYMMETRY_HERMITIANr7   s    r   Úhas_symmetryzMMFile.has_symmetry  s2   € à�~‰~ $×"9Ñ"9Ø"&×">Ñ">Ø"&×"9Ñ"9ð";ð ;ð 	;r   Ú
coordinateÚarrayc                 óZ   — || j                   vrd|› d| j                   › �}t        |«      ‚y )Nzunknown format type ú, must be one of )ÚFORMAT_VALUESÚ
ValueError)r8   r@   Úmsgs      r   Ú_validate_formatzMMFile._validate_format(  s9   € à˜×+Ñ+Ñ+Ø(¨¨Ð0AÀ$×BTÑBTÐAUÐVˆCÜ˜S“/Ð!ð ,r   Úintegerúunsigned-integerr   ÚcomplexÚpatternc                 óZ   — || j                   vrd|› d| j                   › �}t        |«      ‚y )Nzunknown field type rK   )ÚFIELD_VALUESrM   )r8   r+   rN   s      r   Ú_validate_fieldzMMFile._validate_field7  s9   € à˜×)Ñ)Ñ)Ø'¨ wÐ.?À×@QÑ@QÐ?RÐSˆCÜ˜S“/Ð!ð *r   ÚgeneralÚ	symmetriczskew-symmetricÚ	hermitianc                 óV   — || j                   vrt        d|› d| j                   › �«      ‚y )Nzunknown symmetry type rK   )ÚSYMMETRY_VALUESrM   )r8   r-   s     r   Ú_validate_symmetryzMMFile._validate_symmetryE  sC   € à˜4×/Ñ/Ñ/ÜÐ5°h°Zð @/Ø/3×/CÑ/CÐ.DðFó Gð Gð 0r   ÚintpÚuint64ÚdÚDc                   ó   — y r6   © rb   r   r   ÚreaderzMMFile.readerR  ó   € àr   c                   ó   — y r6   rb   rb   r   r   ÚwriterzMMFile.writerW  rd   r   c                 ó:  — | j                  |«      \  }}	 |j                  «       }d„ |j                  «       D «       \  }}}}}	|j                  d«      st	        d«      ‚|j                  «       dk(  st	        d|z   «      ‚|j                  «       dk(  r| j                  }n|j                  «       dk(  r| j                  }|r:|j                  «       r&|j                  «       d   d	v r|j                  «       }nn|rŒ:|j                  «       s!|j                  «       }|j                  «       sŒ!|j                  «       }
|| j                  k(  rDt        |
«      d
k(  st	        d|j                  d«      z   «      ‚t        t        |
«      \  }}||z  }n?t        |
«      dk(  st	        d|j                  d«      z   «      ‚t        t        |
«      \  }}}|||||j                  «       |	j                  «       f|r|j                  «        S S # |r|j                  «        w w xY w)aó  
        Return size, storage parameters from Matrix Market file-like 'source'.

        Parameters
        ----------
        source : str or file-like
            Matrix Market filename (extension .mtx) or open file-like object

        Returns
        -------
        rows : int
            Number of matrix rows.
        cols : int
            Number of matrix columns.
        entries : int
            Number of non-zero entries of a sparse matrix
            or rows*cols for a dense matrix.
        format : str
            Either 'coordinate' or 'array'.
        field : str
            Either 'real', 'complex', 'pattern', or 'integer'.
        symmetry : str
            Either 'general', 'symmetric', 'skew-symmetric', or 'hermitian'.
        c              3   óN   K  — | ]  }t        |j                  «       «      –— Œ y ­wr6   )r   Ústrip)Ú.0Úparts     r   ú	<genexpr>zMMFile.info.<locals>.<genexpr>~  s   è ø€ Ò>¨”�t—z‘z“|×$Ñ>ùs   ‚#%z%%MatrixMarketz%source is not in Matrix Market formatÚmatrixzProblem reading file header: rI   rH   r   ©ú%é%   é   zHeader line not of length 2: Úasciié   zHeader line not of length 3: )Ú_openÚreadlineÚsplitÚ
startswithrM   ÚlowerÚFORMAT_ARRAYÚFORMAT_COORDINATEÚlstripri   Úlenr   ÚmapÚintÚclose)r8   r!   ÚstreamÚclose_itÚlineÚmmidrm   r@   r+   r-   Ú
split_liner9   r<   r>   s                 r   r    zMMFile.info\  sï  € ð6  Ÿ:™: fÓ-Ñˆ�ð/	ð —?‘?Ó$ˆDá>°·±³Ô>ñ 2ˆD�&˜& %¨à—?‘?Ð#3Ô4Ü Ð!HÓIÐIØ—<‘<“> XÒ-Ü Ð!@À4Ñ!GÓHÐHð �|‰|‹~ Ò(Ø×*Ñ*‘Ø—‘“ <Ò/Ø×/Ñ/�ñ Ø—;‘;”= T§[¡[£]°1Ñ%5¸Ñ%BØ!Ÿ?™?Ó,‘Dàò	 ð —j‘j”lØ—‘Ó(�ð —j‘j•lð Ÿ™›ˆJØ˜×*Ñ*Ò*Ü˜:“¨!Ò+Ü$Ð%DØ%)§[¡[°Ó%9ñ&:ó ;ð ;ä ¤ jÓ1‘
��dØ ™+‘ä˜:“¨!Ò+Ü$Ð%DØ%)§[¡[°Ó%9ñ&:ó ;ð ;ä&)¬#¨zÓ&:Ñ#��d˜Gà˜$ ¨°·±³Ø—N‘NÓ$ð&ñ Ø—‘•ð ø‰xØ—‘•ð ús   –C$H Ã;0H Ä,CH ÈHc                 ó–  — 	 t        j                  | «      } |d   dk(  rüt         j                  j	                  | «      swt         j                  j	                  | dz   «      r| dz   } nOt         j                  j	                  | dz   «      r| dz   } n't         j                  j	                  | dz   «      r| dz   } | j                  d«      rddl}|j                  | |«      }|dfS | j                  d	«      rddl}|j                  | d
«      }|dfS t        | |«      }|dfS | dd dk7  r| dz   } t        | |«      }|dfS # t        $ r | dfcY S w xY w)a—   Return an open file stream for reading based on source.

        If source is a file name, open it (after trying to find it with mtx and
        gzipped mtx extensions). Otherwise, just return source.

        Parameters
        ----------
        filespec : str or file-like
            String giving file name or file-like object
        mode : str, optional
            Mode with which to open file, if `filespec` is a file name.

        Returns
        -------
        fobj : file-like
            Open file-like object.
        close_it : bool
            True if the calling function should close this file when done,
            false otherwise.
        Fr   Úrz.mtxz.mtx.gzz.mtx.bz2z.gzNz.bz2ÚrbéüÿÿÿT)
ÚosÚfspathÚ	TypeErrorÚpathÚisfileÚendswithÚgzipÚopenÚbz2ÚBZ2File)ÚfilespecÚmoder�   r€   r‘   s        r   rt   zMMFile._open«  sR  € ð4	#Ü—y‘y Ó*ˆHð �‰7�cŠ>ô —7‘7—>‘> (Ô+Ü—7‘7—>‘> (¨6¡/Ô2Ø'¨&Ñ0‘HÜ—W‘W—^‘^ H¨YÑ$6Ô7Ø'¨)Ñ3‘HÜ—W‘W—^‘^ H¨ZÑ$7Ô8Ø'¨*Ñ4�Hà× Ñ  Ô'ÛØŸ™ 8¨TÓ2�ð �tˆ|Ðð ×"Ñ" 6Ô*ÛØŸ™ X¨tÓ4�ð �tˆ|Ðô ˜h¨Ó-�ð �tˆ|Ðð	 ˜˜ˆ} Ò&Ø# fÑ,�Ü˜( DÓ)ˆFà�tˆ|ÐøôA ò 	#Ø˜U�?Ò"ð	#ús   ‚D8 Ä8EÅEc                 ó   ‡ ‡— ‰ j                   \  }Š|‰k7  rt        j                  S d}d}‰ j                  j                  dv }t        ‰ «      rp‰ j                  «       Š ‰ j                  «       \  }}||k  j                  «       ||kD  j                  «       k7  rt        j                  S ‰ j                  «       Š ˆ fd„}nˆ ˆfd„} |«       D ]`  \  }}	}
|r
|
r|dk7  rd}nD|r||	k7  rd}t        j                  d¬«      5  |r||	 k7  rd}d d d «       |r|t        |	«      k7  rd}|rŒZ|rŒ]|rŒ` n |rt        j                  S |rt        j                  S |rt        j                  S t        j                  S # 1 sw Y   ŒmxY w)	NTÚFDc               3   ó†   •K  — ‰j                  «       D ])  \  \  } }}| |kD  r‰|| f   }||df–— Œ| |k(  sŒ#||df–— Œ+ y ­w)NFT)Úitems)ÚiÚjÚaijÚajir)   s       €r   Úsymm_iteratorz+MMFile._get_symmetry.<locals>.symm_iteratorÿ  sY   øè ø€ Ø%&§W¡W£Yò /‘M‘V�a˜˜SØ˜1’uØ  1 ™g˜Ø" C¨Ð/Ó/Ø˜a›Ø" C¨Ð.Ó.ñ/ùs
   ƒ3A·
Ac               3   ó„   •K  — t        ‰«      D ]-  } t        | ‰«      D ]  }‰|   |    ‰|    |   }}|||| k(  f–— Œ Œ/ y ­wr6   )Úrange)rš   r™   r›   rœ   r)   Úns       €€r   r�   z+MMFile._get_symmetry.<locals>.symm_iterator
  sY   øè ø€ Ü˜q›ò 1�AÜ" 1 a›[ò 1˜Ø#$ Q¡4¨¡7¨A¨a©D°©G˜S˜Ø" C¨¨a©Ð0Ó0ñ1ñ1ùs   ƒ=A r   FÚignore)Úover)Úshaper   ÚSYMMETRY_GENERALÚdtypeÚcharr   ÚtocooÚnonzeroÚsumÚtodokÚnpÚerrstater   rD   rE   rF   )r)   ÚmÚissymmÚisskewÚishermÚrowÚcolr�   r›   rœ   Úis_diagonalr    s   `          @r   Ú_get_symmetryzMMFile._get_symmetryê  sh  ù€ à�w‰w‰ˆˆ1Ø�Š6Ü×*Ñ*Ð*ØˆØˆØ—‘—‘ Ð%ˆô �AŒ;ð —‘“	ˆAØŸ™›‰JˆS�#Ø�c‘	�‰Ó  S¨3¡Y§O¡OÓ$5Ò5Ü×.Ñ.Ð.ð —‘“	ˆAõ/õ1ñ (5£ò 	Ñ#ˆS�#�{Ù™+¨#°ª(Ø‘á˜c SšjØ"�FÜ—[‘[ hÔ/ñ 'á #¨#¨¢+Ø!&˜÷'ñ ˜c¤T¨#£YÒ.Ø"�FÚšfªÙð	ñ  Ü×,Ñ,Ð,ÙÜ×1Ñ1Ð1ÙÜ×,Ñ,Ð,Ü×&Ñ&Ð&÷!'ð 'ús   Ã=E4Å4E=	c           
      ó¶   — t         j                  d|z  t         j                  dt         j                  dt         j                  d||fz  ij                  | d «      S )Nz%%.%ie
z%i
z%u
z%%.%ie %%.%ie
)r   Ú
FIELD_REALÚFIELD_INTEGERÚFIELD_UNSIGNEDÚFIELD_COMPLEXÚget)r+   r,   s     r   Ú_field_templatezMMFile._field_template+  sY   € ä×!Ñ! :°	Ñ#9Ü×$Ñ$ fÜ×%Ñ% vÜ×$Ñ$Ð&7Ø 	Ð*ñ'+ð÷
 ‘#�e˜TÓ"ð	#r   c                 ó(   —  | j                   di |¤Ž y )Nrb   )Ú_init_attrs)r8   Úkwargss     r   Ú__init__zMMFile.__init__5  s   € Øˆ×ÑÑ"˜6Ó"r   r"   c                óˆ  — | j                  |«      \  }}	 | j                  |«       | j                  |«      }|r|j                  «        	 |t        u r:d}t
        j                  j                  t        «      f}t        |t        |¬«       d}|rt        |t        «      rt        |«      }|S # |r|j                  «        w w xY w)aô  
        Reads the contents of a Matrix Market file-like 'source' into a matrix.

        Parameters
        ----------
        source : str or file-like
            Matrix Market filename (extensions .mtx, .mtz.gz)
            or open file object.
        spmatrix : bool, optional (default: True)
            If ``True``, return sparse matrix. Otherwise return sparse array.

            .. deprecated:: 1.18.0
                The default value for `spmatrix` is changing to False in v1.20.
                That means the default return value will be a sparse array.
                Unless you use * instead of @, ** for matrix power, or you depend
                on 2D shapes from e.g. ``A.sum(axis=0)`` it may not matter to you.
                See :ref:`Migration from spmatrix to sparray <migration_to_sparray>`.

        Returns
        -------
        a : ndarray or coo_array or coo_matrix
            Dense or sparse array depending on the matrix format in the
            Matrix Market file.
        aÓ  The default value for `spmatrix` is changing to `False` in v1.20.
             That means the default return type will be a sparse array.
             Unless you use * instead of @, ** for matrix power, or you depend
             on 2D shapes from e.g. `A.sum(axis=0)` it may not matter to you.
             See the spmatrix to sparray migration guide for details.
             https://docs.scipy.org/doc/scipy/reference/sparse.migration_to_sparray.html
             )Úskip_file_prefixesT)rt   Ú_parse_headerÚ_parse_bodyr   r   r‰   rŒ   ÚdirnameÚ__file__r   ÚDeprecationWarningr   r   r   )r8   r!   r#   r€   r�   ÚdatarN   Úprefixess           r   r%   zMMFile.read9  s°   € ð2  Ÿ:™: fÓ-Ñˆ�ð	Ø×Ñ˜vÔ&Ø×#Ñ# FÓ+ˆDñ Ø—‘•à”xÑðˆCô Ÿ™Ÿ™¬Ó1Ð3ˆHÜ�Ô(¸XÕFØˆHáœ
 4¬Ô3Ü˜dÓ#ˆDØˆøñ# Ø—‘•ð ús   –"B, Â,CNc                 óò   — | j                  |d«      \  }}	 | j                  ||||||«       |r|j                  «        y|j                  «        y# |r|j                  «        w |j                  «        w xY w)a7  
        Writes sparse or dense array `a` to Matrix Market file-like `target`.

        Parameters
        ----------
        target : str or file-like
            Matrix Market filename (extension .mtx) or open file-like object.
        a : array like
            Sparse or dense 2-D array.
        comment : str, optional
            Comments to be prepended to the Matrix Market file.
        field : None or str, optional
            Either 'real', 'complex', 'pattern', or 'integer'.
        precision : None or int, optional
            Number of digits to display for real or complex values.
        symmetry : None or str, optional
            Either 'general', 'symmetric', 'skew-symmetric', or 'hermitian'.
            If symmetry is None the symmetry type of 'a' is determined by its
            values.
        ÚwbN)rt   Ú_writer   Úflush)	r8   r(   r)   r*   r+   r,   r-   r€   r�   s	            r   r'   zMMFile.writen  sd   € ð.  Ÿ:™: f¨dÓ3Ñˆ�ð	Ø�K‰K˜  7¨E°9¸hÔGñ Ø—‘•à—‘•øñ Ø—‘•à—‘•ús   —A Á%A6c           
      ó.  — | j                   j                  }|D �cg c]  }|dd ‘Œ	 }}t        |j                  «       «      t        |«      z
  }|rt	        dt        |«      › d|› �«      ‚|D ]"  }t        | ||j                  |dd d«      «       Œ$ yc c}w )zr
        Initialize each attributes with the corresponding keyword arg value
        or a default of None
        é   Nzfound z, invalid keyword arguments, please only use )Ú	__class__Ú	__slots__ÚsetÚkeysrM   ÚtupleÚsetattrrº   )r8   r¾   ÚattrsÚattrÚpublic_attrsÚinvalid_keyss         r   r½   zMMFile._init_attrs‘  s§   € ð —‘×(Ñ(ˆØ-2Ö3 T˜˜Q˜RšÐ3ˆÐ3Ü˜6Ÿ;™;›=Ó)¬C°Ó,=Ñ=ˆáÜ˜v¤e¨LÓ&9Ð%:ð ;;Ø;G¸.ðJó Kð Kð ò 	<ˆDÜ�D˜$ §
¡
¨4°°¨8°TÓ :Õ;ñ	<ùò 4s   ›Bc                 óv   — | j                   j                  |«      \  }}}}}}| j                  ||||||¬«       y )N)r9   r<   r>   r@   r+   r-   )rÏ   r    r½   )r8   r€   r9   r<   r>   r@   r+   r-   s           r   rÂ   zMMFile._parse_header£  sE   € à�N‰N×Ñ Ó'ñ 	5ˆˆd�G˜V U¨Hà×Ñ˜d¨°wÀvØ$¨xð 	õ 	9r   c           	      óö  — | j                   | j                  | j                  | j                  | j                  | j
                  f\  }}}}}}| j                  j                  |d «      }| j                  }	|| j                  k(  }
|| j                  k(  }|| j                  k(  }|| j                  k(  }|| j                  k(  }|| j                  k(  }|| j                  k(  �r?t!        ||f|¬«      }d}d\  }}|rd|||f<   ||dz
  k  r|dz  }|rÞ|j#                  «       }|r|d   dv s|j%                  «       sŒ,|
rt'        |«      }n@|rt'        |«      }n2|r%t)        t+        t,        |j/                  «       «      Ž }nt-        |«      }||||f<   |	r*||k7  r%|r	| |||f<   n|rt1        |«      |||f<   n||||f<   ||dz
  k  r|dz   }n"|dz   }|	sd}n|}|rd|||f<   ||dz
  k  r|dz  }|rŒÞ|r|d|fv r||dz
  k(  s!t3        d«      ‚|d|fv r||k(  st3        d«      ‚|S || j4                  k(  �rÃ|dk(  rt7        ||f|¬«      S t!        |d¬«      }t!        |d¬«      }|rt9        |d¬«      }n=|
rt!        |d	¬«      }n-|rt!        |d
¬«      }n|rt!        |d¬«      }nt!        |d¬«      }d}|D ]º  }|r|d   dv s|j%                  «       sŒ|dz   |kD  rt3        d«      ‚|j/                  «       }t+        t&        |d d «      \  ||<   ||<   |sX|
rt'        |d   «      ||<   nD|rt'        |d   «      ||<   n0|rt)        t+        t,        |dd  «      Ž ||<   nt-        |d   «      ||<   |dz  }Œ¼ ||k  rt3        d«      ‚|dz  }|dz  }|	rU||k7  }||   }||   }||   }t;        ||f«      }t;        ||f«      }|r|dz  }n|r|j=                  «       }t;        ||f«      }t7        |||ff||f|¬«      }|S t?        |«      ‚)N)r¥   rÎ   )r   r   r   rn   z$Parse error, did not read all lines.ÚintcÚint8r]   r^   rR   Úfloatz5'entries' in header is smaller than number of entriesrq   z4'entries' in header is larger than number of entrieséÿÿÿÿ)r£   r¥   ) r9   r<   r>   r@   r+   r-   ÚDTYPES_BY_FIELDrº   rG   r·   r¸   r¹   rE   rF   ÚFIELD_PATTERNry   r   ru   ri   r~   rR   r}   rÝ   rv   r   rM   rz   r   r   r
   Ú	conjugateÚNotImplementedError)r8   r€   r9   r<   r>   r@   r+   Úsymmr¥   rG   Ú
is_integerÚis_unsigned_integerÚ
is_complexÚis_skewÚis_hermÚ
is_patternr)   r‚   r™   rš   r›   ÚIÚJÚVÚentry_numberÚlÚmaskÚod_IÚod_JÚod_Vs                                 r   rÃ   zMMFile._parse_bodyª  s�  € Ø48·I±I¸t¿y¹yØ48·L±LÀ$Ç+Á+Ø48·J±JÀÇÁð4OÑ0ˆˆd�G˜V U¨Dð ×$Ñ$×(Ñ(¨°Ó5ˆà×(Ñ(ˆØ˜d×0Ñ0Ñ0ˆ
Ø# t×':Ñ':Ñ:ÐØ˜d×0Ñ0Ñ0ˆ
Ø˜$×6Ñ6Ñ6ˆØ˜$×1Ñ1Ñ1ˆØ˜d×0Ñ0Ñ0ˆ
à�T×&Ñ&Ó&Ü�t˜T�l¨%Ô0ˆAØˆDØ‰DˆAˆqÙØ��!�Q�$‘Ø�t˜a‘x’<Ø˜‘F�AÙØ—‘Ó(�á˜t A™w¨)Ñ3¸4¿:¹:¼<ØÙÜ˜d›)‘CÙ(Ü˜d›)‘CÙÜ!¤3¤u¨d¯j©j«lÓ#;Ð<‘Cä ›+�CØ��!�Q�$‘Ù A¨¢FÙØ#& $˜˜!˜Q˜$šÙ Ü"& s£)˜˜!˜Q˜$šà"%˜˜!˜Q˜$™Ø�t˜A‘v’:Ø˜A™‘Aà˜A™�AÙ'Ø™à˜Ù"Ø&'˜A˜a ˜d™GØ  4¨¡6šzØ ! Q¡ òA ñD Ø˜a ˜V™¨¨T°A©XªÜ$Ð%KÓLÐLà˜a ˜V™¨¨Tª	Ü$Ð%KÓLÐLðN ˆðK �t×-Ñ-Ó-ð ˜!Š|ä  $¨ °UÔ;Ð;ä�g VÔ,ˆAÜ�g VÔ,ˆAÙÜ˜¨Ô/‘ÙÜ˜'¨Ô0‘Ù$Ü˜'¨Ô2‘ÙÜ˜'¨Ô3‘ä˜'¨Ô1�àˆLØò "�á˜t A™w¨)Ñ3¸4¿:¹:¼<Øà ‘> GÒ+Ü$ð &9ó :ð :à—J‘J“L�Ü36´s¸A¸b¸q¸E³?Ñ0��,‘  <¡á!Ù!Ü*-¨a°©d«)˜˜,šÙ,Ü*-¨a°©d«)˜˜,šÙ#Ü*1´3´u¸aÀÀ¸eÓ3DÐ*E˜˜,šä*/°°!±«+˜˜,™Ø Ñ!‘ð)"ð* ˜gÒ%Ü ð "5ó 6ð 6ð �‰FˆAØ�‰FˆAáØ˜Q™�Ø˜‘w�Ø˜‘w�Ø˜‘w�ä  D 	Ó*�Ü  D 	Ó*�áØ˜B‘J‘DÙØŸ>™>Ó+�Dä  D 	Ó*�ä˜1˜q !˜f˜+¨d°D¨\ÀÔGˆAð ˆô & fÓ-Ð-r   c                 ó  — t        |t        «      s,t        |t        «      st        |t        «      st	        |d«      rÿ| j
                  }t        |«      }t        |j                  «      dk7  rt        d«      ‚|j                  \  }}	|�ç|| j                  k(  r3t        |j                  d«      st        d«      ‚|j                  d«      }n¥|| j                  k(  r*|j                  j                   dvr~|j                  d«      }nl|| j"                  k(  r]|j                  j                   dvrE|j                  d	«      }n3t%        |«      st        d
t'        |«      › �«      ‚d}|j                  \  }}	|j                  j                   }
|€	|
dv rd}nd}|€e|j                  j(                  }|dk(  r$t        |j                  d«      st        d«      ‚d}n&|dk(  rd}n|dk(  rd}n|dk(  rd}nt+        d|z   «      ‚|€| j-                  |«      }| j.                  j1                  |«       | j.                  j3                  |«       | j.                  j5                  |«       d|› d|› d|› d�}|j7                  |j9                  d«      «       |j;                  d«      D ](  }d|› d�}|j7                  |j9                  d«      «       Œ* | j=                  ||«      }|| j
                  k(  �rZd||	fz  }|j7                  |j9                  d«      «       || j                  | j                  | j>                  fv �r|| j@                  k(  rKtC        |	«      D ]<  }tC        |«      D ],  }||||f   z  }|j7                  |j9                  d«      «       Œ. Œ> y || jD                  k(  rOtC        |	«      D ]@  }tC        |dz   |«      D ],  }||||f   z  }|j7                  |j9                  d«      «       Œ. ŒB y tC        |	«      D ]=  }tC        ||«      D ],  }||||f   z  }|j7                  |j9                  d«      «       Œ. Œ? y || j"                  k(  rÒ|| j@                  k(  ratC        |	«      D ]R  }tC        |«      D ]B  }|||f   }|tG        |«      tI        |«      fz  }|j7                  |j9                  d«      «       ŒD ŒT y tC        |	«      D ]S  }tC        ||«      D ]B  }|||f   }|tG        |«      tI        |«      fz  }|j7                  |j9                  d«      «       ŒD ŒU y || jJ                  k(  rt        d«      ‚t+        d |› �«      ‚|jM                  «       }|| j@                  k7  r[|jN                  |jP                  k\  }tS        |jT                  |   |jN                  |   |jP                  |   ff|j                  ¬!«      }d"||	|jV                  fz  }|j7                  |j9                  d«      «       | j=                  ||dz
  «      }|| jJ                  k(  rVtY        |jN                  dz   |jP                  dz   «      D ],  \  }}d||fz  }|j7                  |j9                  d«      «       Œ. y || j                  | j                  | j>                  fv rhtY        |jN                  dz   |jP                  dz   |jT                  «      D ]3  \  }}}d#||fz  ||z  z   }|j7                  |j9                  d«      «       Œ5 y || j"                  k(  r~tY        |jN                  dz   |jP                  dz   |jT                  «      D ]I  \  }}}d#||fz  ||jF                  |jH                  fz  z   }|j7                  |j9                  d«      «       ŒK y t+        d |› �«      ‚)$NÚ	__array__rq   zExpected 2 dimensional arrayr]   zBmmwrite does not support integer dtypes larger than native 'intp'.Úfdr_   r–   r`   zunknown matrix type: rH   ÚfFé   é   r™   rP   Úfr   ÚcrR   ÚurQ   zunexpected dtype kind z%%MatrixMarket matrix ú ú
r   ro   z%i %i
rÎ   z*pattern type inconsisted with dense formatzUnknown field type )r£   z	%i %i %i
z%i %i )-r   Úlistr	   rÓ   Úhasattrry   r   r|   r£   rM   r·   r   r¥   ÚOverflowErrorÚastyper¶   r¦   r¹   r   ÚtypeÚkindr‹   r´   rÏ   rO   rV   r\   r'   Úencoderv   r»   r¸   r¤   rŸ   rE   r   r   rà   r§   r±   r²   r   rÇ   ÚnnzÚzip)r8   r€   r)   r*   r+   r,   r-   Úrepr9   r<   Útypecoder  rÇ   r‚   Útemplaterš   r™   r›   ÚcooÚlower_triangle_maskr†   rú   r_   s                          r   rË   zMMFile._write2  sJ  € ä�aœÔ¤*¨Q´Ô"8Ü�aœÔ¤7¨1¨kÔ#:Ø×#Ñ#ˆCÜ˜“
ˆAÜ�1—7‘7‹|˜qÒ Ü Ð!?Ó@Ð@ØŸ™‰JˆD�$àÐ à˜D×.Ñ.Ò.Ü# A§G¡G¨VÔ4Ü+ð -Pó Qð QàŸ™ Ó(‘AØ˜dŸo™oÒ-Ø—w‘w—|‘|¨4Ñ/ØŸH™H S›M™Ø˜d×0Ñ0Ò0Ø—w‘w—|‘|¨4Ñ/ØŸH™H S›M™ô ˜A”;Ü Ð#8¼¸a»¸	Ð!BÓCÐCàˆCØŸ™‰JˆD�$à—7‘7—<‘<ˆàÐØ˜4ÑØ‘	à�	Øˆ=Ø—7‘7—<‘<ˆDØ�sŠ{Ü §¡¨Ô0Ü'ð )Ló Mð Mà!‘Ø˜’Ø‘Ø˜’Ø!‘Ø˜’Ø*‘äÐ 8¸4Ñ ?Ó@Ð@àÐØ×)Ñ)¨!Ó,ˆHð 	�‰×'Ñ'¨Ô,Ø�‰×&Ñ& uÔ-Ø�‰×)Ñ)¨(Ô3ð (¨ u¨A¨e¨W°A°h°Z¸rÐBˆØ�‰�T—[‘[ Ó*Ô+ð —M‘M $Ó'ò 	0ˆDØ�t�f˜B�<ˆDØ�L‰L˜Ÿ™ XÓ.Õ/ð	0ð ×'Ñ'¨¨yÓ9ˆà�$×#Ñ#Ó#à  d˜|Ñ+ˆDØ�L‰L˜Ÿ™ XÓ.Ô/à˜×+Ñ+¨T¯_©_Ø×,Ñ,ð.ò .à˜t×4Ñ4Ò4Ü" 4›[ò @˜Ü!& t£ò @˜AØ#+¨a°°1°©gÑ#5˜DØ"ŸL™L¨¯©°XÓ)>Õ?ñ@ñ@ð
  ×!=Ñ!=Ò=Ü" 4›[ò @˜Ü!& q¨1¡u¨dÓ!3ò @˜AØ#+¨a°°1°©gÑ#5˜DØ"ŸL™L¨¯©°XÓ)>Õ?ñ@ñ@ô # 4›[ò @˜Ü!& q¨$£ò @˜AØ#+¨a°°1°©gÑ#5˜DØ"ŸL™L¨¯©°XÓ)>Õ?ñ@ñ@ð
 ˜$×,Ñ,Ò,à˜t×4Ñ4Ò4Ü" 4›[ò @˜Ü!& t£ò @˜AØ"# A q D¡'˜CØ#+¬t°C«y¼$¸s»)Ð.DÑ#D˜DØ"ŸL™L¨¯©°XÓ)>Õ?ñ@ñ@ô # 4›[ò @˜Ü!& q¨$£ò @˜AØ"# A q D¡'˜CØ#+¬t°C«y¼$¸s»)Ð.DÑ#D˜DØ"ŸL™L¨¯©°XÓ)>Õ?ñ@ñ@ð ˜$×,Ñ,Ò,Ü Ð!MÓNÐNô  Ð"5°e°WÐ =Ó>Ð>ð —'‘'“)ˆCð ˜4×0Ñ0Ò0Ø&)§g¡g°·±Ñ&8Ð#Ü §¡Ð*=Ñ!>Ø!$§¡Ð)<Ñ!=Ø!$§¡Ð)<Ñ!=ð!?ð!@ð '*§i¡iô1�ð   4¨¨s¯w©wÐ"7Ñ7ˆDØ�L‰L˜Ÿ™ XÓ.Ô/à×+Ñ+¨E°9¸Q±;Ó?ˆHà˜×*Ñ*Ò*Ü §¡¨¡	¨3¯7©7°1©9Ó5ò 8‘D�A�qØ$¨¨1 vÑ-�DØ—L‘L §¡¨XÓ!6Õ7ñ8ð ˜4×-Ñ-¨t¯©Ø×.Ñ.ð0ñ 0ä" 3§7¡7¨1¡9¨c¯g©g°a©i¸¿¹ÓBò 8‘G�A�q˜!Ø$¨¨1 vÑ-°(¸Q±,Ñ?�DØ—L‘L §¡¨XÓ!6Õ7ñ8ð ˜$×,Ñ,Ò,Ü" 3§7¡7¨1¡9¨c¯g©g°a©i¸¿¹ÓBò 8‘G�A�q˜!Ø$¨¨1 vÑ-°(¸a¿f¹fÀaÇfÁfÐ=MÑ2MÑN�DØ—L‘L §¡¨XÓ!6Õ7ñ8ô  Ð"5°e°WÐ =Ó>Ð>r   )r‡   ©Ú NNN).Ú__name__Ú
__module__Ú__qualname__rÐ   Úpropertyr9   r<   r>   r@   r+   r-   rG   rz   ry   rL   ÚclassmethodrO   r·   r¸   r¶   r¹   rà   rU   rV   r¤   rD   rE   rF   r[   r\   rß   Ústaticmethodrc   rf   r    rt   r´   r»   r¿   r   r%   r'   r½   rÂ   rÃ   rË   rb   r   r   r   r   ý   s$  „ ð€Ið ñó ðð ñó ðð ñó ðð ñó ðð ñó ðð ñó ðð ñ;ó ð;ð %ÐØ€LØ&¨Ð5€Màñ"ó ð"ð €MØ'€NØ€JØ€MØ€MØ! >°:¸}Ø!ð#€Lð ñ"ó ð"ð !ÐØ$ÐØ.ÐØ$ÐØ'Ð);Ø.Ð0BðD€Oð ñGó ðGð
 % fØ% xØ! 3Ø$ cØ$ cð	+€Oð ñó ðð ñó ðð ñKó ðKð\ ò;ó ð;ð| ñ='ó ð='ð@ ñ#ó ð#ò#ð (0ô 1ðj BFØó òF<ò$9òEðP CGØôW?r   r   c                 óò   — g }	 ddl }|j                  |j                  «       	 ddl}|j                  |j
                  «       t        |«      }t        | |«       S # t        $ r Y ŒCw xY w# t        $ r Y Œ2w xY w)z¡
    Check whether `stream` is compatible with numpy.fromfile.

    Passing a gzipped file object to ``fromfile/fromstring`` doesn't work with
    Python 3.
    r   N)r�   ÚappendÚGzipFileÚImportErrorr‘   r’   rÓ   r   )r€   Úbad_clsr�   r‘   s       r   Ú_is_fromfile_compatibler  Ì  s{   € ð €GðÛØ�‰�t—}‘}Ô%ðÛØ�‰�s—{‘{Ô#ô �G‹n€GÜ˜& 'Ó*Ð*Ð*øô ò Ùðûô
 ò Ùðús"   „A ¤A* Á	A'Á&A'Á*	A6Á5A6r  )Ú__doc__r‰   Úwarningsr   Únumpyr«   r   r   r   r   r   r	   r
   r   r   Úscipy.sparser   r   r   Úscipy._lib.deprecationr   Ú__all__r   r   r   r   r   r  rb   r   r   ú<module>r      sd   ðñó 
Ý ã ÷#÷ #õ #÷ 9Ñ 8Ý +â
3€òò0ðj  (ô 64óvhC÷XL?ñ L?ó^+r   