ó
¦–Õ\c           @   s¹  d  d l  Z  d  d l Z d  d l m Z d  d l m Z d  d l Z d  d l m Z m	 Z	 d  d l
 m Z d  d l m Z d  d l m Z d  d l m Z m Z m Z m Z m Z 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' d „  Z( d „  Z) d „  Z* d „  Z+ d „  Z, d „  Z- d „  Z. d „  Z/ d d „ Z0 d  „  Z1 d! „  Z2 d" „  Z3 d S(#   iÿÿÿÿN(   t   getitem(   t   partial(   t   addt   inc(   t   apply(   t   get_dependencies(   t   get_sync(	   t   cullt   fuset   inlinet   inline_functionst   functions_oft   fuse_getitemt   fuse_selectionst   fuse_lineart   SubgraphCallable(   t   partial_by_orderc         C   s   |  d S(   Ni   (    (   t   x(    (    s;   lib/python2.7/site-packages/dask/tests/test_optimization.pyt   double   s    c             sN  i d d 6t  d f d 6t  d f d 6t d d f d 6‰  t ˆ  d ƒ \ }  } |  i d d 6t  d f d 6t d d f d 6k s‚ t ‚ | i g  d 6d g d 6d g d 6k s¯ t ‚ t ˆ  d ƒ t ˆ  d g ƒ k sÖ t ‚ t ˆ  d d g ƒ d ˆ  k sû t ‚ t ˆ  d g d g g ƒ t ˆ  d d g ƒ k s1t ‚ t j t ‡  f d †  ƒ d  S(	   Ni   R   t   yt   zi
   t   outi    c              s   t  ˆ  d ƒ S(   Nt   badkey(   R   (    (   t   d(    s;   lib/python2.7/site-packages/dask/tests/test_optimization.pyt   <lambda>    t    (   R   R   R   t   AssertionErrort   pytestt   raisest   KeyError(   t   culledt   dependencies(    (   R   s;   lib/python2.7/site-packages/dask/tests/test_optimization.pyt	   test_cull   s    76-'%6c          O   sM   t  |  | Ž  } | j d ƒ t k	 r( | St |  | Ž  } | | k sI t ‚ | S(   s9   Run both ``fuse`` and ``fuse_linear`` and compare resultst   rename_keys(   R   t   gett   FalseR   R   (   t   argst   kwargst   rv1t   rv2(    (    s;   lib/python2.7/site-packages/dask/tests/test_optimization.pyt   fuse2#   s    c            s   ˆ  ‡  f d †  ˆ  Dƒ f S(   Nc            s"   i  |  ] } t  ˆ  | ƒ | “ q S(    (   R   (   t   .0t   k(   t   dsk(    s;   lib/python2.7/site-packages/dask/tests/test_optimization.pys
   <dictcomp>.   s   	 (    (   R+   (    (   R+   s;   lib/python2.7/site-packages/dask/tests/test_optimization.pyt	   with_deps-   s    c       	   C   s”  t  }  i t d f d 6t d f d 6t d f d 6t d d f d 6d d 6d d 6} |  | d	 t ƒt i t t t t d d f f f f d 6d d 6d d 6ƒ k s¥ t ‚ |  | d	 t ƒt i t t t t d d f f f f d
 6d d 6d d 6d
 d 6ƒ k s t ‚ i t d f d 6t d f d 6t d f d 6t d f d 6t d d f d 6d d 6d d 6} |  | d	 t ƒt i t d f d 6t t d f f d 6t t d d f f d 6d d 6d d 6ƒ k sÀt ‚ |  | d	 t ƒt i t d f d 6t t d f f d 6t t d d f f d 6d d 6d d 6d d 6d d 6ƒ k s6t ‚ i
 t d f d 6t d f d 6t d f d 6t d f d 6t d f d 6t d d f d 6t d f d 6t d f d 6d d 6d d 6} |  | d	 t ƒt i t t t d f f f d 6t d f d 6t t d d f f d 6t d f d 6t d f d 6ƒ k s/t ‚ |  | d	 t ƒt i	 t t t d f f f d 6t d f d 6t t d d f f d 6t d f d 6t d f d 6d d 6d d 6d d 6d d 6ƒ k sÅt ‚ i t d f d 6t d f d 6t d f d 6t d f d 6t d f d 6d d 6} |  | d	 t ƒt i t d f d 6t d f d 6t t d f f d 6t d f d 6ƒ k sqt ‚ |  | d	 t ƒt i t d f d 6t d f d 6t t d f f d 6t d f d 6d d 6d d 6ƒ k sÝt ‚ i d d 6t d f d 6t d d f d 6} |  | d	 t ƒt i t d f d 6t d d f d 6ƒ k sHt ‚ |  | d	 t ƒt i t d f d 6t d d f d 6d d 6ƒ k st ‚ d  S(   NR   t   wR   R   t   at   bi   i   R!   s   z-y-x-wt   NEWs   z-ys   x-wt   vt   ut   cR   s   x-w-us   c-as   d-bi    s   y-xs   c-ds   a-b(   R(   R   R   R#   R,   R   t   True(   R   R   (    (    s;   lib/python2.7/site-packages/dask/tests/test_optimization.pyt	   test_fuse1   sÀ    
""


c          C   së  t  }  i d d 6t d f d 6t d f d 6} d g } |  | | d t ƒt i t d f d 6t d f d 6ƒ k sw t ‚ |  | | d t ƒt i t d f d 6t d f d 6d d 6ƒ k s¿ t ‚ i t d f d 6t d	 f d 6t d
 f d	 6t d d f d
 6d d 6d d 6} d d
 g } |  | | d t ƒt i t d f d 6t t d
 f f d 6t d d f d
 6d d 6d d 6ƒ k s{t ‚ |  | | d t ƒt i t d f d 6t t d
 f f d 6t d d f d
 6d d 6d d 6d d 6ƒ k sçt ‚ d  S(   Ni   R.   R/   R3   R!   s   a-bR   R-   R   R   i   s   y-x(   R(   R   R#   R,   R   R4   R   (   R   R   t   keys(    (    s;   lib/python2.7/site-packages/dask/tests/test_optimization.pyt   test_fuse_keys§   sD    	
c          C   sã  i d d 6t  d f d 6t  d f d 6t d d f d 6}  t |  ƒ i d d 6t  d f d 6t  d f d 6t d d f d 6k s€ t ‚ t |  d d d g ƒ i d d 6t  d f d 6t  t  d f f d 6t d t  t  d f f f d 6k sç t ‚ i d d 6t  d f d 6t d d f d 6}  t |  ƒ i d d 6t  d f d 6t d d f d 6k sMt ‚ t |  d	 d ƒi d d 6t  d f d 6t d t  d f f d 6k s•t ‚ t |  d	 d d
 t ƒi d d 6t  d f d 6t d t  d f f d 6k sãt ‚ i d d 6d d 6d d 6d d d g d 6t t d f d f d 6}  t |  d ƒ i d d 6d d 6d d 6d d d g d 6t t d d d g f d f d 6k sƒt ‚ t |  d d
 t ƒi d d 6d d 6d d 6d d d g d 6t t d f d f d 6k sßt ‚ d  S(   Ni   R.   R/   R3   R   R   R   R   R6   t   inline_constantst   e(   R   R   R	   R   R#   t   len(   R   (    (    s;   lib/python2.7/site-packages/dask/tests/test_optimization.pyt   test_inlineÓ   sR    
(
""
+c          C   s»   d \ }  } } } i t  | | f d 6t |  f | 6t | f | 6d |  6d | 6} t | g  d t t g ƒ ƒ} i t  t |  f | f d 6t | f | 6d |  6d | 6} | | k s· t ‚ d  S(   Nt   xyidR   i   t   fast_functions(   R   R   R   R
   t   setR   (   R   R   t   iR   R+   t   resultt   expected(    (    s;   lib/python2.7/site-packages/dask/tests/test_optimization.pyt   test_inline_functions   s    c          C   s‹   i d d 6d d 6t  t d ƒ d f d 6t d f d 6}  t |  g  d t t g ƒ ƒ} | d t |  d f k su t ‚ d | k s‡ t ‚ d  S(   Ni   R   i   R   R.   R/   R=   (   R   R   R   R
   R>   R   (   R+   R@   (    (    s;   lib/python2.7/site-packages/dask/tests/test_optimization.pyt(   test_inline_ignores_curries_and_partials  s     c          C   s¡   d t  f d „  ƒ  Y}  |  ƒ  } i d d 6t d f d 6| d f d 6t d f d 6} t | g  d t h ƒ} | d | | d f k s‹ t ‚ d | k s t ‚ d  S(	   Nt   NonHashableCallablec           B   s   e  Z d  „  Z d „  Z RS(   c         S   s   | d S(   Ni   (    (   t   selfR.   (    (    s;   lib/python2.7/site-packages/dask/tests/test_optimization.pyt   __call__  s    c         S   s   t  d ƒ ‚ d  S(   Ns   Not hashable(   t	   TypeError(   RE   (    (    s;   lib/python2.7/site-packages/dask/tests/test_optimization.pyt   __hash__  s    (   t   __name__t
   __module__RF   RH   (    (    (    s;   lib/python2.7/site-packages/dask/tests/test_optimization.pyRD     s   	i   R.   R/   R3   R   R=   (   t   objectR   R
   R   (   RD   t   nohashR+   R@   (    (    s;   lib/python2.7/site-packages/dask/tests/test_optimization.pyt"   test_inline_functions_non_hashable  s    	
 c          C   sN   i t  d f d 6d d 6}  t |  g  d t t  g ƒ ƒ} | |  k sJ t ‚ d  S(   NR   R   i   R=   (   R   R
   R>   R   (   R+   R@   (    (    s;   lib/python2.7/site-packages/dask/tests/test_optimization.pyt/   test_inline_doesnt_shrink_fast_functions_at_top,  s    c          C   sÁ   d \ }  } } } i t  | | g f d 6t |  f | 6t | f | 6d |  6d | 6} i t  t |  f | g f d 6t | f | 6d |  6d | 6} t | g  d t t g ƒ ƒ} | | k s½ t ‚ d  S(   NR<   R   i   R=   (   t   sumR   R   R
   R>   R   (   R   R   R?   R   R+   RA   R@   (    (    s;   lib/python2.7/site-packages/dask/tests/test_optimization.pyt   test_inline_traverses_lists2  s    c          C   s–   i t  d f d 6t d f d 6}  t |  g  t  g ƒ i t t  d f f d 6k sT t ‚ t |  d g t  g ƒ i t d f d 6t  d f d 6k s’ t ‚ d  S(   Ni   R   R   (   R   R   R
   R   (   R+   (    (    s;   lib/python2.7/site-packages/dask/tests/test_optimization.pyt*   test_inline_functions_protects_output_keys?  s     4%c          C   s3  d „  }  d „  } t  |  d f ƒ t |  g ƒ k s9 t ‚ t  |  | d f f ƒ t |  | g ƒ k si t ‚ t  |  | d f g f ƒ t |  | g ƒ k sœ t ‚ t  |  | d f g g g f ƒ t |  | g ƒ k sÕ t ‚ t  d ƒ t ƒ  k sð t ‚ t  |  ƒ t ƒ  k st ‚ t  |  f ƒ t |  g ƒ k s/t ‚ d  S(   Nc         S   s   |  S(   N(    (   R   (    (    s;   lib/python2.7/site-packages/dask/tests/test_optimization.pyR   G  R   c         S   s   |  S(   N(    (   R   (    (    s;   lib/python2.7/site-packages/dask/tests/test_optimization.pyR   H  R   i   (   R   R>   R   (   R.   R/   (    (    s;   lib/python2.7/site-packages/dask/tests/test_optimization.pyt   test_functions_ofF  s    		'039c          C   sˆ   d „  }  i |  d d d d g f d 6t  d d f d 6} t | |  d ƒ } t | d ƒ \ } } | i |  d d d f d 6k s„ t ‚ d  S(	   Nc          W   s   d  S(   N(    (   R$   (    (    s;   lib/python2.7/site-packages/dask/tests/test_optimization.pyt   loadS  s    t   storet   partR.   R/   R   R   i   (   R    R   R   R   (   RS   R+   t   dsk2R   (    (    s;   lib/python2.7/site-packages/dask/tests/test_optimization.pyt   test_fuse_getitemR  s    	c             sš   d „  ‰  i ˆ  d d d d g f d 6t  d d f d 6}  ‡  f d †  } t |  t  ˆ  | ƒ } t | d ƒ \ } } | i ˆ  d d d f d 6k s– t ‚ d  S(	   Nc          W   s   d  S(   N(    (   R$   (    (    s;   lib/python2.7/site-packages/dask/tests/test_optimization.pyRS   ]  s    RT   RU   R.   R/   R   R   c            s   ˆ  | d | d |  d f S(   Ni   i   (    (   t   t1t   t2(   RS   (    s;   lib/python2.7/site-packages/dask/tests/test_optimization.pyR   a  R   (   R    R   R   R   (   R+   t   mergeRV   R   (    (   RS   s;   lib/python2.7/site-packages/dask/tests/test_optimization.pyt   test_fuse_selections\  s    	c          C   sv   i d d 6d d 6d d 6d d d g d 6t  t d f d f d 6}  t |  d d g ƒ \ } } t | d h d | ƒd  S(   Ni   R.   R/   R3   R   R9   R   (   R   R:   R   R	   (   R   t   d2R   (    (    s;   lib/python2.7/site-packages/dask/tests/test_optimization.pyt   test_inline_cull_dependenciesg  s    
c          C   sï&  d „  }  i d d 6|  d f d 6|  d d f d 6|  d d f d 6} t  | d d d	 t ƒt | ƒ k sm t ‚ t  | d d d	 t ƒt | ƒ k s— t ‚ t  | d d
 d	 t ƒt i d d 6|  |  d f |  d d f f d 6ƒ k sç t ‚ t  | d d
 d	 t ƒt i d d 6|  |  d f |  d d f f d 6d d 6ƒ k s>t ‚ i d d 6|  d f d 6|  d d f d 6|  d d d f d 6|  d d d f d 6} t  | d d d	 t ƒt | ƒ k s¸t ‚ t  | d d d	 t ƒt | ƒ k sât ‚ t  | d d d	 t ƒt i d d 6|  |  d f |  d d f |  d d d f f d 6ƒ k sAt ‚ t  | d d d	 t ƒt i d d 6|  |  d f |  d d f |  d d d f f d 6d d 6ƒ k s§t ‚ i d d 6|  d f d 6|  d f d 6|  d d d f d 6} t  | d d d	 t ƒt | ƒ k st ‚ t  | d d d	 t ƒt | ƒ k s5t ‚ t  | d d
 d	 t ƒt i d d 6|  d |  d f |  d f f d 6ƒ k s…t ‚ t  | d d
 d	 t ƒt i d d 6|  d |  d f |  d f f d 6d d 6ƒ k sÜt ‚ i d d 6|  d f d 6|  d f d 6|  d d f d 6|  d f d 6|  d f d 6|  d d f d 6} t  | d d d	 t ƒt | ƒ k sgt ‚ t  | d d d	 t ƒt | ƒ k s‘t ‚ t  | d d
 d	 t ƒt i d d 6|  |  d f |  d f f d 6|  |  d f |  d f f d 6ƒ k sút ‚ t  | d d
 d	 t ƒt i d d 6|  |  d f |  d f f d 6|  |  d f |  d f f d 6d d 6d d 6ƒ k sqt ‚ i d d 6|  d f d 6|  d f d 6|  d f d 6|  d f d 6|  d d f d 6|  d d f d 6|  d d f d 6} t  | d d d	 t ƒt | ƒ k st ‚ t  | d d d	 t ƒt | ƒ k s6t ‚ t i d d 6|  |  d f |  d f f d 6|  |  d f |  d f f d 6|  d d f d 6ƒ } t  | d d
 d	 t ƒ| k sµt ‚ t  | d d d	 t ƒ| k sÙt ‚ t i d d 6|  |  d f |  d f f d 6|  |  d f |  d f f d 6|  d d f d 6d d 6d d 6ƒ } t  | d d
 d	 t ƒ| k sft ‚ t  | d d d	 t ƒ| k sŠt ‚ t  | d d d	 t ƒt i d d 6|  |  |  d f |  d f f |  |  d f |  d f f f d 6ƒ k sõt ‚ t  | d d d	 t ƒt i d d 6|  |  |  d f |  d f f |  |  d f |  d f f f d 6d d 6ƒ k sgt ‚ i d d 6|  d f d 6|  d f d 6|  d f d 6|  d f d 6|  d f d 6|  d f d 6|  d f d 6|  d f d 6|  d d f d 6|  d d f d 6|  d d f d 6|  d d f d  6|  d d f d 6|  d d  f d 6|  d d f d 6} t  | d d d	 t ƒt | ƒ k sv	t ‚ t  | d d d	 t ƒt | ƒ k s 	t ‚ t i d d 6|  |  d f |  d f f d 6|  |  d f |  d f f d 6|  |  d f |  d f f d 6|  |  d f |  d f f d  6|  d d f d 6|  d d  f d 6|  d d f d 6ƒ } t  | d d
 d	 t ƒ| k sw
t ‚ t  | d d d	 t ƒ| k s›
t ‚ t i d d 6|  |  d f |  d f f d 6|  |  d f |  d f f d 6|  |  d f |  d f f d! 6|  |  d f |  d f f d" 6|  d d f d 6|  d d  f d 6|  d d f d 6d d 6d d 6d! d 6d" d  6ƒ } t  | d d
 d	 t ƒ| k sŽt ‚ t  | d d d	 t ƒ| k s²t ‚ t i d d 6|  |  |  d f |  d f f |  |  d f |  d f f f d 6|  |  |  d f |  d f f |  |  d f |  d f f f d 6|  d d f d 6ƒ } t  | d d d	 t ƒ| k smt ‚ t  | d d# d	 t ƒ| k s‘t ‚ t i d d 6|  |  |  d f |  d f f |  |  d f |  d f f f d$ 6|  |  |  d f |  d f f |  |  d f |  d f f f d% 6|  d d f d 6d$ d 6d% d 6ƒ } t  | d d d	 t ƒ| k sZt ‚ t  | d d# d	 t ƒ| k s~t ‚ t  | d d& d	 t ƒt i d d 6|  |  |  |  d f |  d f f |  |  d f |  d f f f |  |  |  d f |  d f f |  |  d f |  d f f f f d 6ƒ k s%t ‚ t  | d d& d	 t ƒt i d d 6|  |  |  |  d f |  d f f |  |  d f |  d f f f |  |  |  d f |  d f f |  |  d f |  d f f f f d' 6d' d 6ƒ k sÓt ‚ i  d d 6|  d f d 6|  d f d 6|  d f d 6|  d f d 6|  d f d 6|  d f d 6|  d f d 6|  d f d 6|  d f d( 6|  d f d) 6|  d f d* 6|  d f d+ 6|  d f d, 6|  d f d- 6|  d f d. 6|  d f d/ 6|  d d f d 6|  d d f d 6|  d d f d 6|  d d f d  6|  d( d) f d0 6|  d* d+ f d1 6|  d, d- f d2 6|  d. d/ f d3 6|  d d f d 6|  d d  f d 6|  d0 d1 f d4 6|  d2 d3 f d5 6|  d d f d6 6|  d4 d5 f d7 6|  d6 d7 f d8 6} t  | d d d	 t ƒt | ƒ k sÊt ‚ t  | d d d	 t ƒt | ƒ k sôt ‚ t i d d 6|  |  d f |  d f f d 6|  |  d f |  d f f d 6|  |  d f |  d f f d 6|  |  d f |  d f f d  6|  |  d f |  d f f d0 6|  |  d f |  d f f d1 6|  |  d f |  d f f d2 6|  |  d f |  d f f d3 6|  d d f d 6|  d d  f d 6|  d0 d1 f d4 6|  d2 d3 f d5 6|  d d f d6 6|  d4 d5 f d7 6|  d6 d7 f d8 6ƒ } t  | d d
 d	 t ƒ| k s{t ‚ t  | d d d	 t ƒ| k sŸt ‚ t i d d 6|  |  d f |  d f f d 6|  |  d f |  d f f d 6|  |  d f |  d f f d! 6|  |  d f |  d f f d" 6|  |  d f |  d f f d9 6|  |  d f |  d f f d: 6|  |  d f |  d f f d; 6|  |  d f |  d f f d< 6|  d d f d 6|  d d  f d 6|  d0 d1 f d4 6|  d2 d3 f d5 6|  d d f d6 6|  d4 d5 f d7 6|  d6 d7 f d8 6d d 6d d 6d! d 6d" d  6d9 d0 6d: d1 6d; d2 6d< d3 6ƒ } t  | d d
 d	 t ƒ| k s^t ‚ t  | d d d	 t ƒ| k s‚t ‚ t i d d 6|  |  |  d f |  d f f |  |  d f |  d f f f d 6|  |  |  d f |  d f f |  |  d f |  d f f f d 6|  |  |  d f |  d f f |  |  d f |  d f f f d4 6|  |  |  d f |  d f f |  |  d f |  d f f f d5 6|  d d f d6 6|  d4 d5 f d7 6|  d6 d7 f d8 6ƒ } t  | d d d	 t ƒ| k sÑt ‚ t  | d d# d	 t ƒ| k sõt ‚ t i d d 6|  |  |  d f |  d f f |  |  d f |  d f f f d$ 6|  |  |  d f |  d f f |  |  d f |  d f f f d% 6|  |  |  d f |  d f f |  |  d f |  d f f f d= 6|  |  |  d f |  d f f |  |  d f |  d f f f d> 6|  d d f d6 6|  d4 d5 f d7 6|  d6 d7 f d8 6d$ d 6d% d 6d= d4 6d> d5 6ƒ } t  | d d d	 t ƒ| k s`t ‚ t  | d d# d	 t ƒ| k s„t ‚ t i d d 6|  |  |  |  d f |  d f f |  |  d f |  d f f f |  |  |  d f |  d f f |  |  d f |  d f f f f d6 6|  |  |  |  d f |  d f f |  |  d f |  d f f f |  |  |  d f |  d f f |  |  d f |  d f f f f d7 6|  d6 d7 f d8 6ƒ } t  | d d& d	 t ƒ| k s·t ‚ t  | d d? d	 t ƒ| k sÛt ‚ t i d d 6|  |  |  |  d f |  d f f |  |  d f |  d f f f |  |  |  d f |  d f f |  |  d f |  d f f f f d@ 6|  |  |  |  d f |  d f f |  |  d f |  d f f f |  |  |  d f |  d f f |  |  d f |  d f f f f dA 6|  d6 d7 f d8 6d@ d6 6dA d7 6ƒ } t  | d d& d	 t ƒ| k st ‚ t  | d d? d	 t ƒ| k s@t ‚ t  | d dB d	 t ƒt i d d 6|  |  |  |  |  d f |  d f f |  |  d f |  d f f f |  |  |  d f |  d f f |  |  d f |  d f f f f |  |  |  |  d f |  d f f |  |  d f |  d f f f |  |  |  d f |  d f f |  |  d f |  d f f f f f d8 6ƒ k s_t ‚ t  | d dB d	 t ƒt i d d 6|  |  |  |  |  d f |  d f f |  |  d f |  d f f f |  |  |  d f |  d f f |  |  d f |  d f f f f |  |  |  |  d f |  d f f |  |  d f |  d f f f |  |  |  d f |  d f f |  |  d f |  d f f f f f dC 6dC d8 6ƒ k s…t ‚ i d d 6|  d f dD 6} t  | d d d	 t ƒt i |  d f dD 6ƒ k sÖt ‚ t  | d d d	 t ƒt i |  d f dE 6dE dD 6ƒ k st ‚ i d d 6|  d f dD 6|  dD f d 6|  d f d 6} t  | d d d	 t ƒt i |  |  |  d f f f d 6ƒ k s‹t ‚ t  | d d d	 t ƒt i |  |  |  d f f f dF 6dF d 6ƒ k sÕt ‚ i d d 6|  d f dD 6|  d dD f d 6|  d d f d 6} t  | d d d	 t ƒt i d d 6|  d |  d |  d f f f d 6ƒ k s_t ‚ t  | d d d	 t ƒt i d d 6|  d |  d |  d f f f dG 6dG d 6ƒ k s¶t ‚ i d d 6|  d f d 6|  d f d 6|  d f d 6|  d f d 6|  d f d6 6|  d6 d f d8 6} t i d d 6|  d f d 6|  |  |  |  d f f f f d6 6|  d6 d f d8 6ƒ } t  | d d d	 t ƒ| k s‡t ‚ t  | d d d	 t ƒ| k s«t ‚ t i d d 6|  d f d 6|  |  |  |  d f f f f dH 6|  d6 d f d8 6dH d6 6ƒ } t  | d d d	 t ƒ| k s% t ‚ t  | d d d	 t ƒ| k sI t ‚ t  | d d
 d	 t ƒt i d d 6|  |  |  |  |  d f f f f |  d f f d8 6ƒ k s¨ t ‚ t  | d d
 d	 t ƒt i d d 6|  |  |  |  |  d f f f f |  d f f dI 6dI d8 6ƒ k s!t ‚ i d d 6|  d f d 6|  d f d 6|  d d f d 6|  d d f d 6|  d d f d6 6|  d d6 d f d8 6} t i d d 6|  d f d 6|  d |  d |  d |  d f f f f d6 6|  d d6 d f d8 6ƒ } t  | d d d	 t ƒ| k s÷!t ‚ t  | d d d	 t ƒ| k s"t ‚ t i d d 6|  d f d 6|  d |  d |  d |  d f f f f dH 6|  d d6 d f d8 6dH d6 6ƒ } t  | d d d	 t ƒ| k s¡"t ‚ t  | d d d	 t ƒ| k sÅ"t ‚ t  | d d
 d	 t ƒt i d d 6|  d |  d |  d |  d |  d f f f f |  d f f d8 6ƒ k s0#t ‚ t  | d d
 d	 t ƒt i d d 6|  d |  d |  d |  d |  d f f f f |  d f f dI 6dI d8 6ƒ k s¢#t ‚ i d d 6|  d f d 6|  d f d 6|  d f d 6|  d f d 6|  d f d 6|  d f d 6|  d f d 6|  d f d 6|  d f d4 6|  d d d4 f d 6|  d f d8 6|  d8 f dJ 6} t  | d d d	 t ƒt i d d 6|  |  |  d f f f d 6|  |  |  d f f f d 6|  |  |  d f f f d4 6|  |  |  d d d4 f f f dJ 6ƒ k sì$t ‚ t  | d d d	 t ƒt i	 d d 6|  |  |  d f f f dK 6|  |  |  d f f f dL 6|  |  |  d f f f dM 6|  |  |  d d d4 f f f dN 6dK d 6dL d 6dM d4 6dN dJ 6ƒ k s£%t ‚ i d d 6|  d f dD 6|  dD f d 6|  dD d f d 6|  d f d 6|  d f d8 6|  d d8 f dJ 6} t  | d d d	 t ƒt i |  d f dD 6|  dD |  dD f f d 6|  d |  |  d f f f dJ 6ƒ k sm&t ‚ t  | d d d	 t ƒt i |  d f dE 6|  dD |  dD f f dO 6|  d |  |  d f f f dN 6dE dD 6dO d 6dN dJ 6ƒ k së&t ‚ d  S(P   Nc          W   s   |  S(   N(    (   R$   (    (    s;   lib/python2.7/site-packages/dask/tests/test_optimization.pyt   fs  s    i   R.   t   b1t   b2R3   t	   ave_widthgffffffþ?R!   i   s   b1-b2-ct   b3g333333@i   s
   b1-b2-b3-ct   d1R\   R9   s   d1-d2-et   b4t   c1t   c2R   s   b1-b2-c1s   b3-b4-c2s   b1-b2-b3-b4-c1-c2-dt   b5t   b6t   b7t   b8t   c3t   c4s   b5-b6-c3s   b7-b8-c4gffffff@s   b1-b2-b3-b4-c1-c2-d1s   b5-b6-b7-b8-c3-c4-d2gÍÌÌÌÌÌ@s+   b1-b2-b3-b4-b5-b6-b7-b8-c1-c2-c3-c4-d1-d2-et   b9t   b10t   b11t   b12t   b13t   b14t   b15t   b16t   c5t   c6t   c7t   c8t   d3t   d4t   e1t   e2R^   s	   b10-b9-c5s
   b11-b12-c6s
   b13-b14-c7s
   b15-b16-c8s   b10-b11-b12-b9-c5-c6-d3s   b13-b14-b15-b16-c7-c8-d4gš™™™™™@s,   b1-b2-b3-b4-b5-b6-b7-b8-c1-c2-c3-c4-d1-d2-e1s3   b10-b11-b12-b13-b14-b15-b16-b9-c5-c6-c7-c8-d3-d4-e2g      @sb   b1-b10-b11-b12-b13-b14-b15-b16-b2-b3-b4-b5-b6-b7-b8-b9-c1-c2-c3-c4-c5-c6-c7-c8-d1-d2-d3-d4-e1-e2-fR/   s   a-bs   a-b-c-ds   b-c-ds   b1-c1-d1-e1s   b1-b2-c1-d1-e1-ft   gs   b1-c1-d1s   b2-c2-d2s   b3-c3-d3s   e-f-gs   c-d(   R   R#   R,   R   R4   (   R^   R   RA   (    (    s;   lib/python2.7/site-packages/dask/tests/test_optimization.pyt!   test_fuse_reductions_single_inputr  s†   	**.**=.**.**+**$$$$I:**$$$$::$$::$$9L6=**$$$$::::$$::::$$9=9=$$6=6=$$<99O999@(.$$$$=.($$($$I:.+c       
   C   sw  d „  }  i d d 6|  d f d 6|  d f d 6|  d t  d d d  ƒ t  d d d  ƒ f f d 6d d 6|  |  d |  d g f f f d 6|  d d f d 6|  d t  d d d  ƒ t  d d
 d  ƒ f f d 6|  d f d 6|  d f d  6|  d t  d d
 d  ƒ t  d d
 d  ƒ f f d! 6|  d" d# f d$ 6|  d% f d& 6} d' d( d) d* h } t | d | d d d t ƒ} | t | d ƒ k sst ‚ d  S(+   Nc          W   s   |  S(   N(    (   R$   (    (    s;   lib/python2.7/site-packages/dask/tests/test_optimization.pyR^     s    i   s/   array-original-27b9f9d257a80fa6adae06a98faf71ebs)   cholesky-26a6b670a8aabb7e2f8936db7ccb6a88i    s/   cholesky-upper-26a6b670a8aabb7e2f8936db7ccb6a88i
   s&   array-27b9f9d257a80fa6adae06a98faf71ebs0   cholesky-lt-dot-26a6b670a8aabb7e2f8936db7ccb6a88i   R6   Ra   i   R!   (   s)   cholesky-26a6b670a8aabb7e2f8936db7ccb6a88i    i    (   s/   cholesky-upper-26a6b670a8aabb7e2f8936db7ccb6a88i    i    (   s/   cholesky-upper-26a6b670a8aabb7e2f8936db7ccb6a88i    i   (   s)   cholesky-26a6b670a8aabb7e2f8936db7ccb6a88i   i    (   s&   array-27b9f9d257a80fa6adae06a98faf71ebi    i    (   s)   cholesky-26a6b670a8aabb7e2f8936db7ccb6a88i    i   (   s/   cholesky-upper-26a6b670a8aabb7e2f8936db7ccb6a88i   i    (   s&   array-27b9f9d257a80fa6adae06a98faf71ebi   i   (   s0   cholesky-lt-dot-26a6b670a8aabb7e2f8936db7ccb6a88i   i    i   i    (   s)   cholesky-26a6b670a8aabb7e2f8936db7ccb6a88i   i   (   s)   cholesky-26a6b670a8aabb7e2f8936db7ccb6a88i   i    (   s/   cholesky-upper-26a6b670a8aabb7e2f8936db7ccb6a88i    i   (   s0   cholesky-lt-dot-26a6b670a8aabb7e2f8936db7ccb6a88i   i    i   i    (   s&   array-27b9f9d257a80fa6adae06a98faf71ebi    i   (   s)   cholesky-26a6b670a8aabb7e2f8936db7ccb6a88i   i   (   s/   cholesky-upper-26a6b670a8aabb7e2f8936db7ccb6a88i   i   (   i
   i
   (   s)   cholesky-26a6b670a8aabb7e2f8936db7ccb6a88i    i   (   s&   array-27b9f9d257a80fa6adae06a98faf71ebi   i   (   s)   cholesky-26a6b670a8aabb7e2f8936db7ccb6a88i    i    (   s&   array-27b9f9d257a80fa6adae06a98faf71ebi    i   (   s/   cholesky-upper-26a6b670a8aabb7e2f8936db7ccb6a88i    i   (   s&   array-27b9f9d257a80fa6adae06a98faf71ebi    i    (   s)   cholesky-26a6b670a8aabb7e2f8936db7ccb6a88i    i    (   s/   cholesky-upper-26a6b670a8aabb7e2f8936db7ccb6a88i    i    (   s/   cholesky-upper-26a6b670a8aabb7e2f8936db7ccb6a88i    i   (   s/   cholesky-upper-26a6b670a8aabb7e2f8936db7ccb6a88i   i    (   s/   cholesky-upper-26a6b670a8aabb7e2f8936db7ccb6a88i   i   (   t   slicet   NoneR   R4   R,   R   (   R^   R   R6   t   rv(    (    s;   lib/python2.7/site-packages/dask/tests/test_optimization.pyt   test_fuse_stressed  sN    	

(
(

(
	c       	   C   sy  d „  }  i d d 6d d 6|  d d f d 6|  d f d 6} t  | d d d	 t ƒt i |  |  d d f f d 6ƒ k sz t ‚ t  | d d d	 t ƒt i |  |  d d f f d
 6d
 d 6ƒ k sÁ t ‚ t  | d d d	 t ƒt i d d 6d d 6|  |  d d f f d 6ƒ k st ‚ t  | d d d	 t ƒt i d d 6d d 6|  |  d d f f d 6d d 6ƒ k sdt ‚ i d d 6d d 6|  d f d 6|  d d f d 6|  d f d 6|  d d d f d 6} t | ƒ } t  | d d d	 t ƒ| k såt ‚ t  | d d d	 t ƒ| k s	t ‚ t  | d d d	 t ƒ| k s-t ‚ t  | d d d	 t ƒ| k sQt ‚ t  | d d d	 t ƒt i d d 6d d 6|  |  d f |  d d f |  d f f d 6ƒ k s±t ‚ t  | d d d	 t ƒt i d d 6d d 6|  |  d f |  d d f |  d f f d 6d d 6ƒ k st ‚ i d d 6d d 6|  d f d 6|  d d f d 6|  d f d 6|  d d f d 6|  d d f d 6} t  | d d d	 t ƒt | ƒ k s t ‚ t  | d d d	 t ƒt | ƒ k sÊt ‚ t  | d d d	 t ƒt i d d 6d d 6|  d d f d 6|  |  d f d f d 6|  d |  d f f d 6ƒ k s>t ‚ t  | d d d	 t ƒt i d d 6d d 6|  d d f d 6|  |  d f d f d 6|  d |  d f f d 6d d 6d d 6ƒ k sÀt ‚ i d d 6d d 6|  d f d 6|  d d f d 6|  d f d 6|  d d f d 6|  d d f d 6|  d d f d 6} t  | d d d	 t ƒt | ƒ k sXt ‚ t  | d d d	 t ƒt | ƒ k s‚t ‚ t  | d d d	 t ƒt i d d 6d d 6|  d d f d 6|  |  |  d f d f |  d |  d f f f d 6ƒ k søt ‚ t  | d d d	 t ƒt i d d 6d d 6|  d d f d 6|  |  |  d f d f |  d |  d f f f d 6d d 6ƒ k sut ‚ d  S(   Nc          W   s   |  S(   N(    (   R$   (    (    s;   lib/python2.7/site-packages/dask/tests/test_optimization.pyR^   Õ  s    i   t   a1i   t   a2R/   R3   Ra   R!   s	   a1-a2-b-cs   b-cR_   R`   Rb   g333333@i   s
   b1-b2-b3-cRe   Rf   s   b1-c1s   b3-c2R   s   b1-b3-c1-c2-d(   R   R#   R,   R   R4   (   R^   R   RA   (    (    s;   lib/python2.7/site-packages/dask/tests/test_optimization.pyt#   test_fuse_reductions_multiple_inputÔ  s®    	%%$$$$7(**%**=.i   c         C   s   |  | | S(   N(    (   R.   R/   R3   (    (    s;   lib/python2.7/site-packages/dask/tests/test_optimization.pyt   func_with_kwargsD  s    c          C   sõ  d d d g }  i t  t d d g f d 6t  t d g i t d 6d g d	 6d
 d 6f d 6t  t d d g i t d 6d g d	 6f d 6t d f d 6t d d f d 6d d d t d t |  f f g d 6t t d f t d d g f f d 6} t | d d d g d d ƒ} | j d k st ‚ t	 | ƒ d k s/t ‚ | j
 ƒ  } | j i d d 6d d 6ƒ | d d ƒ t t | d g ƒ d d g ƒ d k s‘t ‚ | d d ƒ | d d ƒ k sµt ‚ t j t j | ƒ ƒ } | d d ƒ | d d ƒ k sñt ‚ d  S(   Ni   i   i   t   in1R.   t   in2t   functioni   t   otheri   R3   R/   R   R9   R^   t   ht   namet   testi    (   i   i   (   i   i   (   R   R   R   R†   R   RO   R   RŒ   R   t   reprt   copyt   updateR   R   t   picklet   loadst   dumps(   t   non_hashableR+   R^   RV   t   f2(    (    s;   lib/python2.7/site-packages/dask/tests/test_optimization.pyt   test_SubgraphCallableH  s&    ""%;$c          C   sý  i	 d d 6t  d f d 6t  d f d 6t d d f d 6t  d f d 6t  d f d 6t d d f d 6t  d f d	 6t  d	 f d
 6}  t |  d
 d t ƒ} t i d d
 6t i d d 6t d t  t  d f f f d 6t  t  t d t  t  d f f f f f d
 6d
 d ƒ f d 6ƒ } | | k st ‚ t |  d
 d t d t ƒ} t i t i d d 6t d t  t  d f f f d 6t  t  t d t  t  d f f f f f d
 6d
 d ƒ f d
 6ƒ } | | k s°t ‚ t |  d d t ƒ} t i t i d d 6t d t  t  d f f f d 6t d t  t  d f f f d 6d d ƒ f d 6d d 6t  t  d f f d
 6ƒ } | | k sRt ‚ t |  d d t ƒ} g  } x t j	 d ƒ D]Œ } | j
 t i d d 6t  t  d f f d 6d d
 6t i t d d f d 6t  t  t d t  t  d f f f f f d
 6d
 | ƒ f | d 6ƒ ƒ q}W| | k st ‚ t |  d d g d t ƒ} g  } x¤ t j	 d ƒ D]“ } | j
 t i d d 6t  t  d f f d 6t i t d d f d 6t d t  t  d f f f d 6d | ƒ f | d 6d d 6t  t  d f f d
 6ƒ ƒ qPW| | k sùt ‚ d  S(   Ni   s   x-1s   inc-1s   inc-2s   add-1s   inc-3s   inc-4s   add-2s   inc-5s   inc-6t   fuse_subgraphss   add-inc-x-1R!   s	   inc-add-1(    (    (    (   s   x-1s   inc-2(   s   x-1s   inc-2(   R   R   R   R4   R,   R   R   R#   t	   itertoolst   permutationst   append(   R+   t   rest   solt   solst   inkeys(    (    s;   lib/python2.7/site-packages/dask/tests/test_optimization.pyt   test_fuse_subgraphsb  sz    
(((c          C   s  i d d 6t  d d f d 6t  d d f d 6t  d d f d 6t  d d f d 6t  d d f d 6}  t |  d d t ƒ} t i t i d d 6t  d d f d 6t  d d f d 6t  d d f d 6t  d d f d 6t  d d f d 6d d
 ƒ f d	 6d	 d 6ƒ } | | k st ‚ d  S(   Ni   s   x-1s   add-1s   add-2s   add-3s   add-4s   add-5R—   s   add-x-1(    (   R   R   R4   R,   R   R   (   R+   R›   Rœ   (    (    s;   lib/python2.7/site-packages/dask/tests/test_optimization.pyt3   test_fuse_subgraphs_linear_chains_of_duplicate_deps°  s$    
(4   R˜   R‘   t   operatorR    t	   functoolsR   R   t   dask.utils_testR   R   t   dask.compatibilityR   t	   dask.coreR   t
   dask.localR   t   dask.optimizationR   R   R	   R
   R   R   R   R   R   t
   dask.utilsR   R   R    R(   R,   R5   R7   R;   RB   RC   RM   RN   RP   RQ   RR   RW   R[   R]   R~   R‚   R…   R†   R–   RŸ   R    (    (    (    s;   lib/python2.7/site-packages/dask/tests/test_optimization.pyt   <module>   sH   @			
		v	,	-		
						
			ÿ ÿ 	E	p		N