ó
Ê½÷Xc           @` s†   d  Z  d d l m Z m Z m Z d d g Z d d l m Z m Z d d l	 m
 Z
 d d l m Z d	 „  Z d
 d „ Z d „  Z d S(   s+    Functions that operate on sparse matrices
i    (   t   divisiont   print_functiont   absolute_importt   count_blockst   estimate_blocksizei   (   t   isspmatrix_csrt
   csr_matrix(   t   isspmatrix_csc(   t   csr_count_blocksc         C` s   t  d ƒ ‚ d  S(   Ns   use .diagonal() instead(   t   NotImplementedError(   t   A(    (    s3   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/spfuncs.pyt   extract_diagonal   s    gffffffæ?c   
      C` sÏ  t  |  ƒ p t |  ƒ s' t |  ƒ }  n  |  j d k r: d Sd | k  oQ d k  n se t d ƒ ‚ n  d | d } t |  j ƒ } |  j \ } } | d d k rË | d d k rË | d t |  d ƒ } n d } | d	 d k r| d	 d k r| d
 t |  d ƒ } n d } | | k rW| | k rW| d t |  d ƒ } | | k rPd Sd Snt | d d k r‘| d d k r‘| d t |  d ƒ }	 n d }	 |	 | k r§d S| | k r·d S| | k rÇd Sd Sd S(   s—   Attempt to determine the blocksize of a sparse matrix

    Returns a blocksize=(r,c) such that
        - A.nnz / A.tobsr( (r,c) ).nnz > efficiency
    i    i   g      ð?s.   efficiency must satisfy 0.0 < efficiency < 1.0g       @i   i   g        i   i	   i$   i   i   N(   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   R   R   R   t   nnzt
   ValueErrort   floatt   shapeR   (
   R
   t
   efficiencyt   high_efficiencyR   t   Mt   Nt   e22t   e33t   e66t   e44(    (    s3   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/spfuncs.pyR   #   s<       c         C` s¦   | \ } } | d k  s$ | d k  r3 t  d ƒ ‚ n  t |  ƒ rm |  j \ } } t | | | | |  j |  j ƒ St |  ƒ r t |  j | | f ƒ St t	 |  ƒ | ƒ Sd S(   s]   For a given blocksize=(r,c) count the number of occupied
    blocks in a sparse matrix A
    i   s   r and c must be positiveN(
   R   R   R   R   t   indptrt   indicesR   R   t   TR   (   R
   t	   blocksizet   rt   cR   R   (    (    s3   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/spfuncs.pyR   V   s    N(   t   __doc__t
   __future__R    R   R   t   __all__t   csrR   R   t   cscR   t   _sparsetoolsR   R   R   R   (    (    (    s3   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/spfuncs.pyt   <module>   s   	3