U
    »mœd��  ã                   @   s˜   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 ddddgZd	d
„ Zdd„ Zdd„ Zddd„ZG dd„ dƒZdd„ ZdS )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_matrixÚ
isspmatrixÚmminfoÚmmreadÚmmwriteÚMMFilec                 C   s   t | tƒr|  d¡S t| ƒS )NÚlatin1)Ú
isinstanceÚbytesÚdecodeÚstr)Ús© r   úG/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/scipy/io/_mmio.pyÚasstr   s    

r   c                 C   s
   t  | ¡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©Úsourcer   r   r   r      s    0c                 C   s   t ƒ  | ¡S )aG  
    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.

    Returns
    -------
    a : ndarray or coo_matrix
        Dense or sparse matrix 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))
    >>> m
    <5x5 sparse matrix of type '<class 'numpy.float64'>'
    with 7 stored elements in COOrdinate format>
    >>> m.A
    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   Úreadr   r   r   r   r   T   s    -Ú c                 C   s   t ƒ  | |||||¡ dS )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_matrix
    >>> 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.0000000000000000e+00
    0.0000000000000000e+00
    0.0000000000000000e+00
    2.5000000000000000e+00
    0.0000000000000000e+00
    0.0000000000000000e+00
    0.0000000000000000e+00
    6.2500000000000000e+00

    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.000e+00
    0.000e+00
    0.000e+00
    2.500e+00
    0.000e+00
    0.000e+00
    0.000e+00
    6.250e+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_matrix(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.00e+00 0.00e+00
    1.00e+00 -2.00e+00
    4.00e+00 3.00e+00
    1.00e+00 0.00e+00
    0.00e+00 5.00e+00
    2.50e+00 0.00e+00

    N)r   Úwrite)ÚtargetÚaÚcommentÚfieldÚ	precisionÚsymmetryr   r   r   r   †   s    lc                
   @   st  e Zd ZdZedd„ ƒZedd„ ƒZedd„ ƒZedd	„ ƒZed
d„ ƒZ	edd„ ƒZ
edd„ ƒZdZdZeefZedd„ ƒZdZdZdZdZdZeeeeefZedd„ ƒZdZdZdZdZeeeefZedd „ ƒZed!ed"ed#ed$ed#iZed%d&„ ƒZ ed'd(„ ƒZ!ed)d*„ ƒZ"edBd,d-„ƒZ#ed.d/„ ƒZ$ed0d1„ ƒZ%d2d3„ Z&d4d5„ Z'dCd8d9„Z(d:d;„ Z)d<d=„ Z*d>d?„ Z+dDd@dA„Z,d7S )Er   )Ú_rowsÚ_colsÚ_entriesÚ_formatÚ_fieldÚ	_symmetryc                 C   s   | j S ©N)r&   ©Úselfr   r   r   Úrowsþ   s    zMMFile.rowsc                 C   s   | j S r,   )r'   r-   r   r   r   Úcols  s    zMMFile.colsc                 C   s   | j S r,   )r(   r-   r   r   r   Úentries  s    zMMFile.entriesc                 C   s   | j S r,   )r)   r-   r   r   r   Úformat
  s    zMMFile.formatc                 C   s   | j S r,   )r*   r-   r   r   r   r#     s    zMMFile.fieldc                 C   s   | j S r,   )r+   r-   r   r   r   r%     s    zMMFile.symmetryc                 C   s   | j | j| j| jfkS r,   )r+   ÚSYMMETRY_SYMMETRICÚSYMMETRY_SKEW_SYMMETRICÚSYMMETRY_HERMITIANr-   r   r   r   Úhas_symmetry  s    þzMMFile.has_symmetryÚ
