ó
î&]\c           @` s–  d  Z  d d l m Z m Z m 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 l m Z d d l m Z m Z d d	 d
 d g Z d „  Z d „  Z d e e e d „ Z d e f d „  ƒ  YZ d „  Z  e! d k r’d d l" Z" xf e j# d D]W Z$ e% d e$ d d d ƒe j& j' ƒ  e" j" ƒ  Z( e e$ ƒ e% d e" j" ƒ  e( ƒ q4Wn  d S(   s‡   
  Matrix Market I/O in Python.
  See http://math.nist.gov/MatrixMarket/formats.html
  for information about the Matrix Market format.
i    (   t   divisiont   print_functiont   absolute_importN(	   t   asarrayt   realt   imagt   conjt   zerost   ndarrayt   concatenatet   onest   can_cast(   t   asbytest   asstr(   t   string_types(   t
   coo_matrixt
   isspmatrixt   mminfot   mmreadt   mmwritet   MMFilec         C` s   t  j |  ƒ S(   s¢  
    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'.
    (   R   t   info(   t   source(    (    s,   lib/python2.7/site-packages/scipy/io/mmio.pyR      s    c         C` s   t  ƒ  j |  ƒ S(   s‚  
    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.
    (   R   t   read(   R   (    (    s,   lib/python2.7/site-packages/scipy/io/mmio.pyR   ;   s    t    c         C` s#   t  ƒ  j |  | | | | | ƒ d S(   sò  
    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 2D 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.
    N(   R   t   write(   t   targett   at   commentt   fieldt	   precisiont   symmetry(    (    s,   lib/python2.7/site-packages/scipy/io/mmio.pyR   P   s    c           B` sö  e  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 i d e 6d e 6d e 6d e 6d e 6Z 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/ d/ d/ d) „ Z( d* „  Z) d+ „  Z* d, „  Z+ d( d/ d/ d/ d- „ Z, RS(0   t   _rowst   _colst   _entriest   _formatt   _fieldt	   _symmetryc         C` s   |  j  S(   N(   R    (   t   self(    (    s,   lib/python2.7/site-packages/scipy/io/mmio.pyt   rowsq   s    c         C` s   |  j  S(   N(   R!   (   R&   (    (    s,   lib/python2.7/site-packages/scipy/io/mmio.pyt   colsu   s    c         C` s   |  j  S(   N(   R"   (   R&   (    (    s,   lib/python2.7/site-packages/scipy/io/mmio.pyt   entriesy   s    c         C` s   |  j  S(   N(   R#   (   R&   (    (    s,   lib/python2.7/site-packages/scipy/io/mmio.pyt   format}   s    c         C` s   |  j  S(   N(   R$   (   R&   (    (    s,   lib/python2.7/site-packages/scipy/io/mmio.pyR      s    c         C` s   |  j  S(   N(   R%   (   R&   (    (    s,   lib/python2.7/site-packages/scipy/io/mmio.pyR   …   s    c         C` s   |  j  |  j |  j |  j f k S(   N(   R%   t   SYMMETRY_SYMMETRICt   SYMMETRY_SKEW_SYMMETRICt   SYMMETRY_HERMITIAN(   R&   (    (    s,   lib/python2.7/site-packages/scipy/io/mmio.pyt   has_symmetry‰   s    t
   coordinatet   arrayc         C` s/   | |  j  k r+ t d | |  j  f ƒ ‚ n  d  S(   Ns)   unknown format type %s, must be one of %s(   t   FORMAT_VALUESt
   ValueError(   R&   R*   (    (    s,   lib/python2.7/site-packages/scipy/io/mmio.pyt   _validate_format”   s    t   integers   unsigned-integerR   t   complext   patternc         C` s/   | |  j  k r+ t d | |  j  f ƒ ‚ n  d  S(   Ns(   unknown field type %s, must be one of %s(   t   FIELD_VALUESR2   (   R&   R   (    (    s,   lib/python2.7/site-packages/scipy/io/mmio.pyt   _validate_field¢   s    t   generalt	   symmetrics   skew-symmetrict	   hermitianc         C` s/   | |  j  k r+ t d | |  j  f ƒ ‚ n  d  S(   Ns+   unknown symmetry type %s, must be one of %s(   t   SYMMETRY_VALUESR2   (   R&   R   (    (    s,   lib/python2.7/site-packages/scipy/io/mmio.pyt   _validate_symmetry°   s    t   intpt   uint64t   dt   Dc           C` s   d  S(   N(    (    (    (    s,   lib/python2.7/site-packages/scipy/io/mmio.pyt   reader½   s    c           C` s   d  S(   N(    (    (    (    s,   lib/python2.7/site-packages/scipy/io/mmio.pyt   writerÂ   s    c         C` sÜ  |  j  | ƒ \ } } z¬| j ƒ  } g  | j ƒ  D] } t | j ƒ  ƒ ^ q1 \ } } } }	 }
 | j d ƒ s| t d ƒ ‚ n  | j ƒ  d k s¡ t d | ƒ ‚ n  | j ƒ  d k r¿ |  j } n | j ƒ  d k rÝ |  j	 } n  x | j d ƒ rþ | j ƒ  } qà W| j ƒ  } | |  j k rat
 | ƒ d k s?t d	 | ƒ ‚ n  t t | ƒ \ } } | | } n= t
 | ƒ d
 k s†t d | ƒ ‚ n  t t | ƒ \ } } } | | | | |	 j ƒ  |
 j ƒ  f SWd | r×| j ƒ  n  Xd S(   só  
        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'.
        s   %%MatrixMarkets%   source is not in Matrix Market formatt   matrixs   Problem reading file header: R0   R/   t   %i   s   Header line not of length 2: i   s   Header line not of length 3: N(   t   _opent   readlinet   splitR   t   stript
   startswithR2   t   lowert   FORMAT_ARRAYt   FORMAT_COORDINATEt   lent   mapt   intt   close(   R&   R   t   streamt   close_itt   linet   partt   mmidRD   R*   R   R   R'   R(   R)   (    (    s,   lib/python2.7/site-packages/scipy/io/mmio.pyR   Ç   s6    :t   rbc         C` sZ  t  } t |  t ƒ rJt } | d d k rt j j |  ƒ s© t j j |  d ƒ r` |  d }  q© t j j |  d ƒ rƒ |  d }  q© t j j |  d ƒ r© |  d }  q© n  |  j d ƒ rÙ d d l } | j	 |  | ƒ } qG|  j d ƒ r	d d l
 } | j |  d	 ƒ } qGt	 |  | ƒ } qP|  d
 d k r8|  d }  n  t	 |  | ƒ } n |  } | | f S(   s˜   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.
        i    t   rs   .mtxs   .mtx.gzs   .mtx.bz2s   .gzNs   .bz2RW   iüÿÿÿ(   t   Falset
   isinstanceR   t   Truet   ost   patht   isfilet   endswitht   gzipt   opent   bz2t   BZ2File(   t   filespect   modeRS   R`   RR   Rb   (    (    s,   lib/python2.7/site-packages/scipy/io/mmio.pyRF     s.    c   
      ` s{  ˆ  j  \ } ‰ | ˆ k r" t j St } t } ˆ  j j d k } t ˆ  ƒ r³ ˆ  j ƒ  ‰  ˆ  j ƒ  \ } } | | k  j	 ƒ  | | k j	 ƒ  k r• t j Sˆ  j
 ƒ  ‰  ‡  f d †  } n ‡  ‡ f d †  } x… | ƒ  D]z \ } }	 | rö | |	 k rö t } n  | r| |	 k rt } n  | r3| t |	 ƒ k r3t } n  | pB| pB| sÏ PqÏ qÏ W| rZt j S| rgt j S| rtt j St j S(   Nt   FDc          3` sQ   xJ ˆ  j  ƒ  D]< \ \ }  } } |  | k r ˆ  | |  f } | | f Vq q Wd  S(   N(   t   items(   t   it   jt   aijt   aji(   R   (    s,   lib/python2.7/site-packages/scipy/io/mmio.pyt   symm_iterator[  s    c          3` sa   xZ t  ˆ ƒ D]L }  xC t  |  d ˆ ƒ D]. } ˆ  | |  ˆ  |  | } } | | f Vq' Wq Wd  S(   Ni   (   t   range(   Ri   Rh   Rj   Rk   (   R   t   n(    s,   lib/python2.7/site-packages/scipy/io/mmio.pyRl   d  s    (   t   shapeR   t   SYMMETRY_GENERALR[   t   dtypet   charR   t   tocoot   nonzerot   sumt   todokRY   R   R+   R,   R-   (
   R   t   mt   issymmt   isskewt   ishermt   rowt   colRl   Rj   Rk   (    (   R   Rn   s,   lib/python2.7/site-packages/scipy/io/mmio.pyt   _get_symmetryF  s<    $				c         C` sF   i d | t  j 6d t  j 6d t  j 6d | | f t  j 6j |  d  ƒ S(   Ns   %%.%ie
s   %i
s   %u
s   %%.%ie %%.%ie
(   R   t
   FIELD_REALt   FIELD_INTEGERt   FIELD_UNSIGNEDt   FIELD_COMPLEXt   gett   None(   R   R   (    (    s,   lib/python2.7/site-packages/scipy/io/mmio.pyt   _field_template  s    

c         K` s   |  j  |   d  S(   N(   t   _init_attrs(   R&   t   kwargs(    (    s,   lib/python2.7/site-packages/scipy/io/mmio.pyt   __init__‰  s    c         C` sN   |  j  | ƒ \ } } z |  j | ƒ |  j | ƒ SWd | rI | j ƒ  n  Xd S(   s­  
        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(   RF   t   _parse_headert   _parse_bodyRQ   (   R&   R   RR   RS   (    (    s,   lib/python2.7/site-packages/scipy/io/mmio.pyR     s    R   c   	      C` s]   |  j  | d ƒ \ } } z  |  j | | | | | | ƒ Wd | rN | j ƒ  n
 | j ƒ  Xd S(   s6  
        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 2D 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.
        t   wbN(   RF   t   _writeRQ   t   flush(	   R&   R   R   R   R   R   R   RR   RS   (    (    s,   lib/python2.7/site-packages/scipy/io/mmio.pyR   ¨  s     c         K` sŸ   |  j  j } g  | D] } | d ^ q } t | j ƒ  ƒ t | ƒ } | rj t d t | ƒ | f ƒ ‚ n  x. | D]& } t |  | | j | d d ƒ ƒ qq Wd S(   sr   
        Initialize each attributes with the corresponding keyword arg value
        or a default of None
        i   sV   found %s invalid keyword arguments, please only
                                use %sN(	   t	   __class__t	   __slots__t   sett   keysR2   t   tuplet   setattrR‚   Rƒ   (   R&   R†   t   attrst   attrt   public_attrst   invalid_keys(    (    s,   lib/python2.7/site-packages/scipy/io/mmio.pyR…   Ë  s    c         C` sV   |  j  j | ƒ \ } } } } } } |  j d | d | d | d | d | d | ƒ d  S(   NR'   R(   R)   R*   R   R   (   R   R   R…   (   R&   RR   R'   R(   R)   R*   R   R   (    (    s,   lib/python2.7/site-packages/scipy/io/mmio.pyRˆ   Þ  s    $!c          C` s¦  |  j  |  j |  j |  j |  j |  j f \ } } } } } } y d d l m } Wn t k
 ri d  } n X|  j
 j | d  ƒ }	 |  j }
 | |  j k } | |  j k } | |  j k } | |  j k } | |  j k } | |  j k } | |  j k r*t | | f d |	 ƒ} d } d \ } } | rQd | | | f <| | d k  rQ| d 7} qQn  xl| r¿| j ƒ  } | sT| j d ƒ r‚qTn  | r—t | ƒ } nE | r¬t | ƒ } n0 | rÐt t t | j ƒ  ƒ Œ  } n t | ƒ } | | | | f <|
 rJ| | k rJ| r| | | | f <qJ| r7t | ƒ | | | f <qJ| | | | f <n  | | d k  rg| d } qT| d } |
 s€d } qT| } | rTd | | | f <| | d k  r¼| d 7} q¼qTqTW| rú| d | g k oå| | d k s't d ƒ ‚ q'q¢| d | g k o| | k s¢t d ƒ ‚ q¢nx| |  j k rÐ| d  k rÐt | | f d |	 ƒ} d } d } xH| r³| j ƒ  } | sl| j d ƒ ršqln  | j ƒ  } t t | d  ƒ \ } } | d | d } } | rít | d ƒ } nK | rt | d ƒ } n2 | r(t t t | d ƒ Œ  } n t | d ƒ } | | | | f <|
 r¦| | k r¦| rt| | | | f <q¦| r“t | ƒ | | | f <q¦| | | | f <n  | d } qlW| | k s¢t d ƒ q¢nÒ| |  j k r–| d k r| | | f d |	 ƒSt | d d	 ƒ} t | d d	 ƒ} | r@t | d d
 ƒ} nc | r[t | d d ƒ} nH | rvt | d d ƒ} n- | r‘t | d d ƒ} n t | d d ƒ} d } xý | D]õ } | s°| j d ƒ rÒq°n  | d | k rñt d ƒ ‚ n  | j ƒ  } t t | d  ƒ \ | | <| | <| s›| rAt | d ƒ | | <q›| r^t | d ƒ | | <q›| r„t t t | d ƒ Œ  | | <q›t | d ƒ | | <n  | d 7} q°W| | k  rÄt d ƒ ‚ n  | d 8} | d 8} |
 ri| | k } | | } | | } | | } t  | | f ƒ } t  | | f ƒ } | r?| d 9} n | rT| j! ƒ  } n  t  | | f ƒ } n  | | | | f f d | | f d |	 ƒ} n t" | ƒ ‚ | S(   Ni    (   R   Rq   i   RE   s$   Parse error, did not read all lines.i   s   Did not read all entriest   intct   int8R>   R?   R5   t   floats5   'entries' in header is smaller than number of entriess4   'entries' in header is larger than number of entriesiÿÿÿÿRo   (   i    i    (#   R'   R(   R)   R*   R   R   t   scipy.sparseR   t   ImportErrorRƒ   t   DTYPES_BY_FIELDR‚   R.   R   R€   R   R,   R-   t   FIELD_PATTERNRL   R   RG   RJ   RP   R5   RO   R™   RH   R   R2   RM   R
   R	   t	   conjugatet   NotImplementedError(    R&   RR   R'   R(   R)   R*   R   t   symmR   Rq   R.   t
   is_integert   is_unsigned_integert
   is_complext   is_skewt   is_hermt
   is_patternR   RT   Rh   Ri   Rj   t   kt   lt   It   Jt   Vt   entry_numbert   maskt   od_It   od_Jt   od_V(    (    s,   lib/python2.7/site-packages/scipy/io/mmio.pyR‰   å  s   $
		
	"	! 




-c         C` sœ  t  | t ƒ s< t  | t ƒ s< t  | t ƒ s< t | d ƒ rD|  j } t | ƒ } t | j ƒ d k ru t	 d ƒ ‚ n  | j \ } }	 | d  k	 r~| |  j k rÒ t | j d ƒ sÀ t d ƒ ‚ n  | j d ƒ } qA| |  j k r| j j d k r>| j d ƒ } q>qA| |  j k rA| j j d k r>| j d	 ƒ } q>qAq~n: t | ƒ sit	 d
 t | ƒ ƒ ‚ n  d } | j \ } }	 | j j }
 | d  k r´|
 d k r«d } q´d } n  | d  k rT| j j } | d k rt | j d ƒ sùt d ƒ ‚ n  d } qT| d k rd } qT| d k r,d } qT| d k rAd } qTt d | ƒ ‚ n  | d  k rr|  j | ƒ } n  |  j j | ƒ |  j j | ƒ |  j j | ƒ | j t d j | | | ƒ ƒ ƒ x. | j d ƒ D] } | j t d | ƒ ƒ qÔW|  j  | | ƒ } | |  j k r•| j t d | |	 f ƒ ƒ | |  j |  j |  j! f k ro| |  j" k r²x	t# |	 ƒ D]> } x5 t# | ƒ D]' } | j t | | | | f ƒ ƒ q€WqmWq’| |  j$ k rx¨ t# |	 ƒ D]E } x< t# | d | ƒ D]' } | j t | | | | f ƒ ƒ qèWqÎWq’xut# |	 ƒ D]A } x8 t# | | ƒ D]' } | j t | | | | f ƒ ƒ q=Wq'Wq˜| |  j k rd| |  j" k r÷xÑ t# |	 ƒ D]V } xM t# | ƒ D]? } | | | f } | j t | t% | ƒ t& | ƒ f ƒ ƒ q­WqšWq’x˜ t# |	 ƒ D]Y } xP t# | | ƒ D]? } | | | f } | j t | t% | ƒ t& | ƒ f ƒ ƒ qWqWq˜| |  j' k r‚t	 d ƒ ‚ q˜t d | ƒ ‚ n| j( ƒ  } | |  j" k rû| j) | j* k } t+ | j, | | j) | | j* | f f d | j ƒ} n  | j t d  | |	 | j- f ƒ ƒ |  j  | | d ƒ } | |  j' k r‘xRt. | j) d | j* d ƒ D]) \ } } | j t d | | f ƒ ƒ qaWn| |  j |  j |  j! f k rxæ t. | j) d | j* d | j, ƒ D]4 \ } } } | j t d! | | f | | ƒ ƒ qÓWnŠ | |  j k rˆxx t. | j) d | j* d | j, ƒ D]@ \ } } } | j t d! | | f | | j% | j& f ƒ ƒ qAWn t d | ƒ ‚ d  S("   Nt	   __array__i   s   Expected 2 dimensional arrayR>   sB   mmwrite does not support integer dtypes larger than native 'intp'.t   fdR@   Rf   RA   s   unknown matrix type: %sR/   t   fFi   i   Rh   R4   t   fR   t   cR5   t   us   unsigned-integers   unexpected dtype kind s"   %%MatrixMarket matrix {0} {1} {2}
