ó
¦–Õ\c           @   s¨  d  d l  Z  e  j d ƒ d  d l Z d  d l Z d  d l j Z d  d l m	 Z	 d  d l
 m Z d  d l m Z m Z d  d l m Z m Z m Z m Z d  d l m 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! e  j" j# d d d d g ƒ d „  ƒ Z$ e  j" j# d e e% f e e% f e e& f g ƒ d „  ƒ Z' e  j" j( d d ƒ d „  ƒ Z) d „  Z* d „  Z+ d S(    iÿÿÿÿNt   numpy(   t   fuse(   t   SerializableLock(   t   gettert   getter_nofancy(   t   getitemt   optimizet   optimize_slicest
   fuse_slice(   t	   assert_eqc          C   sÄ  t  t  d t d d ƒ f t d d ƒ f t  d t d d ƒ f f t t  d t d d ƒ t d d	 ƒ f f t d d ƒ t d
 d ƒ f f t  d t d d ƒ t d d ƒ f f f t t d t d d ƒ t d d	 ƒ f f t d d ƒ t d
 d ƒ f f t d t d d ƒ t d d ƒ f f f t  t  d t d d ƒ f d f t  d d f f t t  d t d d ƒ d f f t d d ƒ f f t  d t d d ƒ d f f f t t d t d d ƒ d f f t d d ƒ f f t d t d d ƒ d f f f t  t  d d t d d ƒ f f t d d ƒ f f t  d d t d d ƒ f f f t  t  d t d d ƒ t d d	 ƒ f f t d  d  ƒ t d
 d ƒ f f t  d t d d ƒ t d d ƒ f f f t  t  d d  t d  d  ƒ f f t d  d  ƒ d f f t  d d f f t  t  d t d d ƒ t d d ƒ f f t d d ƒ f f t  d t d d ƒ t d d ƒ f f f t t d t d d ƒ f f t d d ƒ t d d ƒ f f t d t d d ƒ t d d ƒ f f f t  t  d t d d ƒ t t f t d d ƒ f t  d t d d ƒ f f t  t  d t d d ƒ f t d d ƒ t t f t  d t d d ƒ f f t  t d t d d ƒ t t f t d d ƒ t t f t d t d d ƒ t t f f g }  x@ |  D]8 \ } } t i | d 6ƒ } | i | d 6k s„t ‚ q„Wd  S(   Nt   xiè  iÐ  i   i   i÷  iü  id   iÈ   i2   i<   i–   i    i
   iò  i   ií  t   y(   Ni   (   R   t   sliceR   R   t   Nonet   FalseR   t   AssertionError(   t   pairst   inpt   expectedt   result(    (    sA   lib/python2.7/site-packages/dask/array/tests/test_optimization.pyt   test_fuse_getitem   sR    ''''''''''--$c       
   C   s  t  ƒ  }  t  ƒ  } t t d t d d ƒ t |  f t d d ƒ f t d t d d ƒ t |  f f t t d t d d ƒ t d d	 ƒ f t |  f t d d ƒ t d
 d ƒ f f t d t d d ƒ t d d ƒ f t |  f f t t d t d d ƒ t d d	 ƒ f t |  f t d d ƒ t d
 d ƒ f f t d t d d ƒ t d d ƒ f t |  f f t t d t d d ƒ t |  f t d d ƒ t | f t t d t d d ƒ t |  f t d d ƒ t | f f g } x@ | D]8 \ } } t i | d 6ƒ } | i | d 6k sÃt ‚ qÃWd  S(   NR
   iè  iÐ  i   i   i÷  iü  id   iÈ   i2   i<   i–   i    R   (   R   R   R   t   TrueR   R   R   R   (   t   lock1t   lock2R   R   R   R   (    (    sA   lib/python2.7/site-packages/dask/array/tests/test_optimization.pyt   test_fuse_getitem_lockJ   s    		-----3<c             sÎ   i d d 6t  d t d d ƒ t d d ƒ f f d 6t  d d t d	 d
 ƒ f f d 6}  t |  d g ƒ } t  d d t d d ƒ f f ‰  t ‡  f d †  | j ƒ  Dƒ ƒ s¬ t ‚ t | ƒ t |  ƒ k  sÊ t ‚ d  S(   Ns
   some-arrayt   ai
   i   id   iÈ   t   bi   i2   i<   t   ci   i–   i    c         3   s   |  ] } | ˆ  k Vq d  S(   N(    (   t   .0t   v(   t   expected_task(    sA   lib/python2.7/site-packages/dask/array/tests/test_optimization.pys	   <genexpr>h   s    (   R   R   R   t   anyt   valuesR   t   len(   t   dskR   (    (   R   sA   lib/python2.7/site-packages/dask/array/tests/test_optimization.pyt!   test_optimize_with_getitem_fusiona   s    
("(c          C   s’  i t  d f d 6t d t d  d  d  ƒ f f d 6t d t d  d  d  ƒ f f d 6t d t d d d  ƒ f f d 6t d t d  d  d  ƒ f f d 6}  i t t  d f t d d d  ƒ f f d 6} t t |  g  d	 t ƒd ƒ } | | k së t ‚ i t t  d f t d d  d  ƒ f f d 6t d t d d d  ƒ f f d 6t d t d  d  d  ƒ f f d 6} t t |  d d d g d	 t ƒd ƒ } | | k sŽt ‚ d  S(
   Ni
   R   R   R   i    i   t   dt   et   rename_keys(   t   rangeR   R   R   R   R   R   R   (   R"   R   R   (    (    sA   lib/python2.7/site-packages/dask/array/tests/test_optimization.pyt   test_optimize_slicingl   s    "+("(c        
   C   sp  t  t d d ƒ t d d d ƒ ƒ t d d d ƒ k s< t ‚ t  t d d ƒ f d  t d d ƒ f ƒ d  t d	 d
 ƒ f k s t ‚ t  t d d ƒ f t d d ƒ d  f ƒ t d	 d
 ƒ d  f k sÆ t ‚ t  d d ƒ d k sá t ‚ t  d t d d ƒ f d ƒ d k st ‚ t j t ƒ  t  t d d d ƒ d ƒ Wd  QXt j t ƒ ! t  d  t j d d g ƒ ƒ Wd  QXd  S(   Ni
   i   i    i   i   id   iÈ   i   in   ix   i   i   i   iÿÿÿÿ(   i   (   N(   i   N(   NNi   N(   i   NNi   N(	   R   R   R   R   t   pytestt   raisest   NotImplementedErrort   npt   array(    (    (    sA   lib/python2.7/site-packages/dask/array/tests/test_optimization.pyt   test_fuse_slice€   s    <''c           C   só  t  t d d d ƒ d d d g ƒ d d d g k s9 t ‚ t  d d d	 d
 d g d d d g ƒ d
 d d	 g k su t ‚ t  d d d	 d
 d g d ƒ d
 k sŸ t ‚ t  d d d	 d
 d g d ƒ d k sÉ t ‚ t  d d d	 d
 d g t d d  d ƒ ƒ d d
 g k st ‚ t  t d  ƒ t d d ƒ d d d g f t d  ƒ t d d ƒ t d  ƒ f ƒ t d d  ƒ t d d ƒ d d d g f k sƒt ‚ t  t d  ƒ t d  ƒ d d d g f t d  ƒ t d d ƒ d f ƒ t d d  ƒ t d d ƒ d f k sït ‚ d  S(   Ni
   i   i   i   i   i   i   i   i   i(   i2   iÿÿÿÿi    i   (   R   R   R   R   (    (    (    sA   lib/python2.7/site-packages/dask/array/tests/test_optimization.pyt   test_fuse_slice_with_lists“   s    9<**<'W$c          C   s¿   t  d  ƒ }  |  d d d g |  f d |  |  f f d |  |  f |  d d d g |  f f |  d d g |  |  f |  |  |  d f f g } x7 | D]/ \ } } t j t ƒ  t | | ƒ Wd  QXqˆ Wd  S(   Ni   i   i   i    (   R   R   R)   R*   R+   R   (   t   nilt   casesR   R   (    (    sA   lib/python2.7/site-packages/dask/array/tests/test_optimization.pyt   test_nonfusible_fancy_indexingŸ   s    $$-c          C   si   i t  t  d d  t d  d  ƒ f f t d  d  ƒ d f f d 6}  t |  ƒ i t  d d f d 6k se t ‚ d  S(   NR
   i   (   Ni   (   R   R   R   R   R   (   R"   (    (    sA   lib/python2.7/site-packages/dask/array/tests/test_optimization.pyt   test_hard_fuse_slice_cases­   s    !c          C   s‚   t  j d ƒ }  xl d d g D]^ } t j |  d d ƒ} | j | j | j ƒ  ƒ } t d „  | j ƒ  Dƒ ƒ d k s t	 ‚ q Wd  S(	   Ni
   i   t   chunksc         s   s!   |  ] } t  | t j ƒ Vq d  S(   N(   t
   isinstanceR,   t   ndarray(   R   R   (    (    sA   lib/python2.7/site-packages/dask/array/tests/test_optimization.pys	   <genexpr>¹   s    i   (   i   (   i
   (   i
   (
   R,   t   onest   dat
   from_arrayt   __dask_optimize__t   daskt   __dask_keys__t   sumR    R   (   R
   R4   R   R"   (    (    sA   lib/python2.7/site-packages/dask/array/tests/test_optimization.pyt   test_dont_fuse_numpy_arrays³   s
    c          C   s(  t  j d ƒ }  t j |  d d ƒ} | d } | j | j | j ƒ  ƒ } t | ƒ } t j | | ƒ } g  t	 | | ƒ D] \ } } | |  k rw | ^ qw d } t j
 j | ƒ \ }	 }
 |
 | } t | ƒ d k sÙ t ‚ xH | D]@ } | | d t t f k st ‚ | | d | k sà t ‚ qà Wd  S(   Nid   R4   i   i   i    i   (   R,   R7   R8   R9   R:   R;   R<   t   listt   gett   zipt   coret   get_depsR!   R   R   R   (   R
   R   t   zR"   t   keyst   resultst   kt   rt   big_keyt   dependenciest
   dependentst   depst   dep(    (    sA   lib/python2.7/site-packages/dask/array/tests/test_optimization.pyt   test_minimize_data_transfer¼   s    
8
 c          C   sí   i t  j d ƒ j d	 ƒ d 6t d t d d ƒ t d d ƒ f f d
 6d d 6t d t d  ƒ d f f d 6}  d g } t |  | ƒ } t | ƒ d k sš t	 ‚ t
 | ƒ j d d g ƒ j ƒ  } | | t d t d d ƒ d f f k sé t	 ‚ d  S(   Ni   i   R
   i    t   dxt   aliast   dx2i   (   i   i   (   RO   i    i    (   RO   i    i    (   RP   i    i    (   RP   i    i    (   RQ   i    (   RQ   i    (   RQ   i    (   R,   t   aranget   reshapeR   R   R   R   R   R!   R   t   sett
   differencet   pop(   R"   RE   t   dsk2t	   fused_key(    (    sA   lib/python2.7/site-packages/dask/array/tests/test_optimization.pyt   test_fuse_slices_with_aliasÎ   s    (	!c       	   C   s±   i t  t d t d d d  ƒ t d d d  ƒ f f d d g t d d	 d  ƒ f f d
 6}  t |  ƒ |  k sm t ‚ i t  t d d d d g f d f d
 6}  t |  ƒ |  k s­ t ‚ d  S(   NR
   i
   i   id   iÈ   i   i   i2   i<   R   i   i    (   R   R   R   R   R   R   (   R"   (    (    sA   lib/python2.7/site-packages/dask/array/tests/test_optimization.pyt/   test_dont_fuse_fancy_indexing_in_getter_nofancyÚ   s
    0%(R4   i
   i   i   c            sj  t  j d ƒ d ‰  t j d d |  ƒ} ˆ  | } | j | j | j ƒ  ƒ } t ‡  f d †  | j ƒ  Dƒ ƒ su t ‚ xi | j ƒ  D][ } t	 | ƒ } | j
 d ƒ | j
 d ƒ d k s¼ t ‚ | ˆ  k	 r‚ d | k sÝ t ‚ q‚ q‚ Wt g  | j ƒ  D]" } | d	 t t f k rñ | ^ qñ ƒ } | j d k rC| | j k sUt ‚ n | d	 k sUt ‚ t | ˆ  d ƒ d  S(
   Ni
   iÒ–IR4   c         3   s   |  ] } | ˆ  k Vq d  S(   N(    (   R   R   (   R
   (    sA   lib/python2.7/site-packages/dask/array/tests/test_optimization.pys	   <genexpr>é   s    R   R   i   t
   1234567890i    (   R,   R7   R8   R:   R;   R<   R   R    R   t   strt   countR!   R   R   t   npartitionsR	   (   R4   R   RD   R"   R   t   st	   n_getters(    (   R
   sA   lib/python2.7/site-packages/dask/array/tests/test_optimization.pyt   test_fuse_getter_with_asarrayã   s    
((;s
   get,removec         C   s  t  d d  ƒ } |  d | t t f | r- d n |  d | t t f f t |  d | t t f | f | ri d n |  d | t t f f t |  d | | f t t f d f | r« d n |  d | | f t t f f g } x: | D]2 \ } } t i | d 6ƒ i | d 6k sÓ t ‚ qÓ Wd  S(   Ni    R
   R   (    (   R   R   R   R   R   R   (   R@   t   removet   nullt   optst   origt   final(    (    sA   lib/python2.7/site-packages/dask/array/tests/test_optimization.pyt?   test_remove_no_op_slices_if_get_is_not_getter_or_getter_nofancyø   s    !!!-t   reasons1   blockwise fusion doesnt respect this, which is okc          C   sÚ   t  j d d d	 ƒ}  t  j |  d d d ƒ } | j | j | j ƒ  ƒ } t j j d d ƒ   | j | j | j ƒ  ƒ } Wd  QXt j | | j ƒ  ƒ t j | | j ƒ  ƒ k s¸ t	 ‚ t
 | ƒ t
 | ƒ k  sÖ t	 ‚ d  S(
   Ni
   R4   i   i   i   i   t   fuse_ave_widthi    (   i   (   R8   R7   R=   R:   R;   R<   t   configRT   R@   R   R!   (   R
   R   R   R   (    (    sA   lib/python2.7/site-packages/dask/array/tests/test_optimization.pyt   test_turn_off_fusion	  s    !6c          C   ss   t  j d d d g d ƒ }  t  j |  |  d g f ƒ }  |  j d ƒ } t  j t j | i d d 6ƒ } | j ƒ  d  S(   Ni   i   g      @iÿÿÿÿi    (   i   (   i   (   R8   R9   t   concatenatet   rechunkt   coarsenR,   R=   t   compute(   R
   R   (    (    sA   lib/python2.7/site-packages/dask/array/tests/test_optimization.pyt   test_gh3937  s
    c          C   si   t  j d ƒ j d ƒ }  t j |  d d	 ƒ} | d } t j | | j ƒ } t | j d t	 ƒ | ƒ d  S(
   Ni8   i   i   R4   i   i   t   optimize_graph(   i   i   (   i   i   (
   R,   RR   RS   R8   R9   t   dott   TR	   Ro   R   (   R
   R$   t   X(    (    sA   lib/python2.7/site-packages/dask/array/tests/test_optimization.pyt   test_double_dependencies#  s
    
(,   R)   t   importorskipR    R,   R;   t
   dask.arrayR-   R8   t   dask.optimizationR   t
   dask.utilsR   t   dask.array.coreR   R   t   dask.array.optimizationR   R   R   R   t   dask.array.utilsR	   R   R   R#   R(   R.   R/   R2   R3   R>   RN   RY   RZ   t   markt   parametrizeRa   R   R   Rg   t   xfailRk   Rp   Ru   (    (    (    sA   lib/python2.7/site-packages/dask/array/tests/test_optimization.pyt   <module>   s6   "	;													'-	