coordinateÚarrayc                 C   s    || j krtd|| j f ƒ‚d S )Nz)unknown format type %s, must be one of %s)ÚFORMAT_VALUESÚ
ValueError)r.   r2   r   r   r   Ú_validate_format!  s    
ÿzMMFile._validate_formatÚintegerúunsigned-integerr   ÚcomplexÚpatternc                 C   s    || j krtd|| j f ƒ‚d S )Nz(unknown field type %s, must be one of %s)ÚFIELD_VALUESr:   )r.   r#   r   r   r   Ú_validate_field0  s    
ÿzMMFile._validate_fieldZgeneralZ	symmetriczskew-symmetricZ	hermitianc                 C   s    || j krtd|| j f ƒ‚d S )Nz+unknown symmetry type %s, must be one of %s)ÚSYMMETRY_VALUESr:   )r.   r%   r   r   r   Ú_validate_symmetry>  s    
ÿzMMFile._validate_symmetryÚintpÚuint64ÚdÚDc                   C   s   d S r,   r   r   r   r   r   ÚreaderK  s    zMMFile.readerc                   C   s   d S r,   r   r   r   r   r   ÚwriterP  s    zMMFile.writerc                 C   sZ  |   |¡\}}�z4| ¡ }dd„ | ¡ D ƒ\}}}}}	| d¡sHtdƒ‚| ¡ dks`td| ƒ‚| ¡ dkrt| j}n| ¡ dkr†| j}|r |d	 d
kr | ¡ }q†| 	¡ s²| ¡ }q | ¡ }
|| jkrút
|
ƒdksâtd| d¡ ƒ‚tt|
ƒ\}}|| }n0t
|
ƒdk�std| d¡ ƒ‚tt|
ƒ\}}}||||| ¡ |	 ¡ fW ¢S |�rT| ¡  X dS )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                 S   s   g | ]}t | ¡ ƒ‘qS r   )r   Ústrip)Ú.0Úpartr   r   r   Ú
<listcomp>w  s     zMMFile.info.<locals>.<listcomp>z%%MatrixMarketz%source is not in Matrix Market formatÚmatrixzProblem reading file header: r8   r7   r   ©ú%é%   é   zHeader line not of length 2: Úasciié   zHeader line not of length 3: N)Ú_openÚcloseÚreadlineÚsplitÚ
startswithr:   ÚlowerÚFORMAT_ARRAYÚFORMAT_COORDINATErJ   Úlenr   ÚmapÚint)r.   r   ÚstreamÚclose_itÚlineZmmidrN   r2   r#   r%   Z
split_liner/   r0   r1   r   r   r   r   U  sF    ÿ



ÿ
ÿÿzMMFile.infoÚrbc                 C   s  zt  | ¡} W n tk
r*   | df Y S X |d dkrÜt j | ¡s�t j | d ¡r^| d } n2t j | d ¡rx| d } nt j | d ¡r�| d } |  d¡r°ddl}| | |¡}n*|  d	¡rÐddl}| 	| d
¡}n
t| |ƒ}n"| dd… dkrô| d } t| |ƒ}|dfS )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.bz2rc   éüÿÿÿT)
ÚosÚfspathÚ	TypeErrorÚpathÚisfileÚendswithÚgzipÚopenÚbz2ÚBZ2File)ZfilespecÚmoderl   r`   rn   r   r   r   rU   ¡  s.    




zMMFile._openc              
      s<  ˆ j \}‰|ˆkrtjS d}d}ˆ jjdk}tˆ ƒr|ˆ  ¡ ‰ ˆ  ¡ \}}||k  ¡ ||k ¡ krftjS ˆ  	¡ ‰ ‡ fdd„}n‡ ‡fdd„}|ƒ D ]€\}}	}
|r°|
r°|dkr°d}nN|rÀ||	krÀd}t
jdd	�� |rà||	 kràd}W 5 Q R X |rþ|t|	ƒkrþd}|s�|s�|s� �qq�|�rtjS |�r*tjS |�r6tjS tjS )
NTÚFDc                  3   sP   ˆ   ¡ D ]B\\} }}| |kr6ˆ || f }||dfV  q| |kr||dfV  qd S )NFT)Úitems)ÚiÚjÚaijÚaji)r!   r   r   Úsymm_iteratorõ  s    z+MMFile._get_symmetry.<locals>.symm_iteratorc                  3   sL   t ˆƒD ]>} t | ˆƒD ].}ˆ | |  ˆ |  |  }}|||| kfV  qqd S r,   )Úrange)rt   rs   ru   rv   ©r!   Únr   r   rw      s    r   FÚignore)Zover)Úshaper   ÚSYMMETRY_GENERALÚdtypeÚcharr   ÚtocooZnonzeroÚsumZtodokÚnpZerrstater   r3   r4   r5   )r!   ÚmZissymmZisskewZishermÚrowÚcolrw   ru   rv   Zis_diagonalr   ry   r   Ú_get_symmetryà  sB    
zMMFile._get_symmetryc              
   C   s0   t jd| t jdt jdt jd||f i | d ¡S )Nz%%.%ie
