
     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 g dZd Zd Zd Zdd
Z G d d          Z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                 t    t          | t                    r|                     d          S t          |           S )Nlatin1)
isinstancebytesdecodestr)ss    J/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/scipy/io/_mmio.pyasstrr      s1    !U "xx!!!q66M    c                 6    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sources    r   r   r      s    ` ;;vr   c                 D    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   s    r   r   r   T   s    Z 88==   r    c                 R    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symmetrys         r   r   r      s+    X HHNN61guiBBBB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# Z'	 	 d,d&Z(d' Z)d( Z*d) Z+	 	 d,d*Z,d%S )-r   )_rows_cols_entries_format_field	_symmetryc                     | j         S N)r,   selfs    r   rowszMMFile.rows   
    zr   c                     | j         S r3   )r-   r4   s    r   colszMMFile.cols  r7   r   c                     | j         S r3   )r.   r4   s    r   entrieszMMFile.entries  s
    }r   c                     | j         S r3   )r/   r4   s    r   formatzMMFile.format
  s
    |r   c                     | j         S r3   )r0   r4   s    r   r(   zMMFile.field  s
    {r   c                     | j         S r3   )r1   r4   s    r   r*   zMMFile.symmetry  s
    ~r   c                 8    | j         | j        | j        | j        fv S r3   )r1   SYMMETRY_SYMMETRICSYMMETRY_SKEW_SYMMETRICSYMMETRY_HERMITIANr4   s    r   has_symmetryzMMFile.has_symmetry  s'    ~$"9"&">"&"9"; ; 	;r   
coordinatearrayc                 L    || j         vrt          d|d| j                   d S )Nzunknown format type , must be one of )FORMAT_VALUES
ValueError)r5   r=   s     r   _validate_formatzMMFile._validate_format!  s@    +++*$ffd&8&8: ; ; ; ,+r   integerunsigned-integerr   complexpatternc                 L    || j         vrt          d|d| j                   d S )Nzunknown field type rH   )FIELD_VALUESrJ   )r5   r(   s     r   _validate_fieldzMMFile._validate_field0  s@    )))*#eeT%6%68 9 9 9 *)r   general	symmetriczskew-symmetric	hermitianc                 L    || j         vrt          d|d| j                   d S )Nzunknown symmetry type rH   )SYMMETRY_VALUESrJ   )r5   r*   s     r   _validate_symmetryzMMFile._validate_symmetry>  s@    4///*&hh(<(<> ? ? ? 0/r   intpuint64dDc                      d S r3    r^   r   r   readerzMMFile.readerK      r   c                      d S r3   r^   r^   r   r   writerzMMFile.writerP  r`   r   c                    |                      |          \  }}	 |                                }d |                                D             \  }}}}}	|                    d          st	          d          |                                dk    st	          d|z             |                                dk    r| j        }n|                                dk    r| j        }|r*|d         d	v r |                                }|r
|d         d	v  |                                s(|                                }|                                (|                                }
|| j        k    rVt          |
          d
k    s%t	          d|
                    d          z             t          t          |
          \  }}||z  }nQt          |
          dk    s%t	          d|
                    d          z             t          t          |
          \  }}}|||||                                |	                                f|r|                                 S S # |r|                                 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                 P    g | ]#}t          |                                          $S r^   )r   strip).0parts     r   
