ó
î&]\c           @` 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	 Z
 d  d l 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  d l Z d  d l m Z d „  Z d	 „  Z d
 „  Z e j  j! d „  ƒ Z" e j  j# e j$ j% d ƒ oMe
 j& e
 j' ƒ j( d k d d ƒd e) f d „  ƒ  Yƒ Z* e j  j+ d d ƒ d „  ƒ Z, d „  Z- d „  Z. d S(   i    (   t   divisiont   print_functiont   absolute_importN(   t   assert_equalt   assert_t   assert_allclose(   t   _sparsetoolst
   coo_matrixt
   csr_matrixt
   csc_matrixt
   bsr_matrixt
   dia_matrix(   t   supported_dtypes(   t   check_free_memory(   t   raisesc           C` s   t  t t j ƒ d  S(   N(   t   assert_raisest   MemoryErrorR   t   test_throw_error(    (    (    sB   lib/python2.7/site-packages/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   lib/python2.7/site-packages/scipy/sparse/tests/test_sparsetools.pyt   run#   s    (   t   __name__t
   __module__R"   (    (   R   R   R    R!   (    sB   lib/python2.7/site-packages/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   lib/python2.7/site-packages/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(   R2   t   adR   (    (    sB   lib/python2.7/site-packages/scipy/sparse/tests/test_sparsetools.pyt!   test_regression_std_vector_dtypes6   s    *c          C` sÈ   t  j t  j ƒ j d }  t d
 |  d d ƒ t  j |  d t  j ƒ} t  j |  d t  j ƒ} t  j |  d t  j ƒ} d | d <t | | | f f d d d t ƒ} | j	 ƒ  } t
 | d g g ƒ d  S(   Ni   i   g    €„.Ag      à?R2   iÿÿÿÿt   shapeR   i   i	   (   i   i   (   R%   t   iinfot   int32t   maxR   t   zerost   int8R   t   FalseR,   R   (   t   nnzt   rowt   colR   t   st   d(    (    sB   lib/python2.7/site-packages/scipy/sparse/tests/test_sparsetools.pyt   test_nnz_overflowA   s    
$t   linuxi   t   reasons   test requires 64-bit Linuxt   TestInt32Overflowc        	   B` s:  e  Z d  Z d Z d „  Z d „  Z d „  Z e j j	 d „  ƒ Z
 e j j	 d „  ƒ Z e j d d e j j ƒe j d	 d e j j ƒd
 d d e j d d e j j ƒg Z e j j	 e j j d e ƒ d „  ƒ ƒ Z e j j	 e j j d e ƒ d „  ƒ ƒ Z d „  Z d „  Z d „  Z d „  Z d „  Z 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.
    iPÃ  c         C` sv   |  j  d t j t j ƒ j k s( t ‚ y t t j j	 d d ƒ ƒ } Wn t
 k
 rc t j } n Xt d | ƒ d  S(   Ni   t   PYTEST_XDIST_WORKER_COUNTt   1i¸  (   R    R%   R:   R;   R<   t   AssertionErrort   intt   ost   environt   gett
   ValueErrort   infR   (   R   t   parallel_count(    (    sB   lib/python2.7/site-packages/scipy/sparse/tests/test_sparsetools.pyt   setup_methoda   s    (c         C` s   t  j ƒ  d  S(   N(   t   gct   collect(   R   (    (    sB   lib/python2.7/site-packages/scipy/sparse/tests/test_sparsetools.pyt   teardown_methodm   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   R2   iÿÿÿÿ(   i    i    (   iÿÿÿÿiÿÿÿÿ(	   R    R%   t   arrayR>   R   R6   R   RT   RU   (   R   R    t   iR   R   t   mt   r(    (    sB   lib/python2.7/site-packages/scipy/sparse/tests/test_sparsetools.pyt   test_coo_todensep   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   R2   iÿÿÿÿ(   i    i    (   iÿÿÿÿiÿÿÿÿ(   R    R%   RW   R>   R   R&   R   R	   R
   t   dotR   RT   RU   (
   R   R    RX   R   R   RY   R   t   sptypet   m2RZ   (    (    sB   lib/python2.7/site-packages/scipy/sparse/tests/test_sparsetools.pyt   test_matvecs‚   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(   NR2   R9   i   i    (   R    R%   R&   R>   t   arangeR   R9   R\   R   RT   RU   (   R   R    R   t   offsetsRY   t   vRZ   (    (    sB   lib/python2.7/site-packages/scipy/sparse/tests/test_sparsetools.pyt   test_dia_matvec˜   s    	t   matmatt   markst   matvecst   matvect   diagonalt   sort_indicest	   transposet   opc         ` sF   ‡  f d †  } t  j ƒ  z t ˆ  d | ƒ | ƒ Wd  t  j ƒ  Xd  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 ƒ} ~ ~ ~ | S(   Ni   R2   i    t	   blocksizeR   (   R    R%   R&   R>   RW   R;   R
   R?   (   R    R   R   R   RY   (   R   (    sB   lib/python2.7/site-packages/scipy/sparse/tests/test_sparsetools.pyt
   get_matrix³   s    	!'	t   _check_bsr_(   RT   RU   t   getattr(   R   Rk   Rm   (    (   R   sB   lib/python2.7/site-packages/scipy/sparse/tests/test_sparsetools.pyt   test_bsr_1_block¬   s
    	
c         ` sF   ‡  f d †  } t  j ƒ  z t ˆ  d | ƒ | ƒ Wd  t  j ƒ  Xd  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 ƒ} ~ ~ ~ | S(   Ni   R2   i    Rl   R   (	   R    R%   R&   R>   RW   R;   R`   R
   R?   (   R    R   R   R   RY   (   R   (    sB   lib/python2.7/site-packages/scipy/sparse/tests/test_sparsetools.pyRm   Ê   s    	!'	Rn   (   RT   RU   Ro   (   R   Rk   Rm   (    (   R   sB   lib/python2.7/site-packages/scipy/sparse/tests/test_sparsetools.pyt   test_bsr_n_blockÂ   s
    	
c         C` sW   | ƒ  } |  j  } | j t j | d f d t j ƒƒ } t | d t j | ƒ ƒ d  S(   Ni   R2   i    (   i    i    (   R    R\   R%   R&   R>   R   (   R   RY   R    RZ   (    (    sB   lib/python2.7/site-packages/scipy/sparse/tests/test_sparsetools.pyt   _check_bsr_matvecsÙ   s    		'c         C` sT   | ƒ  } |  j  } | j t j | f d t j ƒƒ } t | d t j | ƒ ƒ d  S(   NR2   i    (   R    R\   R%   R&   R>   R   (   R   RY   R    RZ   (    (    sB   lib/python2.7/site-packages/scipy/sparse/tests/test_sparsetools.pyt   _check_bsr_matvecá   s    		$c         C` s8   | ƒ  } |  j  } | j ƒ  } t | t j | ƒ ƒ d  S(   N(   R    Rh   R   R%   R&   (   R   RY   R    RZ   (    (    sB   lib/python2.7/site-packages/scipy/sparse/tests/test_sparsetools.pyt   _check_bsr_diagonalé   s    		c         C` s   | ƒ  } | j  ƒ  d  S(   N(   Ri   (   R   RY   (    (    sB   lib/python2.7/site-packages/scipy/sparse/tests/test_sparsetools.pyt   _check_bsr_sort_indicesñ   s    	c         C` s   | ƒ  } | j  ƒ  d  S(   N(   Rj   (   R   RY   (    (    sB   lib/python2.7/site-packages/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   R2   Rl   i   i    (   R    R
   R%   R&   R>   Rl   R\   (   R   RY   R    R^   (    (    sB   lib/python2.7/site-packages/scipy/sparse/tests/test_sparsetools.pyt   _check_bsr_matmatû   s    		77(   R#   R$   t   __doc__R    RS   RV   R[   t   pytestt   markt   slowR_   Rc   t   paramt   xslowt   _bsr_opst   parametrizeRp   Rq   Rr   Rs   Rt   Ru   Rv   Rw   (    (    (    sB   lib/python2.7/site-packages/scipy/sparse/tests/test_sparsetools.pyRH   U   s.   				!	!					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    €„.AR2   i   i   (   R%   R:   t   int64R<   RK   R   R&   R>   R`   R=   R   t   TR   t   RuntimeErrorR\   (   R    R   R   R   R   R   (    (    sB   lib/python2.7/site-packages/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   R2   i   i   i    s   (%r, %r)t   err_msgy      p@      ð?I       (   i   (   i   (   i   (   R   R%   t   pit   complexRW   R   t
   issubdtypet   complexfloatingR   R4   t   realt   bool_R=   R   RP   R   t
   csr_matvecR   R   R   t   float64t   result_typeR   R\   R,   (   t   a0t   b0t   a_dtypet   b_dtypet   msgR   R   t   c(    (    sB   lib/python2.7/site-packages/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   R4   R`   R   R\   (   RD   Ra   R   R   Rb   (    (    sB   lib/python2.7/site-packages/scipy/sparse/tests/test_sparsetools.pyt   test_endianness?  s    "(/   t
   __future__R    R   R   t   sysRM   RT   t   reR'   t   numpyR%   t   numpy.testingR   R   R   t   scipy.sparseR   R   R   R	   R
   R   t   scipy.sparse.sputilsR   t   scipy._lib._testutilsR   Ry   R   R   R   R1   R8   Rz   R{   RE   t   skipift   platformt
   startswithR2   t   intpt   itemsizet   objectRH   t   skipRƒ   R”   R•   (    (    (    sB   lib/python2.7/site-packages/scipy/sparse/tests/test_sparsetools.pyt   <module>   s,   .			7	²	$