z%i
z%u
z%%.%ie %%.%ie
)r   Ú
FIELD_REALÚFIELD_INTEGERÚFIELD_UNSIGNEDÚFIELD_COMPLEXÚget)r#   r$   r   r   r   Ú_field_template!  s    
   ÿý ûzMMFile._field_templatec                 K   s   | j f |Ž d S r,   )Ú_init_attrs)r.   Úkwargsr   r   r   Ú__init__+  s    zMMFile.__init__c                 C   s:   |   |¡\}}z|  |¡ |  |¡W ¢S |r4| ¡  X d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 object.

        Returns
        -------
        a : ndarray or coo_matrix
            Dense or sparse matrix depending on the matrix format in the
            Matrix Market file.
        N)rU   rV   Ú_parse_headerÚ_parse_body)r.   r   r`   ra   r   r   r   r   /  s    
zMMFile.readr   Nc           	      C   sF   |   |d¡\}}z|  ||||||¡ W 5 |r8| ¡  n| ¡  X dS )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)rU   rV   ÚflushÚ_write)	r.   r    r!   r"   r#   r$   r%   r`   ra   r   r   r   r   J  s    
zMMFile.writec              	   K   sl   | j j}dd„ |D ƒ}t| ¡ ƒt|ƒ }|rBtdt|ƒ|f ƒ‚|D ] }t| || |dd… d¡ƒ qFdS )zr
        Initialize each attributes with the corresponding keyword arg value
        or a default of None
        c                 S   s   g | ]}|d d… ‘qS )é   Nr   )rK   Úattrr   r   r   rM   t  s     z&MMFile._init_attrs.<locals>.<listcomp>zVfound %s invalid keyword arguments, please only
                                use %sr•   N)Ú	__class__Ú	__slots__ÚsetÚkeysr:   ÚtupleÚsetattrr‹   )r.   rŽ   ÚattrsZpublic_attrsZinvalid_keysr–   r   r   r   r�   m  s    ÿÿzMMFile._init_attrsc                 C   s2   | j  |¡\}}}}}}| j||||||d� d S )N)r/   r0   r1   r2   r#   r%   )r—   r   r�   )r.   r`   r/   r0   r1   r2   r#   r%   r   r   r   r�   €  s    
ÿ ÿzMMFile._parse_headerc                  C   sØ  | j | j| j| j| j| jf\}}}}}}zddlm} W n tk
rP   d }Y nX | j	 
|d ¡}	| j}
|| jk}|| jk}|| jk}|| jk}|| jk}|| jk}|| jk�rVt||f|	d�}d}d\}}|rîd|||f< ||d k rî|d7 }|�r| ¡ }|rî|d dksî| ¡ �sqî|�r(t|ƒ}n2|�r8t|ƒ}n"|�rRttt| ¡ ƒŽ }nt|ƒ}||||f< |
�r°||k�r°|�rŒ| |||f< n$|�r¤t|ƒ|||f< n||||f< ||d k �rÈ|d }qî|d }|
�sÜd}qî|}|rîd|||f< ||d k rî|d7 }qî|�r2|d|fk�r(||d k�sRtdƒ‚n |d|fk�rJ||k�sÔtdƒ‚�n~|| jk�r®|d k�r®t||f|	d�}d}d}|�r˜| ¡ }|�r„|d dk�s„| ¡ �s´�q„| ¡ }tt|d d… ƒ\}}|d |d  }}|�røt|d ƒ}n>|�rt|d ƒ}n*|�r*ttt|dd … ƒŽ }nt|d ƒ}||||f< |
�rŒ||k�rŒ|�rh| |||f< n$|�r€t|ƒ|||f< n||||f< |d }�q„||k�sÔtd	ƒ �n&|| jk�rÌ|dk�rÔ|||f|	d�S t|d
d�}t|d
d�}|�r t|dd�}nH|�rt|dd�}n4|�r(t|dd�}n |�r<t|dd�}nt|dd�}d}|D ]Ô}|�rP|d dk�sP| ¡ �sv�qP|d |k�rŒtdƒ‚| ¡ }tt|d d… ƒ\||< ||< |�s|�rÐt|d ƒ||< nJ|�rèt|d ƒ||< n2|�r
ttt|dd … ƒŽ ||< nt|d ƒ||< |d7 }�qP||k �r8tdƒ‚|d8 }|d8 }|
�r°||k}|| }|| }|| }t||fƒ}t||fƒ}|�r–|d9 }n|�r¤|  ¡ }t||fƒ}||||ff||f|	d�}nt!|ƒ‚|S )Nr   )r   )r~   r•   )r   r   rO   z$Parse error, did not read all lines.rR   zDid not read all entriesZintcZint8rD   rE   r>   Úfloatz5'entries' in header is smaller than number of entriesz4'entries' in header is larger than number of entrieséÿÿÿÿ)r|   r~   )"r/   r0   r1   r2   r#   r%   Úscipy.sparser   ÚImportErrorÚDTYPES_BY_FIELDr‹   r6   rˆ   r‰   rŠ   r4   r5   ÚFIELD_PATTERNr[   r   rW   rJ   r_   r>   r^   rž   rX   r   r:   r\   r	   r   Ú	conjugateÚNotImplementedError) r.   r`   r/   r0   r1   r2   r#   Zsymmr   r~   r6   Ú
is_integerZis_unsigned_integerZ
is_complexZis_skewZis_hermZ
is_patternr!   rb   rs   rt   ru   ÚkÚlÚIÚJÚVZentry_numberÚmaskZod_IZod_JZod_Vr   r   r   r‘   ‡  s     þ