<listcomp>zMMFile.info.<locals>.<listcomp>w  s(    >>>tzz||$$>>>r   z%%MatrixMarketz%source is not in Matrix Market formatmatrixzProblem reading file header: rF   rE   r   %%      zHeader line not of length 2: ascii   zHeader line not of length 3: )_openreadlinesplit
startswithrJ   lowerFORMAT_ARRAYFORMAT_COORDINATEre   lenr   mapintclose)r5   r   streamclose_itlinemmidri   r=   r(   r*   
split_liner6   r9   r;   s                 r   r   zMMFile.infoU  sw   6  ::f--,	 ??$$D>>>>> 2D&&%??#344 J !HIII<<>>X-- !@4!GHHH ||~~((*<///  )47i//((  )47i// jjll )(( jjll ) J***:!++$%D%)[[%9%9&: ; ; ; j11
d+:!++$%D%)[[%9%9&: ; ; ;&)#z&:&:#dG$NN$$&  x s   HI I)rbc                    	 t          j        |           } n# t          $ r | dfcY S w xY w|d         dk    rt           j                            |           swt           j                            | dz             r| dz   } nOt           j                            | dz             r| dz   } n't           j                            | dz             r| dz   } |                     d          rddl}|                    | |          }nd|                     d	          rddl}|	                    | d
          }n4t          | |          }n#| dd         dk    r| dz   } 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.bz2r   T)
osfspath	TypeErrorpathisfileendswithgzipopenbz2BZ2File)filespecmoder   r{   r   s        r   rp   zMMFile._open  s   4	#y**HH 	# 	# 	#U?"""	# 7c>> 7>>(++ 57>>(6/22 5'&0HHW^^HY$677 5')3HHW^^HZ$788 5'*4H  '' .8T22""6** .


Xt44h-- }&&#f,(D))Ft|s    ((c                      j         \  }|k    rt          j        S d}d} j        j        dv }t                     r                                                                   \  }}||k                                     ||k                                    k    rt          j        S  	                                  fd}n fd} |            D ]t\  }}	}
|r|
r	|dk    rd}nY|r||	k    rd}t          j        d          5  |r	||	 k    rd}d d d            n# 1 swxY w Y   |r|t          |	          k    rd}|s|s|s nu|rt          j        S |rt          j        S |rt          j        S t          j        S )	NTFDc               3      K                                    D ]-\  \  } }}| |k    r|| f         }||dfV   | |k    r||dfV  .d S )NFT)items)ijaijajir&   s       r   symm_iteratorz+MMFile._get_symmetry.<locals>.symm_iterator  sy      %&WWYY / /MVaS1uu1g"C/////a"C..../ /r   c               3      K   t                    D ]<} t          |           D ])}|         |          |          |         }}|||| k    fV  *=d S r3   )range)r   r   r   r   r&   ns       r   r   z+MMFile._get_symmetry.<locals>.symm_iterator   su      q 1 1A"1a[[ 1 1#$Q47AaDGS"Ca0000011 1r   r   Fignore)over)shaper   SYMMETRY_GENERALdtypecharr   tocoononzerosumtodoknperrstater   rA   rB   rC   )r&   missymmisskewishermrowcolr   r   r   is_diagonalr   s   `          @r   _get_symmetryzMMFile._get_symmetry  s-   w166**% a== 	1 		AJS#c	  S3YOO$5$555.. 		A/ / / / / /1 1 1 1 1 1 (5} 	 	#S#{ 
#+ 
##(( #cSjj"F[h/// ' ' '##++!&' ' ' ' ' ' ' ' ' ' ' ' ' ' '  #cT#YY.."F f    	-,, 	211 	-,,&&s   DD!	$D!	c           
          t           j        d|z  t           j        dt           j        dt           j        d||fz  i                    | 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!  sP    !:	#9$f%v$&7	*'+
 #eT""	#r   c                       | j         di | d S )Nr^   )_init_attrs)r5   kwargss     r   __init__zMMFile.__init__+  s!    ""6"""""r   c                     |                      |          \  }}	 |                     |           |                     |          |r|                                 S S # |r|                                 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.

        Returns
        -------
        a : ndarray or coo_matrix
            Dense or sparse matrix depending on the matrix format in the
            Matrix Market file.
        )rp   _parse_header_parse_bodyrz   )r5   r   r{   r|   s       r   r!   zMMFile.read/  s       ::f--	v&&&##F++  x s   )A A4r"   Nc                 &   |                      |d          \  }}	 |                     ||||||           |r|                                 dS |                                 dS # |r|                                 w |                                 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)rp   _writerz   flush)	r5   r%   r&   r'   r(   r)   r*   r{   r|   s	            r   r$   zMMFile.writeJ  s    .  ::fd33	KK7E9hGGG    s   A# #-Bc           
      D   | j         j        }d |D             }t          |                                          t          |          z
  }|r"t	          dt          |          d|          |D ]/}t          | ||                    |dd         d                     0dS )zr
        Initialize each attributes with the corresponding keyword arg value
        or a default of None
        c                 "    g | ]}|d d         S )   Nr^   )rf   attrs     r   rh   z&MMFile._init_attrs.<locals>.<listcomp>t  s     333TQRR333r   zfound zL invalid keyword arguments, please only
                                use r   N)	__class__	__slots__setkeysrJ   tuplesetattrr   )r5   r   attrspublic_attrsinvalid_keysr   s         r   r   zMMFile._init_attrsm  s     (33U3336;;==))C,=,== 	<*-2<-@-@-@-@-9\; < < <  	< 	<DD$

