ó
î&]\c           @` sK  d  Z  d d l m Z m Z m Z d Z d d g Z d d l Z d d l Z d d l	 Z	 d d l
 Z d d l m Z m Z m Z m Z m Z d d	 l m Z m Z d d
 l m Z m Z m Z m Z m Z m Z m Z m Z m Z m  Z  y d d l m! Z" Wn e# k
 rd „  Z" n Xd e e e$ f d „  ƒ  YZ% d „  Z& d „  Z' d S(   s   Dictionary Of Keys based matrixi    (   t   divisiont   print_functiont   absolute_imports   restructuredtext ent
   dok_matrixt   isspmatrix_dokN(   t   zipt   xranget	   iteritemst   iterkeyst
   itervaluesi   (   t   spmatrixt
   isspmatrix(
   t   isdenset   getdtypet   isshapet	   isintliket   isscalarliket   upcastt   upcast_scalart
   IndexMixint   get_index_dtypet   check_shape(   t   isSequenceTypec         C` s+   t  |  d ƒ p* t  |  d ƒ p* t  |  d ƒ S(   Nt   __len__t   __next__t   next(   t   hasattr(   t   x(    (    s/   lib/python2.7/site-packages/scipy/sparse/dok.pyt   _is_sequence   s    c           B` sÐ  e  Z d  Z d Z d# d# e d „ Z d „  Z d „  Z d „  Z	 e
 d e j d e	 ƒ Z d# d „ Z d	 „  Z e j j e _ e j j e _ d
 „  Z d d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d# e d „ Z e j j e _ d „  Z  d „  Z! e j! j e! _ d „  Z" d „  Z# e d „ Z$ e j$ j e$ _ e d  „ Z% e j% j e% _ e d! „ Z& e j& j e& _ d" „  Z' e j' j e' _ RS($   sð  
    Dictionary Of Keys based sparse matrix.

    This is an efficient structure for constructing sparse
    matrices incrementally.

    This can be instantiated in several ways:
        dok_matrix(D)
            with a dense matrix, D

        dok_matrix(S)
            with a sparse matrix, S

        dok_matrix((M,N), [dtype])
            create the matrix with initial shape (M,N)
            dtype is optional, defaulting to dtype='d'

    Attributes
    ----------
    dtype : dtype
        Data type of the matrix
    shape : 2-tuple
        Shape of the matrix
    ndim : int
        Number of dimensions (this is always 2)
    nnz
        Number of nonzero elements

    Notes
    -----

    Sparse matrices can be used in arithmetic operations: they support
    addition, subtraction, multiplication, division, and matrix power.

    Allows for efficient O(1) access of individual elements.
    Duplicates are not allowed.
    Can be efficiently converted to a coo_matrix once constructed.

    Examples
    --------
    >>> import numpy as np
    >>> from scipy.sparse import dok_matrix
    >>> S = dok_matrix((5, 5), dtype=np.float32)
    >>> for i in range(5):
    ...     for j in range(5):
    ...         S[i, j] = i + j    # Update element

    t   dokc   	      C` s§  t  j |  ƒ t j |  ƒ t | d t ƒ|  _ t | t ƒ rn t | ƒ rn | \ } } t	 | | f ƒ |  _
 n5t | ƒ rö t | ƒ r› | r› | j ƒ  } n | j ƒ  } | d  k	 rÅ | j | ƒ } n  t  j |  | ƒ t	 | j ƒ |  _
 | j |  _ n­ y t j | ƒ } Wn t k
 r(t d ƒ ‚ n Xt | j ƒ d k rMt d ƒ ‚ n  d d l m } | | d | ƒj ƒ  } t  j |  | ƒ t	 | j ƒ |  _
 | j |  _ d  S(   Nt   defaults   Invalid input format.i   s(   Expected rank <=2 dense array or matrix.i   (   t
   coo_matrixt   dtype(   t   dictt   __init__R
   R   t   floatR    t
   isinstancet   tupleR   R   t   _shapeR   R   t   copyt   todokt   Nonet   astypet   updatet   shapet   npt   asarrayt	   Exceptiont	   TypeErrort   lent   cooR   (	   t   selft   arg1R,   R    R'   t   Mt   NR   t   d(    (    s/   lib/python2.7/site-packages/scipy/sparse/dok.pyR"   Q   s4    c         C` s   t  d ƒ ‚ d  S(   Ns9   Direct modification to dok_matrix element is not allowed.(   t   NotImplementedError(   R3   t   val(    (    s/   lib/python2.7/site-packages/scipy/sparse/dok.pyR+   t   s    c         C` s   t  j |  | ƒ S(   sÒ   An update method for dict data defined for direct access to
        `dok_matrix` data. Main purpose is to be used for effcient conversion
        from other spmatrix classes. Has no checking if `data` is valid.(   R!   R+   (   R3   t   data(    (    s/   lib/python2.7/site-packages/scipy/sparse/dok.pyt   _updatey   s    c         C` sN   |  j  | d t ƒj |  j ƒ } | j |  _ t j |  ƒ t j |  | ƒ d  S(   NR'   (   t   reshapet   Falset   asformatt   formatt   __dict__R!   t   clearR+   (   R3   R,   t
   new_matrix(    (    s/   lib/python2.7/site-packages/scipy/sparse/dok.pyt	   set_shape   s    !t   fgett   fsetc         C` s(   | d  k	 r t d ƒ ‚ n  t j |  ƒ S(   Ns6   getnnz over an axis is not implemented for DOK format.(   R)   R8   R!   R   (   R3   t   axis(    (    s/   lib/python2.7/site-packages/scipy/sparse/dok.pyt   getnnz‡   s    c         C` s   t  d „  t |  ƒ Dƒ ƒ S(   Nc         s` s   |  ] } | d  k Vq d S(   i    N(    (   t   .0R   (    (    s/   lib/python2.7/site-packages/scipy/sparse/dok.pys	   <genexpr>Ž   s    (   t   sumR	   (   R3   (    (    s/   lib/python2.7/site-packages/scipy/sparse/dok.pyt   count_nonzero   s    c         C` s   t  j |  ƒ S(   N(   R!   R   (   R3   (    (    s/   lib/python2.7/site-packages/scipy/sparse/dok.pyR   “   s    g        c         C` s·   y. | \ } } t  | ƒ r' t  | ƒ s- t ‚ Wn& t t t f k
 rV t d ƒ ‚ n X| d k  s• | |  j d k s• | d k  s• | |  j d k r¤ t d ƒ ‚ n  t j |  | | ƒ S(   st   This overrides the dict.get method, providing type checking
        but otherwise equivalent functionality.
        s!   Index must be a pair of integers.i    i   s   Index out of bounds.(   R   t   AssertionErrorR0   t
   ValueErrort
   IndexErrorR,   R!   t   get(   R3   t   keyR   t   it   j(    (    s/   lib/python2.7/site-packages/scipy/sparse/dok.pyRN   –   s    ">c         C` s9  |  j  j d ƒ } |  j | ƒ \ } } t | ƒ } t | ƒ } | r| rt | ƒ } t | ƒ } | d k  rƒ | |  j d 7} n  | d k  s¢ | |  j d k r± t d ƒ ‚ n  | d k  rÑ | |  j d 7} n  | d k  sð | |  j d k rÿ t d ƒ ‚ n  t j |  | | f | ƒ S| s-t	 | t
 ƒ r | sBt	 | t
 ƒ r | r[t
 | | d ƒ n | } | rzt
 | | d ƒ n | } | j |  j d ƒ }	 | j |  j d ƒ }
 t |	 Œ  } t |
 Œ  } t | ƒ t | ƒ f } t | ƒ } t |  ƒ d | k  r | d k r |  j |	 |
 | ƒ Sn  |  j | | ƒ \ } } | j d k r]t | j d |  j  ƒS| j ƒ  } | |  j d k  s–| j ƒ  |  j d k rÊt d | j ƒ  |  j d |  j d d f ƒ ‚ n  | d k  r| j ƒ  } | | d k  c |  j d 7<n  | j ƒ  } | |  j d k  s;| j ƒ  |  j d k rot d | j ƒ  |  j d |  j d d f ƒ ‚ n  | d k  r§| j ƒ  } | | d k  c |  j d 7<n  t | j d |  j  ƒ} xs t j t | j d ƒ t | j d ƒ ƒ D]E } t j |  | | | | f | ƒ } | rìt j | | | ƒ qìqìW| S(   s¾   If key=(i, j) is a pair of integers, return the corresponding
        element.  If either i or j is a slice or sequence, return a new sparse
        matrix with just these elements.
        i    s   Index out of bounds.i   i   R    s"   Index (%d) out of range -%d to %d.(   R    t   typet   _unpack_indexR   t   intR,   RM   R!   RN   R$   t   slicet   indicesR   R1   t   _prodt   _getitem_rangest   _index_to_arrayst   sizeR   t   mint   maxR'   t	   itertoolst   productt   __setitem__(   R3   t   indext   zeroRP   RQ   t	   i_intliket	   j_intliket   i_slicet   j_slicet	   i_indicest	   j_indicest   i_seqt   j_seqt   newshapet   newsizet   min_it   min_jt   newdokRO   t   v(    (    s/   lib/python2.7/site-packages/scipy/sparse/dok.pyt   __getitem__£   sf    "-. -. 3#c         C` s7  t  t | ƒ \ } } } t  t | ƒ \ } } }	 t | d |  j ƒ}
 xë t |  ƒ D]Ý \ } } t | ƒ } t | ƒ } t | | | ƒ \ } } | d k  sR | | d k sR | d k r½ qR n  t | | |	 ƒ \ } } | d k  sR | | d k sR | d k rqR n  t j |
 | | f t j |  | | f ƒ ƒ qR W|
 S(   NR    i    i   (	   t   mapRT   R   R    R   t   divmodR!   R_   Rp   (   R3   Rf   Rg   R,   t   i_startt   i_stopt   i_stridet   j_startt   j_stopt   j_strideRn   t   iit   jjt   at   rat   bt   rb(    (    s/   lib/python2.7/site-packages/scipy/sparse/dok.pyRX   í   s    ((c         C` s  t  | t ƒ rñ t | ƒ d k rñ | \ } } t | ƒ rñ t | ƒ rñ d | k oc |  j d k  n rñ d | k o† |  j d k  n rñ t j | d |  j ƒ} | j d k rî | d k rî t	 j
 |  t | ƒ t | ƒ f | d ƒ d  Sqñ n  |  j | ƒ \ } } |  j | | ƒ \ } } t | ƒ r9| j ƒ  } n  t j | d |  j ƒ} t j | | ƒ \ } } | j | j k rŠt d ƒ ‚ n  t j | ƒ d k r£d  S| j ƒ  } | |  j d k  sÜ| j ƒ  |  j d k rt d | j ƒ  |  j d |  j d d f ƒ ‚ n  | d k  rH| j ƒ  } | | d k  c |  j d 7<n  | j ƒ  } | |  j d k  s| j ƒ  |  j d k rµt d | j ƒ  |  j d |  j d d f ƒ ‚ n  | d k  rí| j ƒ  } | | d k  c |  j d 7<n  t	 j |  t t | j | j ƒ | j ƒ ƒ d | k r}| d k }	 xJ t | |	 j | |	 j ƒ D]( }
 t	 j |  |
 ƒ d k rN|  |
 =qNqNWn  d  S(   Ni   i    i   R    s   Shape mismatch in assignment.s"   Index (%d) out of range -%d to %d.(    (   R$   R%   R1   R   R,   R-   R.   R    t   ndimR!   R_   RT   RS   RY   R   t   toarrayt   broadcast_arraysRL   RZ   R[   R\   RM   R'   R+   t   izipt   flatRp   (   R3   R`   R   RP   RQ   Ro   t   _Rl   Rm   t   zeroesRO   (    (    s/   lib/python2.7/site-packages/scipy/sparse/dok.pyR_     sL    !;#)
-. -. +$c      	   ` s’  t  ˆ ƒ rš t |  j ˆ ƒ } t |  j d | ƒ‰  |  j \ } } xIt j t | ƒ t | ƒ ƒ D]2 } t j	 |  | d ƒ ˆ } | ra | ˆ  | <qa qa Wnô t
 ˆ ƒ rFˆ j |  j k rÇ t d ƒ ‚ n  t |  j ˆ j ƒ } t |  j d | ƒ‰  t j ˆ  |  ƒ t j d d ƒ . t j ˆ  ‡  ‡ f d †  t ˆ ƒ Dƒ ƒ Wd  QXnH t ˆ ƒ rk|  j ƒ  } | ˆ ‰  n# t ˆ ƒ rŠ|  j ƒ  ˆ ‰  n t Sˆ  S(   NR    i    s    Matrix dimensions are not equal.t   overt   ignorec         3` s'   |  ] } | ˆ  | ˆ | f Vq d  S(   N(    (   RH   t   k(   t   newt   other(    s/   lib/python2.7/site-packages/scipy/sparse/dok.pys	   <genexpr>K  s    (   R   R   R    R   R,   R]   R^   R   R!   RN   R   RL   R   R+   R-   t   errstateR   R   t   tocscR   t   todenset   NotImplemented(   R3   RŠ   t	   res_dtypeR5   R6   RO   t   aijt   csc(    (   R‰   RŠ   s/   lib/python2.7/site-packages/scipy/sparse/dok.pyt   __add__6  s0    %	)c         ` sX  t  ˆ  ƒ r‹ t ˆ j d ˆ j ƒ} ˆ j \ } } xt j t | ƒ t | ƒ ƒ D]2 } t j ˆ | d ƒ ˆ  } | rR | | | <qR qR WnÉ t	 ˆ  ƒ rˆ  j ˆ j k r¸ t
 d ƒ ‚ n  t ˆ j d ˆ j ƒ} t j | ˆ ƒ t j | ‡  ‡ f d †  t ˆ  ƒ Dƒ ƒ nH t ˆ  ƒ r1ˆ j ƒ  } | ˆ  } n# t ˆ  ƒ rPˆ  ˆ j ƒ  } n t S| S(   NR    i    s    Matrix dimensions are not equal.c         3` s'   |  ] } | ˆ | ˆ  | f Vq d  S(   N(    (   RH   Rˆ   (   RŠ   R3   (    s/   lib/python2.7/site-packages/scipy/sparse/dok.pys	   <genexpr>c  s    (   R   R   R,   R    R]   R^   R   R!   RN   R   RL   R+   R   R   RŒ   R   R   RŽ   (   R3   RŠ   R‰   R5   R6   RO   R   R‘   (    (   RŠ   R3   s/   lib/python2.7/site-packages/scipy/sparse/dok.pyt   __radd__U  s*    %	#c         ` sc   ˆ  j  j d k r! t d ƒ ‚ n  t ˆ  j d ˆ  j  ƒ} t j | ‡  f d †  t ˆ  ƒ Dƒ ƒ | S(   NR}   s2   Negating a sparse boolean matrix is not supported.R    c         3` s    |  ] } | ˆ  | f Vq d  S(   N(    (   RH   Rˆ   (   R3   (    s/   lib/python2.7/site-packages/scipy/sparse/dok.pys	   <genexpr>r  s    (   R    t   kindR8   R   R,   R!   R+   R   (   R3   R‰   (    (   R3   s/   lib/python2.7/site-packages/scipy/sparse/dok.pyt   __neg__m  s
    &c         ` sQ   t  |  j ˆ  ƒ } t |  j d | ƒ} t j | ‡  f d †  t |  ƒ Dƒ ƒ | S(   NR    c         3` s%   |  ] \ } } | | ˆ  f Vq d  S(   N(    (   RH   Rˆ   Ro   (   RŠ   (    s/   lib/python2.7/site-packages/scipy/sparse/dok.pys	   <genexpr>y  s    (   R   R    R   R,   R!   R+   R   (   R3   RŠ   R   R‰   (    (   RŠ   s/   lib/python2.7/site-packages/scipy/sparse/dok.pyt   _mul_scalaru  s    &c         C` sj   t  j |  j d d t |  j | j ƒ ƒ} x8 t |  ƒ D]* \ \ } } } | | c | | | 7<q8 W| S(   Ni    R    (   R-   t   zerosR,   R   R    R   (   R3   RŠ   t   resultRP   RQ   Ro   (    (    s/   lib/python2.7/site-packages/scipy/sparse/dok.pyt   _mul_vector|  s    +c      	   C` s›   |  j  d | j  d f } t |  j | j ƒ } t j | d | ƒ} xP t |  ƒ D]B \ \ } } } | | d  d  … f c | | | d  d  … f 7<qQ W| S(   Ni    i   R    (   R,   R   R    R-   R—   R   (   R3   RŠ   t   result_shapet   result_dtypeR˜   RP   RQ   Ro   (    (    s/   lib/python2.7/site-packages/scipy/sparse/dok.pyt   _mul_multivectorƒ  s    4c         ` s:   t  ˆ  ƒ r6 t j |  ‡  f d †  t |  ƒ Dƒ ƒ |  St S(   Nc         3` s%   |  ] \ } } | | ˆ  f Vq d  S(   N(    (   RH   Rˆ   Ro   (   RŠ   (    s/   lib/python2.7/site-packages/scipy/sparse/dok.pys	   <genexpr>Ž  s    (   R   R!   R+   R   RŽ   (   R3   RŠ   (    (   RŠ   s/   lib/python2.7/site-packages/scipy/sparse/dok.pyt   __imul__Œ  s    &c         ` sk   t  ˆ  ƒ r] t |  j ˆ  ƒ } t |  j d | ƒ} t j | ‡  f d †  t |  ƒ Dƒ ƒ | S|  j ƒ  ˆ  S(   NR    c         3` s%   |  ] \ } } | | ˆ  f Vq d  S(   N(    (   RH   Rˆ   Ro   (   RŠ   (    s/   lib/python2.7/site-packages/scipy/sparse/dok.pys	   <genexpr>–  s    (	   R   R   R    R   R,   R!   R+   R   t   tocsr(   R3   RŠ   R   R‰   (    (   RŠ   s/   lib/python2.7/site-packages/scipy/sparse/dok.pyt   __truediv__’  s    &c         ` s:   t  ˆ  ƒ r6 t j |  ‡  f d †  t |  ƒ Dƒ ƒ |  St S(   Nc         3` s%   |  ] \ } } | | ˆ  f Vq d  S(   N(    (   RH   Rˆ   Ro   (   RŠ   (    s/   lib/python2.7/site-packages/scipy/sparse/dok.pys	   <genexpr>œ  s    (   R   R!   R+   R   RŽ   (   R3   RŠ   (    (   RŠ   s/   lib/python2.7/site-packages/scipy/sparse/dok.pyt   __itruediv__š  s    &c         C` s   t  j |  ƒ S(   N(   R!   t
   __reduce__(   R3   (    (    s/   lib/python2.7/site-packages/scipy/sparse/dok.pyR¡      s    c         C` so   | d  k	 r t d ƒ ‚ n  |  j \ } } t | | f d |  j d | ƒ} t j | d „  t |  ƒ Dƒ ƒ | S(   Nso   Sparse matrices do not support an 'axes' parameter because swapping dimensions is the only logical permutation.R    R'   c         s` s-   |  ]# \ \ } } } | | f | f Vq d  S(   N(    (   RH   t   leftt   rightR9   (    (    s/   lib/python2.7/site-packages/scipy/sparse/dok.pys	   <genexpr>²  s   (   R)   RL   R,   R   R    R!   R+   R   (   R3   t   axesR'   R5   R6   R‰   (    (    s/   lib/python2.7/site-packages/scipy/sparse/dok.pyt	   transposeª  s    !c         C` sN   |  j  \ } } t | | f d |  j ƒ} t j | d „  t |  ƒ Dƒ ƒ | S(   s   Return the conjugate transpose.R    c         s` s6   |  ], \ \ } } } | | f t  j | ƒ f Vq d  S(   N(   R-   t   conj(   RH   R¢   R£   R9   (    (    s/   lib/python2.7/site-packages/scipy/sparse/dok.pys	   <genexpr>¼  s   (   R,   R   R    R!   R+   R   (   R3   R5   R6   R‰   (    (    s/   lib/python2.7/site-packages/scipy/sparse/dok.pyt
   conjtransp¸  s
    c         C` s,   t  |  j d |  j ƒ} t j | |  ƒ | S(   NR    (   R   R,   R    R!   R+   (   R3   R‰   (    (    s/   lib/python2.7/site-packages/scipy/sparse/dok.pyR'   À  s    c         ` sV   t  d ˆ j d f d ˆ j ƒ} t j | ‡  ‡ f d †  t ˆ j d ƒ Dƒ ƒ | S(   s-   Returns the i-th row as a (1 x n) DOK matrix.i   R    c         3` s+   |  ]! } d  | f ˆ ˆ  | f f Vq d S(   i    N(    (   RH   RQ   (   RP   R3   (    s/   lib/python2.7/site-packages/scipy/sparse/dok.pys	   <genexpr>Ê  s    (   R   R,   R    R!   R+   R   (   R3   RP   R‰   (    (   RP   R3   s/   lib/python2.7/site-packages/scipy/sparse/dok.pyt   getrowÇ  s    "0c         ` sV   t  ˆ j d d f d ˆ j ƒ} t j | ‡  ‡ f d †  t ˆ j d ƒ Dƒ ƒ | S(   s0   Returns the j-th column as a (m x 1) DOK matrix.i    i   R    c         3` s+   |  ]! } | d  f ˆ | ˆ  f f Vq d S(   i    N(    (   RH   RP   (   RQ   R3   (    s/   lib/python2.7/site-packages/scipy/sparse/dok.pys	   <genexpr>Ð  s    (   R   R,   R    R!   R+   R   (   R3   RQ   R‰   (    (   RQ   R3   s/   lib/python2.7/site-packages/scipy/sparse/dok.pyt   getcolÍ  s    "0c         C` s  d d l  m } |  j d k r5 | |  j d |  j ƒSt d t |  j ƒ ƒ } t j t	 |  ƒ d |  j d |  j ƒ} t j d „  t
 |  ƒ Dƒ d | d |  j ƒ} t j d „  t
 |  ƒ Dƒ d | d |  j ƒ} | | | | f f d	 |  j d |  j ƒ} t | _ | S(
   Ni   (   R   i    R    t   maxvalt   countc         s` s   |  ] \ } } | Vq d  S(   N(    (   RH   RP   R„   (    (    s/   lib/python2.7/site-packages/scipy/sparse/dok.pys	   <genexpr>Ú  s    c         s` s   |  ] \ } } | Vq d  S(   N(    (   RH   R„   RQ   (    (    s/   lib/python2.7/site-packages/scipy/sparse/dok.pys	   <genexpr>Û  s    R,   (   R2   R   t   nnzR,   R    R   R\   R-   t   fromiterR	   R   t   Truet   has_canonical_format(   R3   R'   R   t	   idx_dtypeR:   t   rowt   colt   A(    (    s/   lib/python2.7/site-packages/scipy/sparse/dok.pyt   tocooÓ  s    '..*	c         C` s   | r |  j  ƒ  S|  S(   N(   R'   (   R3   R'   (    (    s/   lib/python2.7/site-packages/scipy/sparse/dok.pyR(   â  s    
c         C` s   |  j  d t ƒ j d | ƒ S(   NR'   (   R´   R=   RŒ   (   R3   R'   (    (    s/   lib/python2.7/site-packages/scipy/sparse/dok.pyRŒ   é  s    c         G` sš   t  | ƒ } | \ } } |  j \ } } | | k  s? | | k  r xK t t |  ƒ ƒ D]4 \ } } | | k sv | | k rR |  | | f =qR qR Wn  | |  _ d  S(   N(   R   R,   t   listR   R&   (   R3   R,   t   newMt   newNR5   R6   RP   RQ   (    (    s/   lib/python2.7/site-packages/scipy/sparse/dok.pyt   resizeî  s    N((   t   __name__t
   __module__t   __doc__R?   R)   R=   R"   R+   R;   RC   t   propertyR
   t	   get_shapeR,   RG   RJ   R   RN   Rp   RX   R_   R’   R“   R•   R–   R™   Rœ   R   RŸ   R    R¡   R¥   R§   R'   R¨   R©   R´   R(   RŒ   R¸   (    (    (    s/   lib/python2.7/site-packages/scipy/sparse/dok.pyR      sR   0#						J		4											
					c         C` s   t  |  t ƒ S(   sÍ  Is x of dok_matrix type?

    Parameters
    ----------
    x
        object to check for being a dok matrix

    Returns
    -------
    bool
        True if x is a dok matrix, False otherwise

    Examples
    --------
    >>> from scipy.sparse import dok_matrix, isspmatrix_dok
    >>> isspmatrix_dok(dok_matrix([[5]]))
    True

    >>> from scipy.sparse import dok_matrix, csr_matrix, isspmatrix_dok
    >>> isspmatrix_dok(csr_matrix([[5]]))
    False
    (   R$   R   (   R   (    (    s/   lib/python2.7/site-packages/scipy/sparse/dok.pyR   ü  s    c         C` s)   t  |  ƒ d k r d St j t j |  ƒ S(   sF   Product of a list of numbers; ~40x faster vs np.prod for Python tuplesi    i   (   R1   t	   functoolst   reducet   operatort   mul(   R   (    (    s/   lib/python2.7/site-packages/scipy/sparse/dok.pyRW     s    ((   R»   t
   __future__R    R   R   t   __docformat__t   __all__R¾   RÀ   R]   t   numpyR-   t   scipy._lib.sixR   R‚   R   R   R   R	   t   baseR
   R   t   sputilsR   R   R   R   R   R   R   R   R   R   R   R   t   ImportErrorR!   R   R   RW   (    (    (    s/   lib/python2.7/site-packages/scipy/sparse/dok.pyt   <module>   s$   (Fÿ ß	