s   
s   %%%s
s   %i %i
i   s*   pattern type inconsisted with dense formats   Unknown field type %sRo   s	   %i %i %i
s   %i %i (/   RZ   t   listR   R‘   t   hasattrRL   R   RN   Ro   R2   Rƒ   R   R   Rq   t   OverflowErrort   astypeR~   Rr   R   R   t   typet   kindt	   TypeErrorR}   R   R3   R8   R=   R   R   R*   RH   R„   R€   Rp   Rm   R,   R   R   R   Rs   R{   R|   R   t   datat   nnzt   zip(   R&   RR   R   R   R   R   R   t   repR'   R(   t   typecodeR¼   RT   t   templateRi   Rh   Rj   t   coot   lower_triangle_maskRX   Rµ   R@   (    (    s,   lib/python2.7/site-packages/scipy/io/mmio.pyR‹     sÈ    							,,,
#*$33"(   R    R!   R"   R#   R$   R%   N(-   t   __name__t
   __module__RŽ   t   propertyR'   R(   R)   R*   R   R   R.   RM   RL   R1   t   classmethodR3   R   R€   R~   R   R   R7   R8   Rp   R+   R,   R-   R<   R=   Rœ   t   staticmethodRB   RC   R   RF   R}   R„   R‡   R   Rƒ   R   R…   Rˆ   R‰   R‹   (    (    (    s,   lib/python2.7/site-packages/scipy/io/mmio.pyR   i   sh        

E99
			"			«	c         C` sŸ   t  j d d k  r t Sg  } y  d d l } | j | j ƒ Wn t k
 rP n Xy  d d l } | j | j ƒ Wn t k
 r„ n Xt	 | ƒ } t
 |  | ƒ S(   s    
    Check whether `stream` is compatible with numpy.fromfile.

    Passing a gzipped file object to ``fromfile/fromstring`` doesn't work with
    Python3.
    i    i   N(   t   syst   version_infoR[   R`   t   appendt   GzipFileR›   Rb   Rc   R‘   RZ   (   RR   t   bad_clsR`   Rb   (    (    s,   lib/python2.7/site-packages/scipy/io/mmio.pyt   _is_fromfile_compatible!  s    t   __main__i   t   Readings   ...t   endt    s   took %s seconds()   t   __doc__t
   __future__R    R   R   R\   RË   t   numpyR   R   R   R   R   R   R	   R
   R   t   numpy.compatR   R   t   scipy._lib.sixR   Rš   R   R   t   __all__R   R   Rƒ   R   t   objectR   RÐ   RÆ   t   timet   argvt   filenamet   printt   stdoutRŒ   t   t(    (    (    s,   lib/python2.7/site-packages/scipy/io/mmio.pyt   <module>   s.   @		ÿ ÿ º	