48T : :;;;;	< 	<r   c                 ~    | j                             |          \  }}}}}}|                     ||||||           d S )N)r6   r9   r;   r=   r(   r*   )r   r   r   )r5   r{   r6   r9   r;   r=   r(   r*   s           r   r   zMMFile._parse_header  sZ    N'' 	5dGVUHdwv$x 	 	9 	9 	9 	9 	9r   c           	         | j         | j        | j        | j        | j        | j        f\  }}}}}}	 ddlm} n# t          $ r d }Y nw xY w| j	        
                    |d           }	| j        }
|| j        k    }|| j        k    }|| j        k    }|| j        k    }|| j        k    }|| j        k    }|| j        k    ryt'          ||f|	          }d}d\  }}|rd|||f<   ||dz
  k     r|dz  }|r|                                }|r|d         dv s|                                s8|rt-          |          }nR|rt-          |          }n@|r/t/          t1          t2          |                                           }nt3          |          }||||f<   |
r/||k    r)|r	| |||f<   n|rt7          |          |||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 |d|fv r	||dz
  k    st9          d          n|d|fv r||k    st9          d          n|| j        k    rS|Pt'          ||f|	          }d}d}|r|                                }|r|d         dv s|                                s8|                                }t1          t,          |d d                   \  }}|dz
  |dz
  }}|rt-          |d                   }nT|rt-          |d                   }n<|r%t/          t1          t2          |dd                     }nt3          |d                   }||||f<   |
r/||k    r)|r	| |||f<   n|rt7          |          |||f<   n||||f<   |dz   }|||k    st9          d	           nQ|| j        k    r6|dk    r |||f|	          S t'          |d
          }t'          |d
          }|rt=          |d          }nM|rt'          |d          }n9|rt'          |d          }n%|rt'          |d          }nt'          |d          }d}|D ]}|r|d         dv s|                                s#|dz   |k    rt9          d          |                                }t1          t,          |d d                   \  ||<   ||<   |sx|rt-          |d                   ||<   n]|rt-          |d                   ||<   nB|r(t/          t1          t2          |dd                     ||<   nt3          |d                   ||<   |dz  }||k     rt9          d          |dz  }|dz  }|
