ó
Ê½÷Xc           @` sƒ  d  d l  m Z m Z m Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l	 m
 Z
 d  d l Z d  d l m Z m Z m Z m Z m Z m Z d  d l m Z m Z m Z m Z m Z m Z d  d l m Z d  d l m Z d „  Z d	 „  Z  d
 „  Z! d e" f d „  ƒ  YZ# e j$ e% d ƒ d „  ƒ Z& d „  Z' d „  Z( d „  Z) d „  Z* d „  Z+ e, d k re ƒ  n  d S(   i    (   t   divisiont   print_functiont   absolute_importN(   t   SkipTest(   t   assert_raisest   assert_equalt   dect   run_module_suitet   assert_t   assert_allclose(   t   _sparsetoolst
   coo_matrixt
   csr_matrixt
   csc_matrixt
   bsr_matrixt
   dia_matrix(   t   supported_dtypes(   t   xslowc           C` s   t  t t j ƒ d  S(   N(   R   t   MemoryErrorR
   t   test_throw_error(    (    (    sB   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/tests/test_sparsetools.pyt   test_exception   s    c          ` sç   d }  d ‰ d ‰ t  t j ˆ ˆ g ƒ ƒ ‰  g  ‰ d t j f ‡  ‡ ‡ ‡ f d †  ƒ  Y} g  t |  ƒ D] } | ƒ  ^ qh } x | D] } | j ƒ  q„ Wx | D] } | j ƒ  qŸ Wx- ˆ D]% } t t j	 | j
 ƒ  d k ƒ ƒ qº Wd  S(   Ni
   id   i   t   Workerc           ` s    e  Z ‡  ‡ ‡ ‡ f d  †  Z RS(   c         ` sz   ˆ  j  ƒ  } xZ t ˆ ƒ D]L } t j ˆ ˆ ˆ  j ˆ  j ˆ  j ˆ  j ˆ  j ˆ  j | j | j | j ƒ q Wˆ j | ƒ d  S(   N(   t   copyt   rangeR
   t   csr_plus_csrt   indptrt   indicest   datat   append(   t   selft   bt   j(   t   at   brest   nt   niter(    sB   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/tests/test_sparsetools.pyt   run#   s    (   t   __name__t
   __module__R$   (    (   R    R!   R"   R#   (    sB   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/tests/test_sparsetools.pyR   "   s   i   (   R   t   npt   onest	   threadingt   ThreadR   t   startt   joinR   t   allt   toarray(   t   nthreadsR   t   _t   threadst   threadR   (    (   R    R!   R"   R#   sB   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/tests/test_sparsetools.pyt   test_threads   s    (
"c          C` s}   xv t  D]n }  t j d d g d d g g ƒ j |  ƒ } t | d |  ƒ} t | j d ƒ j ƒ  | d  d  … d f ƒ q Wd  S(   Ni   i   i   i   t   dtypei    (   R   R'   t   matrixt   astypeR   R   t   getcolt   todense(   R4   t   adR    (    (    sB   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/tests/test_sparsetools.pyt!   test_regression_std_vector_dtypes6   s    *t   TestInt32Overflowc           B` s  e  Z d  Z d „  Z e j e j j d ƒ d ƒ e j e	 j
 e	 j ƒ j d k  d ƒ d „  ƒ ƒ Z d „  Z d „  Z e j d	 „  ƒ Z e j d
 „  ƒ Z e j d „  ƒ Z e j d „  ƒ Z e d „  ƒ Z d „  Z d „  Z d „  Z e d „  ƒ Z e d „  ƒ Z RS(   s  
    Some of the sparsetools routines use dense 2D matrices whose
    total size is not bounded by the nnz of the sparse matrix. These
    routines used to suffer from int32 wraparounds; here, we try to
    check that the wraparounds don't occur any more.
    c         C` s5   d |  _  |  j  d t j t j ƒ j k s1 t ‚ d  S(   NiPÃ  i   (   R"   R'   t   iinfot   int32t   maxt   AssertionError(   R   (    (    sB   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/tests/test_sparsetools.pyt   __init__I   s    	t   linuxs   test requires Linuxi   s   test requires 64-bit systemc         C` s   t  d ƒ d  S(   Niˆ  (   t   check_free_memory(   R   (    (    sB   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/tests/test_sparsetools.pyt   setUpN   s    c         C` s   t  j ƒ  d  S(   N(   t   gct   collect(   R   (    (    sB   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/tests/test_sparsetools.pyt   tearDownS   s    c         C` s°   |  j  } t j d | d g ƒ } t j d | d g ƒ } t j d d g d t j ƒ} t | | | f f ƒ } | j ƒ  } t | d d ƒ t | d d ƒ ~ t j ƒ  d  S(   Ni    i   i   R4   iÿÿÿÿ(   i    i    (   iÿÿÿÿiÿÿÿÿ(	   R"   R'   t   arrayt   int8R   R8   R   RD   RE   (   R   R"   t   iR   R   t   mt   r(    (    sB   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/tests/test_sparsetools.pyt   test_coo_todenseV   s    	c   
      C` s  |  j  } t j d | d g ƒ } t j d | d g ƒ } t j d d g d t j ƒ} t | | | f f ƒ } t j | | f d t j ƒ} xa t t t f D]P } | | ƒ } | j	 | ƒ }	 t
 |	 d d ƒ t
 |	 d d ƒ ~	 t j ƒ  qŸ W~ t j ƒ  d  S(   Ni    i   i   R4   iÿÿÿÿ(   i    i    (   iÿÿÿÿiÿÿÿÿ(   R"   R'   RG   RH   R   R(   R   R   R   t   dotR   RD   RE   (
   R   R"   RI   R   R   RJ   R   t   sptypet   m2RK   (    (    sB   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/tests/test_sparsetools.pyt   test_matvecsh   s    	c         C` s¹   |  j  } t j | | f d t j ƒ} t j | ƒ } t | | f d | | f ƒ} t j | j d d t j ƒ} | j | ƒ } t | d t j | ƒ ƒ ~ ~ ~ ~ ~ t	 j
 ƒ  d  S(   NR4   t   shapei   i    (   R"   R'   R(   RH   t   arangeR   RQ   RM   R   RD   RE   (   R   R"   R   t   offsetsRJ   t   vRK   (    (    sB   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/tests/test_sparsetools.pyt   test_dia_matvec~   s    	c         #` s/   ‡  f d †  } x d D] } | | f Vq Wd  S(	   Nc         ` s»   ˆ  j  } t j d | | f d t j ƒ} t j d d g d t j ƒ} t j d g d t j ƒ} t | | | f d | | f d t ƒ} ~ ~ ~ t ˆ  d |  ƒ | ƒ ~ t	 j
 ƒ  d  S(   Ni   R4   i    t	   blocksizeR   t   _check_bsr_(   R"   R'   R(   RH   RG   R=   R   t   Falset   getattrRD   RE   (   t   opR"   R   R   R   RJ   (   R   (    sB   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/tests/test_sparsetools.pyt   check‘   s    	!'	t   matmatt   matvecst   matvect   diagonalt   sort_indicest	   transpose(   R\   R]   R^   s   diagonals   sort_indicess	   transpose(    (   R   R[   RZ   (    (   R   sB   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/tests/test_sparsetools.pyt   test_bsr_1_block‹   s    
c         #` s/   ‡  f d †  } x d D] } | | f Vq Wd  S(	   Nc         ` s¸   ˆ  j  } t j | | d f d t j ƒ} t j d | g d t j ƒ} t j | d t j ƒ} t | | | f d | d f d t ƒ} ~ ~ ~ t	 ˆ  d |  ƒ | ƒ ~ t
 j ƒ  d  S(   Ni   R4   i    RV   R   RW   (   R"   R'   R(   RH   RG   R=   RR   R   RX   RY   RD   RE   (   RZ   R"   R   R   R   RJ   (   R   (    sB   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/tests/test_sparsetools.pyR[   §   s    	!'	R\   R]   R^   R_   R`   Ra   (   s   matmats   matvecss   matvecs   diagonals   sort_indicess	   transpose(    (   R   R[   RZ   (    (   R   sB   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/tests/test_sparsetools.pyt   test_bsr_n_block    s    
c         C` s[   |  j  } | j t j | d f d t j ƒƒ } t | d t j | ƒ ƒ ~ t j ƒ  d  S(   Ni   R4   i    (   i    i    (   R"   RM   R'   R(   RH   R   RD   RE   (   R   RJ   R"   RK   (    (    sB   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/tests/test_sparsetools.pyt   _check_bsr_matvecs¶   s
    	'c         C` sX   |  j  } | j t j | f d t j ƒƒ } t | d t j | ƒ ƒ ~ t j ƒ  d  S(   NR4   i    (   R"   RM   R'   R(   RH   R   RD   RE   (   R   RJ   R"   RK   (    (    sB   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/tests/test_sparsetools.pyt   _check_bsr_matvecÀ   s
    	$c         C` s<   |  j  } | j ƒ  } t | t j | ƒ ƒ ~ t j ƒ  d  S(   N(   R"   R_   R   R'   R(   RD   RE   (   R   RJ   R"   RK   (    (    sB   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/tests/test_sparsetools.pyt   _check_bsr_diagonalÉ   s
    	c         C` s   | j  ƒ  d  S(   N(   R`   (   R   RJ   (    (    sB   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/tests/test_sparsetools.pyt   _check_bsr_sort_indicesÒ   s    c         C` s   | j  ƒ  d  S(   N(   Ra   (   R   RJ   (    (    sB   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/tests/test_sparsetools.pyt   _check_bsr_transposeÖ   s    c         C` s•   |  j  } t t j | d f d t j ƒd | j d d f ƒ} | j | ƒ t t j d | f d t j ƒd d | j d f ƒ} | j | ƒ d  S(   Ni   R4   RV   i   i    (   R"   R   R'   R(   RH   RV   RM   (   R   RJ   R"   RO   (    (    sB   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/tests/test_sparsetools.pyt   _check_bsr_matmatÛ   s
    	77(   R%   R&   t   __doc__R@   R   t   skipift   syst   platformt
   startswithR'   R4   t   intpt   itemsizeRC   RF   RL   t   slowRP   RU   Rb   Rc   R   Rd   Re   Rf   Rg   Rh   Ri   (    (    (    sB   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/tests/test_sparsetools.pyR;   A   s    	3		
					s/   64-bit indices in sparse matrices not availablec          C` sÅ   d }  |  d t  j t  j ƒ j k s+ t ‚ t |  d	 d d ƒ t  j |  f d t  j ƒ} t  j |  d d t  j ƒ} t  j	 |  d t  j ƒ} t
 | | | f ƒ } | j } t t | j | ƒ d  S(
   NI4óµ    i   i   i   i   g    €„.AR4   i   i   (   R'   R<   t   int64R>   R?   RB   R(   RH   RR   t   zerosR   t   TR   t   RuntimeErrorRM   (   R"   R   R   R   R    R   (    (    sB   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/tests/test_sparsetools.pyt   test_csr_matmat_int64_overflowè   s    %	c          C` s}  t  t j t j d g d d g g d t ƒ}  t j d
 d g d t ƒ} x-t D]%} xt D]} d | | f } t j | t j ƒ r  |  j ƒ  j	 | ƒ } n |  j
 j ƒ  j	 | ƒ } t j | t j ƒ rå | j ƒ  j	 | ƒ } n | j
 j ƒ  j	 | ƒ } | t j k o| t j k sdt j d d t j ƒ} t t t j d d | j | j | j | | ƒ	 n  t j | t j ƒ rt j | t j ƒ sºt j | t j ƒ rt j | t j ƒ rt j d d t j ƒ} t t t j d d | j | j | j | | ƒ	 n  t j d d t j | | ƒ ƒ} t j d d | j | j | j | | ƒ t | t j | j ƒ  | ƒ d	 | ƒq] WqP Wd  S(   Ny              ð?i   i   R4   i   i   i    s   (%r, %r)t   err_msgy      p@      ð?I       (   i   (   i   (   i   (   R   R'   t   pit   complexRG   R   t
   issubdtypet   complexfloatingR   R6   t   realt   bool_Rs   R   t
   ValueErrorR
   t
   csr_matvecR   R   R   t   float64t   result_typeR	   RM   R.   (   t   a0t   b0t   a_dtypet   b_dtypet   msgR    R   t   c(    (    sB   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/tests/test_sparsetools.pyt   test_upcastú   s2    .%%!(c          C` s±   t  j d
 ƒ }  d d d g } t |  j d ƒ | f d ƒ } t |  j d ƒ | f d ƒ } t  j d ƒ } t | j | ƒ d d d d	 g ƒ t | j | ƒ d d d d	 g ƒ d  S(   Ni   i   iÿÿÿÿi    i   s   <f8s   >f8i   i   (   i   i   (   i   i   (   i   i   (   R'   R(   R   R6   RR   R	   RM   (   t   dRS   R    R   RT   (    (    sB   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/tests/test_sparsetools.pyt   test_endianness  s    "c         C` sE   t  ƒ  } | d | d |  d k  rA t d t |  ƒ f ƒ ‚ n  d  S(   Nt   memfreet   cachedg    €„.As"   test requires %d MB of free memory(   t   get_mem_info_linuxR   t   int(   t   free_mbt   meminfo(    (    sB   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/tests/test_sparsetools.pyRB   *  s    	c       	   C` sj   i  }  t  d d ƒ O } xE | D]= } | j ƒ  } t | d ƒ d |  | d j d ƒ j ƒ  <q WWd QX|  S(   s_   
    Get information about available memory.

    Returns a dict of items in /proc/meminfo
    s   /proc/meminfoRK   i   g     @@i    t   :N(   t   opent   splitt   floatt   stript   lower(   t   infot   ft   linet   p(    (    sB   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/tests/test_sparsetools.pyR   1  s    5c          C` s}   t  d t j ƒ  d ƒ  }  |  j ƒ  } Wd QXt j d | t j t j Bƒ } | d k	 rv t	 | j
 d ƒ ƒ d } | St j S(   sC   
    Return the memory usage of the current process (in bytes)
    s   /proc/%d/statusRK   Ns   VmRSS:\s*(\d+)\s*kBi   g     @@(   R’   t   ost   getpidt   readt   ret   searcht   St   It   NoneR”   t   groupR'   t   nan(   R˜   t   procdataRJ   t   memusage(    (    sB   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/tests/test_sparsetools.pyt   get_own_memusage_linux?  s    t   __main__(-   t
   __future__R    R   R   Rl   R›   RD   Rž   R)   t   noseR   t   numpyR'   t   numpy.testingR   R   R   R   R   R	   t   scipy.sparseR
   R   R   R   R   R   t   scipy.sparse.sputilsR   t   scipy._lib._testutilsR   R   R3   R:   t   objectR;   Rk   t   TrueRv   Rˆ   RŠ   RB   R   R§   R%   (    (    (    sB   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/tests/test_sparsetools.pyt   <module>   s.   ..			§	$				