zMMFile._parse_bodyc                 C   sÄ  t |tƒs(t |tƒs(t |tƒs(t|dƒrÌ| j}t|ƒ}t|jƒdkrLt	dƒ‚|j\}}	|d k	rò|| j
krˆt|jdƒs|tdƒ‚| d¡}qò|| jkrª|jjdkrÊ| d¡}qò|| jkrò|jjdkrò| d	¡}n&t|ƒsät	d
t|ƒ ƒ‚d}|j\}}	|jj}
|d k�r|
dk�rd}nd}|d k�rŒ|jj}|dk�rPt|jdƒ�sJtdƒ‚d}n<|dk�r`d}n,|dk�rpd}n|dk�r€d}ntd| ƒ‚|d k�r |  |¡}| j |¡ | j |¡ | j |¡ d|› d|› d|› d�}| | d¡¡ | d¡D ]}d| }| | d¡¡ �qö|  ||¡}|| jk�r*d||	f }| | d¡¡ || j
| j| jfk�rF|| j k�r®t!|	ƒD ]6}t!|ƒD ]&}||||f  }| | d¡¡ �q€�qtn–|| j"k�rt!|	ƒD ]<}t!|d |ƒD ]&}||||f  }| | d¡¡ �qÔ�qÂnBt!|	ƒD ]8}t!||ƒD ]&}||||f  }| | d¡¡ �q�q
nà|| jk�r|| j k�r°t!|	ƒD ]F}t!|ƒD ]6}|||f }|t#|ƒt$|ƒf }| | d¡¡ �qr�qfnRt!|	ƒD ]H}t!||ƒD ]6}|||f }|t#|ƒt$|ƒf }| | d¡¡ �qÆ�q¸n"|| j%k�rt	dƒ‚ntd | ƒ‚�n–| &¡ }|| j k�rr|j'|j(k}t)|j*| |j'| |j(| ff|jd!�}d"||	|j+f }| | d¡¡ |  ||d ¡}|| j%k�rît,|j'd |j(d ƒD ]&\}}d||f }| | d¡¡ �qÄnÒ|| j
| j| jfk�rRt,|j'd |j(d |j*ƒD ]0\}}}d#||f ||  }| | d¡¡ �qnn|| jk�r´t,|j'd |j(d |j*ƒD ]8\}}}d#||f ||j#|j$f  }| | d¡¡ �qxntd | ƒ‚d S )$NZ	__array__rR   zExpected 2 dimensional arrayrD   zBmmwrite does not support integer dtypes larger than native 'intp'.ÚfdrF   rq   rG   zunknown matrix type: %sr7   ZfFé   é   rs   r<   Úfr   Úcr>   Úur=   zunexpected dtype kind z%%MatrixMarket matrix ú Ú
r   z%%%s
z%i %i
r•   z*pattern type inconsisted with dense formatzUnknown field type %s)r|   z	%i %i %i
z%i %i )-r   Úlistr   r›   Úhasattrr[   r   r]   r|   r:   rˆ   r
   r~   ÚOverflowErrorZastyper‡   r   rŠ   r   ÚtypeÚkindrh   r†   r—   r;   rA   rC   r   ÚencoderX   rŒ   r‰   r}   rx   r4   r   r   r£   r€   r„   r…   r   ÚdataZnnzÚzip)r.   r`   r!   r"   r#   r$   r%   Úrepr/   r0   Útypecoder¹   r»   rb   Útemplatert   rs   ru   ZcooZlower_triangle_maskrd   r±   rF   r   r   r   r”   5  sê    ÿÿ














ÿ

ÿÿý
ÿ$$zMMFile._write)rc   )r   NNN)r   NNN)-Ú__name__Ú
__module__Ú__qualname__r˜   Úpropertyr/   r0   r1   r2   r#   r%   r6   r\   r[   r9   Úclassmethodr;   rˆ   r‰   r‡   rŠ   r£   r@   rA   r}   r3   r4   r5   rB   rC   r¢   ÚstaticmethodrH   rI   r   rU   r†   rŒ   r�   r   r   r�   r�   r‘   r”   r   r   r   r   r   ö   s”   







ÿ
 ÿ
    ü


K>
@
	  ÿ
# /  ÿc                 C   st   g }zddl }| |j¡ W n tk
r0   Y nX zddl}| |j¡ W n tk
r^   Y nX t|ƒ}t| |ƒ S )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)rl   ÚappendÚGzipFiler¡   rn   ro   r›   r   )r`   Zbad_clsrl   rn   r   r   r   Ú_is_fromfile_compatibleÏ  s    rÈ   )r   NNN)Ú__doc__rf   Únumpyr‚   r   r   r   r   r   r   r   r	   r
   r    r   r   Ú__all__r   r   r   r   r   rÈ   r   r   r   r   Ú<module>   s    ,52
p     ^