ro||k    }||         }||         }||         }t?          ||f          }t?          ||f          }|r|dz  }n|r|                                 }t?          ||f          } ||||ff||f|	          }ntC          |          |S )Nr   )r   )r   r   )r   r   rj   z$Parse error, did not read all lines.rm   zDid not read all entriesintcint8rY   rZ   rN   floatz5'entries' in header is smaller than number of entriesz4'entries' in header is larger than number of entries)r   r   )"r6   r9   r;   r=   r(   r*   scipy.sparser   ImportErrorDTYPES_BY_FIELDr   rD   r   r   r   rB   rC   FIELD_PATTERNru   r   rq   re   ry   rN   rx   r   rr   r   rJ   rv   r
   r	   	conjugateNotImplementedError) r5   r{   r6   r9   r;   r=   r(   symmr   r   rD   
is_integeris_unsigned_integer
is_complexis_skewis_herm
is_patternr&   r}   r   r   r   klIJVentry_numbermaskod_Iod_Jod_Vs                                    r   r   zMMFile._parse_body  s   48Ity48L$+48J4O0dGVUD	/////// 	 	 	JJJ	 $((55(d00
#t'::d00
$66$11d00
T&&&tTl%000ADDAq !Q$tax<<FA  '(( tAw)334::<<3 &d))CC( &d))CC &!3udjjll#;#;<CC++C!Q$ &AFF &#&$!Q$  &"&s))!Q$"%!Q$tAv::AAAAA' '" '&'AadG 46zz !QA   'D  MaVTAX$%KLLL )6 aVT		$%KLLL )2 t---*2DtTl%000ADA (( tAw)334::<<3JJLL3"1"1sAaC1 &ad))CC( &ad))CC &!3uae#4#45CC!++C!Q$ &AFF &#&$!Q$  &"&s))!Q$"%!Q$E1  2 <<5666t--- !||!z4,e<<<<gV,,,AgV,,,A 	2/// 2'000$ 2'222 2'333'111L " " tAw)334::<<3>G++$ &9 : : :JJLL36sAbqbE??0,<! 6! 6*-ad)),, 6*-ad)),# 6*13uae3D3D*E,*/!++,!g%%  "5 6 6 6 FAFA +QwwwD	**D	** ,BJDD ,>>++DD	**
A1v;tTl%HHHAA%f---s   6 AAc                 z   t          |t                    s:t          |t                    s%t          |t                    st	          |d          r| j        }t          |          }t          |j                  dk    rt          d          |j        \  }}	||| j
        k    r:t          |j        d          st          d          |                    d          }n|| j        k    r$|j        j        dvr|                    d          }ni|| j        k    r#|j        j        dvr|                    d	          }n:t%          |          st          d
t'          |          z            d}|j        \  }}	|j        j        }
|	|
dv rd}nd}|f|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                            |           | j                            |           d| d| d| d}|                    |                    d                     |                    d          D ]/}d|z  }|                    |                    d                     0|                     ||          }|| j        k    rd||	fz  }|                    |                    d                     || j
        | j        | j        fv r,|| j         k    r[tC          |	          D ]I}tC          |          D ]7}||||f         z  }|                    |                    d                     8Jd S || j"        k    r_tC          |	          D ]M}tC          |dz   |          D ]7}||||f         z  }|                    |                    d                     8Nd S tC          |	          D ]J}tC          ||          D ]7}||||f         z  }|                    |                    d                     8Kd S || j        k    r|| j         k    rytC          |	          D ]g}tC          |          D ]U}|||f         }|tG          |          tI          |          fz  }|                    |                    d                     Vhd S tC          |	          D ]h}tC          ||          D ]U}|||f         }|tG          |          tI          |          fz  }|                    |                    d                     Vid S || j%        k    rt          d          t+          d |z            |&                                }|| j         k    rK|j'        |j(        k    }tS          |j*        |         |j'        |         |j(        |         ff|j        !          }d"||	|j+        fz  }|                    |                    d                     |                     ||dz
            }|| j%        k    rWtY          |j'        dz   |j(        dz             D ]4\  }}d||fz  }|                    |                    d                     5d S || j
        | j        | j        fv rdtY          |j'        dz   |j(        dz   |j*                  D ];\  }}}d#||fz  ||z  z   }|                    |                    d                     <d S || j        k    rptY          |j'        dz   |j(        dz   |j*                  D ]G\  }}}d#||fz  ||j#        |j$        fz  z   }|                    |                    d                     Hd S t+          d |z            )$N	__array__rm   zExpected 2 dimensional arrayrY   zBmmwrite does not support integer dtypes larger than native 'intp'.fdr[   r   r\   zunknown matrix type: %srE   fF      r   rL   fr   crN   urM   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   hasattrru   r   rw   r   rJ   r   r   r   OverflowErrorastyper   r   r   r   typekindr   r   r   rK   rR   rX   r$   encoderr   r   r   r   r   rB   r   r   r   r   r   r   r   datannzzip)r5   r{   r&   r'   r(   r)   r*   repr6   r9   typecoder   r   r}   templater   r   r   coolower_triangle_maskr   r   r[   s                          r   r   zMMFile._write5  s   a 	!*Q"8"8 	!a	!#*1k#:#:	!#C

