Ë
    âQ(h^}  ã                   óš   — d Z ddl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 g d¢Zd„ Zd„ Zd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)	ÚasarrayÚrealÚimagÚconjÚzerosÚndarrayÚconcatenateÚonesÚcan_cast)Ú	coo_arrayÚissparseÚ
coo_matrix)ÚmminfoÚmmreadÚmmwriteÚMMFilec                 óZ   — t        | t        «      r| j                  d«      S t        | «      S )NÚlatin1)Ú
isinstanceÚbytesÚdecodeÚstr)Úss    úL/var/www/skyplay_api_hub/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   T©Ú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 ``coo_matrix``. Otherwise return ``coo_array``.

    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   T   s   € ô^ ‹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.

    Returns
    -------
    None

    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   € ôX ƒ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&d"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 r4   )r.   r5   s    r   ÚcolszMMFile.cols  r8   r   c                 ó   — | j                   S r4   )r/   r5   s    r   ÚentrieszMMFile.entries  s   € à�}‰}Ðr   c                 ó   — | j                   S r4   )r0   r5   s    r   ÚformatzMMFile.format  s   € à�|‰|Ðr   c                 ó   — | j                   S r4   )r1   r5   s    r   r)   zMMFile.field  s   € à�{‰{Ðr   c                 ó   — | j                   S r4   )r2   r5   s    r   r+   zMMFile.symmetry  s   € à�~‰~Ðr   c                 ó`   — | j                   | j                  | j                  | j                  fv S r4   )r2   ÚSYMMETRY_SYMMETRICÚSYMMETRY_SKEW_SYMMETRICÚSYMMETRY_HERMITIANr5   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)r6   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 rI   )ÚFIELD_VALUESrK   )r6   r)   rL   s      r   Ú_validate_fieldzMMFile._validate_field2  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 rI   )ÚSYMMETRY_VALUESrK   )r6   r+   s     r   Ú_validate_symmetryzMMFile._validate_symmetry@  sC   € à˜4×/Ñ/Ñ/ÜÐ5°h°Zð @/Ø/3×/CÑ/CÐ.DðFó Gð Gð 0r   ÚintpÚuint64ÚdÚDc                   ó   — y r4   © r`   r   r   ÚreaderzMMFile.readerM  ó   € àr   c                   ó   — y r4   r`   r`   r   r   ÚwriterzMMFile.writerR  rb   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r4   )r   Ústrip)Ú.0Úparts     r   ú	<genexpr>zMMFile.info.<locals>.<genexpr>y  s   è ø€ Ò>¨”�t—z‘z“|×$Ñ>ùs   ‚#%z%%MatrixMarketz%source is not in Matrix Market formatÚmatrixzProblem reading file header: rG   rF   r   ©ú%é%   é   zHeader line not of length 2: Úasciié   zHeader line not of length 3: )Ú_openÚreadlineÚsplitÚ
startswithrK   ÚlowerÚFORMAT_ARRAYÚFORMAT_COORDINATEÚlstriprg   Úlenr   ÚmapÚintÚclose)r6   r   ÚstreamÚclose_itÚlineÚmmidrk   r>   r)   r+   Ú
split_liner7   r:   r<   s                 r   r   zMMFile.infoW  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   rr   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r4   )Ú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   rB   rC   rD   )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 )Nr`   )Ú_init_attrs)r6   Úkwargss     r   Ú__init__zMMFile.__init__0  s   € Øˆ×ÑÑ"˜6Ó"r   Tr    c                ó  — | j                  |«      \  }}	 | j                  |«       | j                  |«      }|r|j                  «        	 |rt	        |t
        «      rt        |«      }|S # |r|j                  «        w w xY w)aB  
        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 ``coo_matrix``. Otherwise return ``coo_array``.

        Returns
        -------
        a : ndarray or coo_array or coo_matrix
            Dense or sparse array depending on the matrix format in the
            Matrix Market file.
        )rr   Ú_parse_headerÚ_parse_bodyr}   r   r   r   )r6   r   r!   r~   r   Údatas         r   r#   zMMFile.read4  sx   € ð$  Ÿ:™: fÓ-Ñˆ�ð	Ø×Ñ˜vÔ&Ø×#Ñ# FÓ+ˆDñ Ø—‘•Ùœ
 4¬Ô3Ü˜dÓ#ˆDØˆøñ	 Ø—‘•ð ús   –"A* Á*A?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)rr   Ú_writer}   Úflush)	r6   r&   r'   r(   r)   r*   r+   r~   r   s	            r   r%   zMMFile.writeU  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ÚkeysrK   ÚtupleÚsetattrr¸   )r6   r¼   ÚattrsÚattrÚpublic_attrsÚinvalid_keyss         r   r»   zMMFile._init_attrsx  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)r7   r:   r<   r>   r)   r+   )rÈ   r   r»   )r6   r~   r7   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   rl   z$Parse error, did not read all lines.ÚintcÚint8r[   r\   rP   Úfloatz5'entries' in header is smaller than number of entriesro   z4'entries' in header is larger than number of entrieséÿÿÿÿ)r¡   r£   ) r7   r:   r<   r>   r)   r+   ÚDTYPES_BY_FIELDr¸   rE   rµ   r¶   r·   rC   rD   ÚFIELD_PATTERNrw   r   rs   rg   r|   rP   r{   rÖ   rt   r   rK   rx   r   r
   r	   Ú	conjugateÚNotImplementedError)r6   r~   r7   r:   r<   r>   r)   Úsymmr£   rE   Ú
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__ro   zExpected 2 dimensional arrayr[   zBmmwrite does not support integer dtypes larger than native 'intp'.Úfdr]   r”   r^   zunknown matrix type: rF   ÚfFé   é   r—   rN   Úfr   ÚcrP   ÚurO   zunexpected dtype kind z%%MatrixMarket matrix ú ú
r   rm   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Ì   Úhasattrrw   r   rz   r¡   rK   rµ   r   r£   ÚOverflowErrorÚastyper´   r¤   r·   r   ÚtypeÚkindr‰   r²   rÈ   rM   rT   rZ   r%   Úencodert   r¹   r¶   r¢   r�   rC   r   r   rÙ   r¥   r¯   r°   r   rÁ   ÚnnzÚzip)r6   r~   r'   r(   r)   r*   r+   Úrepr7   r:   Útypecoderü   rÁ   r€   Útemplater˜   r—   r™   ÚcooÚlower_triangle_maskr„   ró   r]   s                          r   rÄ   zMMFile._write  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É   Úpropertyr7   r:   r<   r>   r)   r+   rE   rx   rw   rJ   ÚclassmethodrM   rµ   r¶   r´   r·   rÙ   rS   rT   r¢   rB   rC   rD   rY   rZ   rØ   Ústaticmethodra   rd   r   rr   r²   r¹   r½   r#   r%   r»   r¿   rÀ   rÄ   r`   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ð\ ò;ó ð;ð| ñ='ó ð='ð@ ñ#ó ð#ò#ð (,ô ðB 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‡   Únumpyr©   r   r   r   r   r   r   r	   r
   r   Úscipy.sparser   r   r   Ú__all__r   r   r   r   r   r  r`   r   r   ú<module>r     s^   ðñó 
ã ÷#÷ #õ #÷ 9Ñ 8â
3€òò0ðj  $ô /4óhlC÷`x
?ñ x
?óv+r   