A17||q   !?@@@JD$ D...#AGV44 Q+ -P Q Q Q((AAdo--w|4//HHSMMd000w|4//HHSMM a== F !:T!WW!DEEECJD$7<4			=7<Ds{{00 M' )L M M M!!* 84 ?@@@))!,,H 	'',,,&&u---))(333 CBBeBBhBBBT[[**+++ MM$'' 	0 	0Dt$DLLX..////''y99$###d|+DLLX..///+T_,. . .t444"4[[ @ @!&t @ @A#+a1g#5D"LLX)>)>????@@ @
 !==="4[[ @ @!&q1ud!3!3 @ @A#+a1g#5D"LLX)>)>????@@ @ #4[[ @ @!&q$ @ @A#+a1g#5D"LLX)>)>????@@ @
 $,,,t444"4[[ @ @!&t @ @A"#AqD'C#+tCyy$s)).D#DD"LLX)>)>????@@ @ #4[[ @ @!&q$ @ @A"#AqD'C#+tCyy$s)).D#DD"LLX)>)>????@@ @ $,,, !MNNN   7% ?@@@ ''))C 4000&)g&8# #(+>"?"%'*=">"%'*=">"@"A (+y2 2 2  4sw"77DLLX..///++E9Q;??H***	371955 8 8DAq$1v-DLLX!6!677778 8 4-t.0 0 0"3719cgaiBB 8 8GAq!$1v-(Q,?DLLX!6!677778 8 $,,,"3719cgaiBB 8 8GAq!$1v-(afaf=M2MNDLLX!6!677778 8   7% ?@@@r   )r   r"   NNN)-__name__
__module____qualname__r   propertyr6   r9   r;   r=   r(   r*   rD   rv   ru   rI   classmethodrK   r   r   r   r   r   rQ   rR   r   rA   rB   rC   rW   rX   r   staticmethodr_   rb   r   rp   r   r   r   r!   r$   r   r   r   r   r^   r   r   r   r      s       I   X   X   X   X   X   X ; ; X; %L&5M; ; [; M'NJMM!>:}!#L 9 9 [9 !$.$');.0BDO ? ? [?
 %f%x!3$c$c	+O   \   \ H H [HV ; ; ; \;| =' =' \='@ # # \## # #  6 BF       F< < <&9 9 9k k k\ CGWA WA WA WA WA WAr   r   c                    g }	 ddl }|                    |j                   n# t          $ r Y nw xY w	 ddl}|                    |j                   n# t          $ r Y nw xY w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)r   appendGzipFiler   r   r   r   r   )r{   bad_clsr   r   s       r   _is_fromfile_compatibler    s     Gt}%%%%   


s{####    GnnG&'****s   # 
00A 
A A r  )__doc__r   numpyr   r   r   r   r   r   r   r	   r
   r   r   r   r   __all__r   r   r   r   r   r  r^   r   r   <module>r     sW    
			    # # # # # # # # # # # # # # # # # # # # # # 0 / / / / / / /
3
3
3  0 0 0j-! -! -!dlC lC lC lC`VA VA VA VA VA VA VA VAr+ + + + +r   