
    tfͺ                    x   d dl mZ d dlZd dlZd dlmZ d dlZd dl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 d dlmZmZ d d	lmZmZ d
 Zej:                  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 Z0d Z1d(dZ2d  Z3d! Z4d" Z5d# Z6d$ Z7d% Z8d& Z9d' Z:y))    )annotationsN)partial)tokenizeget_dependencies)get_sync)SubgraphCallablecullfunctions_offusefuse_linearinlineinline_functions)applypartial_by_order)addincc                   t        |       t        |      u xrs | j                  |j                  k(  xrX t        | j                        t        |j                        k(  xr+ t	        | j
                        t	        |j
                        k(  S N)typeoutkeysetinkeysr   dsk)selfothers     f/var/www/html/software/conda/envs/higlass/lib/python3.12/site-packages/dask/tests/test_optimization.py_subgraph_callables_eqr      sl    T
d5k! 	6KK5<<'	6ELL 11	6 TXX(599"55	    c                :    | j                  t        dt               y)a  Ignore name when comparing instances of :class:`SubgraphCallable`.

    They have UUID-generated names which prevents instances generated by the
    test from comparing equal to reference values. Instead, compare the
    embedded graph using ``tokenize``.
    __eq__N)setattrr	   r   )monkeypatchs    r   compare_subgraph_callablesr$   #   s     ((4JKr   c                    | dz  S )N    xs    r   doubler*   .   s    q5Lr   c                    dt         dft         dft        ddfdt        d      \  } }| dt         dft        ddfdk(  sJ |g dgdgdk(  sJ t        d      t        dg      k(  sJ t        ddg      d	   k(  sJ t        dgdgg      t        ddg      k(  sJ t        j                  t
        fd
       y )N   r)   y
   )r)   r-   zoutr0   )r)   r-   r0   r/   r   c                     t         d      S )Nbadkey)r
   ds   r   <lambda>ztest_cull.<locals>.<lambda><   s    DH$5 r   )r   r   r
   pytestraisesKeyError)culleddependenciesr4   s     @r   	test_cullr;   2   s    sCjSz3R.IA5>FL1C:sCnEEEE3%>>>>5>T!eW----E3< #q(((UGcU#$Q(====
MM(56r   c                 j    t        | i |}|j                  d      dur|S t        | i |}||k(  sJ |S )z9Run both ``fuse`` and ``fuse_linear`` and compare resultsrename_keysF)r   getr   )argskwargsrv1rv2s       r   fuse2rC   ?   sG    
t
&v
&Czz- -



C#::Jr   c           	     F    | | D ci c]  }|t        | |       c}fS c c}w r   r   )r   ks     r   	with_depsrF   I   s(    c:$S!,,::::s   c                 :   t         } t        dft        dft        dft        ddfddd} | |d	
      t        t        t        t        t        ddffffddd      k(  sJ  | |d
      t        t        t        t        t        ddffffdddd      k(  sJ t        dft        dft        dft        dft        ddfddd} | |d	
      t        t        dft        t        dfft        t        ddffddd      k(  sJ  | |d
      t        t        dft        t        dfft        t        ddffddddd      k(  sJ t        dft        dft        dft        dft        dft        ddft        dft        dfddd
} | |d	
      t        t        t        t        dffft        dft        t        ddfft        dft        dfd      k(  sJ  | |d
      t        t        t        t        dffft        dft        t        ddfft        dft        dfddddd	      k(  sJ t        dft        dft        dft        dft        dfdd} | |d	
      t        t        dft        dft        t        dfft        dfd      k(  sJ  | |d
      t        t        d ft        d ft        t        d fft        dfd!d d"      k(  sJ dt        dft        ddfd#} | |d	
      t        t        dft        ddfd$      k(  sJ  | |d
      t        t        dft        d%d%fd%d&      k(  sJ y )'Nr)   r-   r/   abr,   r&   wr)   r-   r/   rH   rI   Fr=   )rK   rH   rI   Tz-y-x-w)rM   rH   rI   rK   )NEWrK   r)   r-   r/   rH   rI   )rN   rK   r-   rH   rI   z-yx-w)rN   rP   rO   rH   rI   rK   r-   rK   cr4   )
vurK   r)   r-   r/   rH   rI   rQ   r4   )rS   rR   r-   rH   rI   c-ad-bx-w-u)	rV   rR   rO   rT   rU   rH   rI   rS   r-   r   )rH   rI   rQ   r4   r)   r-   )rH   rI   r4   r)   y-xc-d)rH   rI   rX   rW   r4   r)   rH   rI   rQ   rI   rQ   a-br[   rQ   rI   )rC   r   r   rF   )r   r4   s     r   	test_fuser]   M   s   D3Z3Z3Z3_	A u%S3c3012C*    t$	cC#sC#9:;		
)    Sz3Z3Z3Z3_	A u%:Sz"S#'	
*    t$	<#u&#sC)	

) 
 
 
 3Z3Z3Z3Z3Z3_3Z3Z	A u%c3Z()sS#'qq	
*    t$	C#u./u#ue,-88
	
)    3Z3Z3Z3Z3Z	A u%CjSzsCj0AaQ*    t$	uu#u&8	
	) 	 	 	 sCjS#7Au%Ahc3_-*    t$	aUE2?)   r   c            
     
   t         } dt        dft        dfd}dg} | ||d      t        t        dft        dfd      k(  sJ  | ||d      t        t        dft        d	fd	d
      k(  sJ t        dft        dft        dft        ddfddd}ddg} | ||d      t        t        dft        t        dfft        ddfddd      k(  sJ  | ||d      t        t        dft        t        dfft        ddfdddd      k(  sJ y )Nr,   rH   rI   rY   FrL   rZ   Tr[   r\   r)   r-   r/   r&   rJ   )rK   r)   r/   rH   rI   rW   )rK   rW   r/   rH   rI   r)   )rC   r   rF   r   )r   r4   keyss      r   test_fuse_keysr`      sT   DsCjSz2A5D4U+yAhc3Z(0    4T*iaU|%8/   
 3Z3Z3Z3_	A :D4U+yCjc3Z0S#QUVW0    4T*iu#s$sC	
	/ 	 	 	r   c                     dfd} d| dft         ddft        dfd}t               dhdhdhd}t        |ddg|	      d
   }d
dlm}  ||d      dkD  sJ y )NFc                "    rt         d| dz   S )NTr,   )RuntimeError)r)   already_calleds    r   inc_only_oncezDtest_donot_substitute_same_key_multiple_times.<locals>.inc_only_once   s    1ur   *   ABC)rg   rh   ri   Drj   )r_   r:   r   )r>   r,   )r   r   r   r   	dask.corer>   )re   r   r:   	fused_dskr>   rd   s        @r   -test_donot_substitute_same_key_multiple_timesrm      s    N S!3_3Z	C& cU#cUCL3Z! 		I
 y#"""r   c            	        dt         dft         dft        ddfd} t        |       dt         dft         dft        ddfdk(  sJ t        | g d      dt         dft         t         dfft        dt         t         dfffdk(  sJ dt         dft        ddfd	} t        |       dt         dft        ddfd	k(  sJ t        | d
      dt         dft        dt         dffd	k(  sJ t        | dd      dt         dft        dt         dffd	k(  sJ dddg dt        t        dfdfd} t        | d      dddg dt        t        g dfdfdk(  sJ t        | dd      dddg dt        t        dfdfdk(  sJ y )Nr,   rH   rI   rQ   rH   rI   rQ   r4   rY   r)   r-   )r)   r-   r/   )r_   F)r_   inline_constantsr4   rH   rI   rQ   r4   e)r,   r,   r,   )rp   )r,   rI   rQ   )r   r   r   lenr3   s    r   test_inlinert     s   sCjSzc3HA!9asAhc3ZsAsmTTTT!_%1XC8_1sS!Ho&	*    sCjS#7A!9asAhc1c]CCCC!#aQa?Q"RRRR!#63Z3c
#;    c/sCjRU@VWA!S>C#Q'    !S51C:q!6   r   c            
         d\  } }}}dt         ||f|t        | f|t        |f| d|di}t        |g t        h      }dt         t        | f|f|t        |f| d|di}||k(  sJ y Nxyidr0   r,   fast_functions)r   r   r*   r   )r)   r-   ir4   r   resultexpecteds          r   test_inline_functionsr}   3  sz    JAq!Q31+q3(A{Aq!Q
GCc2se<Fc1Xq)1vqk1aAFHXr   c                     ddt        t        d      dft        dfd} t        | g t        h      }|d   t        | d   fk(  sJ d|vsJ y )Nr,   r&   r)   rH   )r)   r-   rH   rI   rx   rI   )r   r   r   r   r   r{   s     r   (test_inline_ignores_curries_and_partialsr   <  sW    a# 6c3Z
HCc2se<F#;3C/)))fr   c                      G d d      }  |        }dt         df|dft         dfd}t        |g t         h      }|d   ||d   fk(  sJ d|vsJ y )	Nc                      e Zd Zd Zd Zy)?test_inline_functions_non_hashable.<locals>.NonHashableCallablec                    |dz   S )Nr,   r'   )r   rH   s     r   __call__zHtest_inline_functions_non_hashable.<locals>.NonHashableCallable.__call__F  s    q5Lr   c                    t        d      )NzNot hashable)	TypeError)r   s    r   __hash__zHtest_inline_functions_non_hashable.<locals>.NonHashableCallable.__hash__I  s    N++r   N)__name__
__module____qualname__r   r   r'   r   r   NonHashableCallabler   E  s    		,r   r   r,   rH   rI   rQ   ro   rx   r   r   )r   nohashr   r{   s       r   "test_inline_functions_non_hashabler   D  si    , , !"Fc
&#c3Z
HCc2se<F#;63s8,,,,fr   c                 N    t         dfdd} t        | g t         h      }|| k(  sJ y )Nr-   r,   r)   r-   rx   r   r   s     r   /test_inline_doesnt_shrink_fast_functions_at_topr   U  s,    c

#Cc2se<FS==r   c            
         d\  } }}}dt         ||gf|t        | f|t        |f| d|di}dt         t        | f|gf|t        |f| d|di}t        |g t        h      }||k(  sJ y rv   )sumr   r*   r   )r)   r-   rz   r4   r   r|   r{   s          r   test_inline_traverses_listsr   [  s~    JAq!Q3A-S!Ha&!aAq
ICsAh]+QQ1aHHc2se<FXr   c                     t         dft        dfd} t        | g t         g      dt        t         dffik(  sJ t        | dgt         g      t        dft         dfdk(  sJ y )Nr,   r)   r   r-   )r-   r)   )r   r*   r   )r   s    r   *test_inline_functions_protects_output_keysr   c  sd    a}
-CCcU+fsAh5G/HHHHC#.SRSH2UUUUr   c                 F   d } d }t        | df      | hk(  sJ t        | |dff      | |hk(  sJ t        | |dfgf      | |hk(  sJ t        | |dfgggf      | |hk(  sJ t        d      t               k(  sJ t        |       t               k(  sJ t        | f      | hk(  sJ y )Nc                    | S r   r'   r(   s    r   r5   z#test_functions_of.<locals>.<lambda>j      ! r   c                    | S r   r'   r(   s    r   r5   z#test_functions_of.<locals>.<lambda>k  r   r   r,   )r   r   rH   rI   s     r   test_functions_ofr   i  s    AAAA3&&&QF$A...aVH&1a&0001vhZL)*q!f444?ce###?ce###!$$$r   c                 r    dddg dt         t        dfdfd} t        | ddg      \  }}t        |dh|       y )	Nr,   rH   rI   rY   r4   rq   rr   r:   )r   rs   r
   r   )r4   d2r:   s      r   test_inline_cull_dependenciesr   u  sA    c/sCjRU@VWAASz*B
2u<0r   c                 >   d } d| df| ddf| ddfd}t        |dd	      t        |      k(  sJ t        |dd
	      t        |      k(  sJ t        |dd	      t        d| | df| ddffd      k(  sJ t        |dd
	      t        d| | df| ddffdd      k(  sJ d| df| ddf| dddf| dddfd}t        |dd	      t        |      k(  sJ t        |dd
	      t        |      k(  sJ t        |dd	      t        d| | df| ddf| dddffd      k(  sJ t        |dd
	      t        d| | df| ddf| dddffdd      k(  sJ d| df| df| dddfd}t        |dd	      t        |      k(  sJ t        |dd
	      t        |      k(  sJ t        |dd	      t        d| d| df| dffd      k(  sJ t        |dd
	      t        d| d| df| dffdd      k(  sJ d| df| df| ddf| df| df| ddfd}t        |dd	      t        |      k(  sJ t        |dd
	      t        |      k(  sJ t        |dd	      t        d| | df| dff| | df| dffd      k(  sJ t        |dd
	      t        d| | df| dff| | df| dffddd      k(  sJ d| df| df| df| df| ddf| ddf| ddfd}t        |dd	      t        |      k(  sJ t        |dd
	      t        |      k(  sJ t        d| | df| dff| | df| dff| ddfd       }t        |dd	      |k(  sJ t        |dd	      |k(  sJ t        d| | df| dff| | df| dff| ddfd!d"d#      }t        |dd
	      |k(  sJ t        |dd
	      |k(  sJ t        |dd	      t        d| | | df| dff| | df| dfffd$      k(  sJ t        |dd
	      t        d| | | df| dff| | df| dfffd%d&      k(  sJ i ddd| dfd| dfd| dfd| dfd'| dfd(| dfd)| dfd*| dfd| ddfd| ddfd+| d'd(fd,| d)d*fd| ddfd| d+d,fd-| ddf}t        |dd	      t        |      k(  sJ t        |dd
	      t        |      k(  sJ t        d| | df| dff| | df| dff| | df| dff| | df| dff| ddf| d+d,f| ddfd.      }t        |dd	      |k(  sJ t        |dd	      |k(  sJ t        d| | df| dff| | df| dff| | df| dff| | df| dff| ddf| d+d,f| ddfd!d"d/d0d1      }t        |dd
	      |k(  sJ t        |dd
	      |k(  sJ t        d| | | df| dff| | df| dfff| | | df| dff| | df| dfff| ddfd2      }t        |dd	      |k(  sJ t        |d3d	      |k(  sJ t        d| | | df| dff| | df| dfff| | | df| dff| | df| dfff| ddfd4d5d6      }t        |dd
	      |k(  sJ t        |d3d
	      |k(  sJ t        |d7d	      t        d| | | | df| dff| | df| dfff| | | df| dff| | df| dffffd8      k(  sJ t        |d7d
	      t        d| | | | df| dff| | df| dfff| | | df| dff| | df| dffffd9d:      k(  sJ i ddd| dfd| dfd| dfd| dfd'| dfd(| dfd)| dfd*| dfd;| dfd<| dfd=| dfd>| dfd?| dfd@| dfdA| dfdB| df| ddf| ddf| d'd(f| d)d*f| d;d<f| d=d>f| d?d@f| dAdBf| ddf| d+d,f| dCdDf| dEdFf| ddf| dGdHf| dIdJfdK}t        |dd	      t        |      k(  sJ t        |dd
	      t        |      k(  sJ t        i ddd| | df| dffd| | df| dffd+| | df| dffd,| | df| dffdC| | df| dffdD| | df| dffdE| | df| dffdF| | df| dffd| ddfd| d+d,fdG| dCdDfdH| dEdFfdI| ddfdJ| dGdHfdL| dIdJf      }t        |dd	      |k(  sJ t        |dd	      |k(  sJ t        i ddd!| | df| dffd"| | df| dffd/| | df| dffd0| | df| dffdM| | df| dffdN| | df| dffdO| | df| dffdP| | df| dffd| ddfd| d+d,fdG| dCdDfdH| dEdFfdI| ddfdJ| dGdHfdL| dIdJfdd!d"d/d0dMdNdOdPdQ      }t        |dd
	      |k(  sJ t        |dd
	      |k(  sJ t        d| | | df| dff| | df| d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| | | df| dff| | df| dfff| ddf| dGdHf| dIdJfdR      }t        |dd	      |k(  sJ t        |d3d	      |k(  sJ t        d| | | df| dff| | df| d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| | | df| dff| | df| dfff| ddf| dGdHf| dIdJfd4d5dSdTdU      }t        |dd
	      |k(  sJ t        |d3d
	      |k(  sJ t        d| | | | 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| dIdJfdV      }t        |d7d	      |k(  sJ t        |dWd	      |k(  sJ t        d| | | | 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| dIdJfdXdYdZ      }t        |d7d
	      |k(  sJ t        |dWd
	      |k(  sJ t        |d[d	      t        d| | | | | 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d\      k(  sJ t        |d[d
	      t        d| | | | | 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d]d^      k(  sJ d| dfd_}t        |dd	      t        d`| dfi      k(  sJ t        |dd
	      t        | dfdadb      k(  sJ d| df| d`f| dfdc}t        |dd	      t        dd| | | dfffi      k(  sJ t        |dd
	      t        | | | dfffdedf      k(  sJ d| df| dd`f| ddfdc}t        |dd	      t        d| d| d| dfffd$      k(  sJ t        |dd
	      t        d| d| d| dfffdgdh      k(  sJ d| df| df| df| df| df| dIdfdi}t        d| df| | | | dffff| dIdfdj      }t        |dd	      |k(  sJ t        |dd	      |k(  sJ t        d| df| | | | dffff| dIdfdkdl      }t        |dd
	      |k(  sJ t        |dd
	      |k(  sJ t        |dd	      t        d| | | | | dffff| dffd\      k(  sJ t        |dd
	      t        d| | | | | dffff| dffdmdn      k(  sJ d| df| df| ddf| ddf| ddf| ddIdfdi}t        d| df| d| d| d| dffff| ddIdfdj      }t        |dd	      |k(  sJ t        |dd	      |k(  sJ t        d| df| d| d| d| dffff| ddIdfdkdl      }t        |dd
	      |k(  sJ t        |dd
	      |k(  sJ t        |dd	      t        d| d| d| d| d| dffff| dffd\      k(  sJ t        |dd
	      t        d| d| d| d| d| dffff| dffdmdn      k(  sJ d| df| df| df| df| df| df| df| df| d+f| dddGf| d-f| dLfdo}t        |dd	      t        d| | | dfff| | | dfff| | | dfff| | | dddGfffdp      k(  sJ t        |dd
	      t        d| | | dfff| | | dfff| | | dfff| | | dddGfffdqdrdsdtdu	      k(  sJ d| df| d`f| d`df| ddf| d-f| dddLfdv}t        |dd	      t        | df| d`| d`ff| dd| | ddfffdw      k(  sJ t        |dd
	      t        | df| d`| d`ff| dd| | ddfffdadxdtdy      k(  sJ y )zNc                     | S r   r'   r?   s    r   fz,test_fuse_reductions_single_input.<locals>.f}      r   r,   rH   b1b2)rH   r   r   rQ   gffffff?F	ave_widthr=   Tr&   )rH   rQ   b1-b2-c)rH   r   rQ   b3)rH   r   r   r   rQ   333333@   
b1-b2-b3-c)rH   r   rQ   rQ   d1r   )rH   r   r   rQ   r   r   rr   )rH   rQ   rr   d1-d2-e)rH   r   r   rQ   rr   b4c1c2)rH   r   r   r   r   r   r   r4   )rH   r   r   r4   b1-b2-c1b3-b4-c2)rH   r   r   r4   r   r   )rH   r4   b1-b2-b3-b4-c1-c2-d)rH   r   r4   b5b6b7b8c3c4rr   )rH   r   r   r   r   r   r   rr   b5-b6-c3b7-b8-c4)rH   r   r   r   r   r   r   rr   r   r   r   r   )rH   r   r   rr   gffffff@b1-b2-b3-b4-c1-c2-d1b5-b6-b7-b8-c3-c4-d2)rH   r   r   rr   r   r   g@)rH   rr   +b1-b2-b3-b4-b5-b6-b7-b8-c1-c2-c3-c4-d1-d2-e)rH   r   rr   b9b10b11b12b13b14b15b16c5c6c7c8d3d4e1e2)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   z	b10-b9-c5z
b11-b12-c6z
b13-b14-c7z
b15-b16-c8)r   r   r   r   r   r   r   )rH   r   r   r   r   r   r   r   b10-b11-b12-b9-c5-c6-d3b13-b14-b15-b16-c7-c8-d4)rH   r   r   r   r   r   r   r   r   r   r   r   )rH   r   r   r   g@,b1-b2-b3-b4-b5-b6-b7-b8-c1-c2-c3-c4-d1-d2-e13b10-b11-b12-b13-b14-b15-b16-b9-c5-c6-c7-c8-d3-d4-e2)rH   r   r   r   r   r   g      @)rH   r   bb1-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-f)rH   r   r   r   rI   r[   )r[   rI   ro   r4   a-b-c-d)r   r4   b-c-d)rH   r   r4   )rH   r   r   r   r   r   r   )rH   r   r   r   b1-c1-d1-e1)rH   r   r   r   r   b1-b2-c1-d1-e1-f)rH   r   r   )rH   r   r   r   r   r   r   r   r   r   rr   r   g)rH   r   r   r   r   b1-c1-d1b2-c2-d2b3-c3-d3e-f-g)	rH   r   r   r   r   r   r   r   r   )rH   rI   rQ   r4   rr   r   r   )rI   r4   r   rX   )r[   rX   r   rI   r4   r   r   rF   r   r4   r|   s      r   !test_fuse_reductions_single_inputr   |  s    3x3}AtT?KASe4	!DDDSd3y|CCCQE2iq1c(QSM237    QD1YQC1c3-8yI6   
 #h#sm#sC tT"	A Se4	!DDDSd3y|CCCQE2iq1c(QSMAsC3EFG7    QD1Yq#hC3S7IJ	
6    3x3xq#tT6JKASe4	!DDDSd3y|CCCQE2iq#3x!S237    QD1YQaX3x8yI6   
 #h#ht_#h#ht_	A Se4	!DDDSd3y|CCCQE2iq1c(QH-QC1c(4KL7    QD1YAs8aX.As8aX.	
6    #h#h#h#h$o$ot_		A Se4	!DDDSd3y|CCCq#hC)q#hC)T4		
H QE2h>>>Se4@@@QHq#h/QHq#h/T4	
	H QD1X===Sd3x???QE2iq1q#hC1A3x!S3JKL7    QD1YQHq#h'QHq#h'$
 '	

6 
 
 
	Q	q#h	 	q#h	 	q#h		
 	q#h	 	q#h	 	q#h	 	q#h	 	q#h	 	q$o	 	q$o	 	q$o	 	q$o	 	q$o	 	q$o	  	at_!	A$ Se4	!DDDSd3y|CCCq#hC)q#hC)q#hC)q#hC)dD/dD/T4		
H QE2h>>>Se4@@@QHq#h/QHq#h/QHq#h/QHq#h/dD/dD/T4	
H  QD1X===Sd3x???q1c(QH-As8aX/FGq1c(QH-As8aX/FGT4		
H QE2h>>>Se4@@@QHq#h'QHq#h'% QHq#h'QHq#h'%
 T4((	
H$ QD1X===Sd3x???Se4	QC1c(+a!SAs8-DEQC1c(+a!SAs8-DE	
	9 	 	 	 Sd3yQC1c(+a!SAs8-DEQC1c(+a!SAs8-DE<
 ?	

8 
 
 
!	Q!	q#h!	 	q#h!	 	q#h	!	
 	q#h!	 	q#h!	 	q#h!	 	q#h!	 	q#h!	 	q#h!	 	3x!	 	3x!	 	3x!	 	3x!	 	3x!	  	3x!!	" 	3x#!	$ $o$o$o$o$%%%$o$o$o$o$o$ot_A!	AD Se4	!DDDSd3y|CCC	
	
1q#hC)	
 1q#hC)	
 1q#hC)		

 1q#hC)	
 1q#hC)	
 1q#hC)	
 1q#hC)	
 1q#hC)	
 1dD/	
 1dD/	
 1dD/	
 1dD/	
 1dD/	
 1dD/	
  !T4!	
H( QE2h>>>Se4@@@	
	
QHq#h/	
 QHq#h/	
 QHq#h/		

 QHq#h/	
 !aX3x0	
 1q#hC1	
 1q#hC1	
 1q#hC1	
 1dD/	
 1dD/	
 1dD/	
 1dD/	
 1dD/	
 1dD/	
  !T4!	
" *#	
$ 1	
H8 QD1X===Sd3x???q1c(QH-As8aX/FGq1c(QH-As8aX/FGq1c(QH-As8aX/FGq1c(QH-As8aX/FGdD/dD/T4		
H QE2h>>>Se4@@@QHq#h'QHq#h'% QHq#h'QHq#h'% QHq#h'QHq#h'( QHq#h'QHq#h')
 dD/dD/T4((+,9	
H@ QD1X===Sd3x???QC1c(+a!SAs8-DEQC1c(+a!SAs8-DE QC1c(+a!SAs8-DEQC1c(+a!SAs8-DE
 T4	
H  Se4@@@Se4@@@QC1c(+a!SAs8-DEQC1c(+a!SAs8-DE= QC1c(+a!SAs8-DEQC1c(+a!SAs8-DED
 T4@G	
H$ Sd3x???Sd3x???Se4	QHq#h/!aX3x1HIQHq#h/!aX3x1HI QHq#h/!aX3x1HIQHq#h/!aX3x1HI	
9   $ Sd3yQHq#h/!aX3x1HIQHq#h/!aX3x1HI QHq#h/!aX3x1HIQHq#h/!aX3x1HIs v	
8   ( q#hAQE2iq!f6NNNNQD1YAU#6    q#haXQH=AQE2iq1qRSf+FV@W6XXXXQD1YQF$956    q#hac]!S#GAQE2iq#3C1237    QD1Y1cAsQH#56WE6   
 #h#h$i$i$it_	A 3xAAs8}+='>at_UH QE2h>>>Se4@@@c(A3x=12T4	
H QD1X===Sd3x???QE2iq1q1q#h-01As8<=7    QD1Y!"QQCM(:$;aX F#	
6    #h#h#tn#tn#tndD!	A c(cAsQaX$678S$%		
H QE2h>>>Se4@@@c(sQaq#h-?$@AS$%	
H QD1X===Sd3x???QE2iq#3C!S1c(1C(DE3xPQ7    QD1YC!S1cAs8"456C	! $		
6    #h#h#h$i$i$i$i$i$itT"XX	A QE2iq1c(m$q1c(m$q1c(m$a!T4./0	
7    QD1YQCM*QCM*QCM*!atT234
	
6    XXc]XXc]	A QE2i!fAsQH-Qa!S]4KL7    QD1Yq6sQH%q1c(m,	
	6 	 	 	r   c                 H   d } d| df| df| dt        ddd       t        ddd       ffd| | d	| d
gfff| ddf| dt        ddd       t        ddd       ff| df| df| dt        ddd       t        ddd       ff| ddf| dfd}h d}t        ||dd      }|t        |d         k(  sJ y )Nc                     | S r   r'   r   s    r   r   ztest_fuse_stressed.<locals>.f  r   r   r,   )cholesky-26a6b670a8aabb7e2f8936db7ccb6a88r   r   /cholesky-upper-26a6b670a8aabb7e2f8936db7ccb6a88r   r,   /array-original-27b9f9d257a80fa6adae06a98faf71ebr   r.   r   r   r,   &array-27b9f9d257a80fa6adae06a98faf71ebr,   r,   z0cholesky-lt-dot-26a6b670a8aabb7e2f8936db7ccb6a88r,   r   r,   r   r   r,   r      r   r,   r,   )r.   r.   r   r   r,   r   r   r   )r   r   r   r   r   r   r   r,   r   r   r   r   r   r,   r,   r   r   r   r   >   r   r   r   r   r&   T)r_   r   r=   )slicer   rF   )r   r4   r_   rvs       r   test_fuse_stressedr     s?    <=?D

 E>

 =1b$q"d!34;

D
 @UVW>
 ?EK
 =1b$r2t!45;
 ?D
 ?@]=2r4 %B"56;
 ?<D
 <>
k9	AtD 
adaT	:B2a5!!!!r   c                    d } dd| ddf| dfd}t        |dd	      t        d
| | ddffi      k(  sJ t        |dd	      t        | | ddffdd      k(  sJ t        |dd	      t        dd| | ddffd      k(  sJ t        |dd	      t        dd| | ddffdd      k(  sJ dd| df| ddf| df| dddfd}t        |      }t        |dd	      |k(  sJ t        |dd	      |k(  sJ t        |dd	      |k(  sJ t        |dd	      |k(  sJ t        |dd	      t        dd| | df| ddf| dffd      k(  sJ t        |dd	      t        dd| | df| ddf| dffdd      k(  sJ dd| df| ddf| df| ddf| ddfd}t        |dd	      t        |      k(  sJ t        |dd	      t        |      k(  sJ t        |dd	      t        dd| ddf| | dfdf| d| dffd      k(  sJ t        |dd	      t        dd| ddf| | dfdf| d| dffddd      k(  sJ dd| df| ddf| df| ddf| ddf| ddfd }t        |dd	      t        |      k(  sJ t        |dd	      t        |      k(  sJ t        |dd	      t        dd| ddf| | | dfdf| d| dfffd!      k(  sJ t        |dd	      t        dd| ddf| | | dfdf| d| dfffd"d#      k(  sJ y )$Nc                     | S r   r'   r   s    r   r   z.test_fuse_reductions_multiple_input.<locals>.f  r   r   r,   r&   a1a2rI   )r   r   rI   rQ   Fr   rQ   T	a1-a2-b-c)r   rQ   )r   r   rQ   b-c)r   r   r   rQ   r   r   r   )r   r   r   r   r   rQ   r   r   r   )r   r   r   rQ   )r   r   r   r   r   r   r   )r   r   r   r   r   b1-c1b3-c2)r   r   r   r   r  r   r   r   r   )r   r   r   r   r   r   r   r4   )r   r   r   r4   b1-b3-c1-c2-d)r   r   r   r  r4   r   r   s      r   #test_fuse_reductions_multiple_inputr    se    D$q#h?AQE2iq1aQR)n@U6VVVVQD1Y1a)n;76    QE2iQdO 457    QD1Y1q$o"6UC6   
 $i$o$itT"	A |HQE2h>>>Se4@@@QD1X===Sd3x???QE2iQI4D	 JK7    QD1Yq$i!T41d)D		
6    $i$o$i$o$o	A QE2ilBBBQD1Yq\AAAQE2idD/q$i&dQI&	
7    QD1YdD/!TD)4y)	

6 
 
 
 $i$o$i$o$ot_		A QE2ilBBBQD1Yq\AAA QE2idD/a!TD)AtaY+?@		
7    QD1YdD/!aY!54!T7KL 	
6   r   c                    | |z   |z   S r   r'   rY   s      r   func_with_kwargsr    s    q519r   c                    g d} t         t        ddgft         t        dgt        dgddft         t        ddgt        dgdft        d	ft        d
dfd	ddt        dt
        | ffgt        t
        dft
        d	dgffd}t        |dddgd      }|j                  dk(  sJ t        |      dk(  sJ t        |dddgd      }||k(  sJ t        |dddgd      }||k7  sJ t        t        d d d g            sJ t        |      t        |      k7  sJ |j                         }|j                  ddd        |dd      t        t        |dg      d   dg      d   k(  sJ  |dd       |dd      k(  sJ t        j                  t        j                   |            }||k(  sJ t        |      t        |      k(  sJ  |dd       |dd      k(  sJ y )N)r,   r&   r   in1r&   in2)r,   r      )functionr   rQ   )r
  r   rH   rQ   r4   rI   r   )rH   rI   rQ   r4   rr   r   hr  testnamer   r,   )r  r  r   )r   r   r   r  r   r   r	   r  reprhashcopyupdater   r
   pickleloadsdumps)non_hashabler   r   f2f3dsk2s         r   test_SubgraphCallabler    s   L S5!*%G)WIAF	
 EN)WI>	
 3Z3_1cCsL&9:;C:c3Z01#C( 	cE5>?A66V7f	#sUEN	@B7N7	#sUEN	@B7N7 tdV45558tBx88:DKK!$%Q7htD3%03cU;A>>>>Q7a1g	fll1o	&B7N78tAwa8qAwr   c                 *   t        j                  d      } d| j                  d      i}t        |dd gd      }t        |dd gd      }||k(  sJ d| j                  d      dz   i}t        |dd gd      }||k(  sJ t        |dd gd      }||k7  sJ y )NnumpyrH   r.   r  r  r,   test2)r6   importorskiparanger	   )npdsk1f1r  r  r  f4s          r    test_SubgraphCallable_with_numpyr$    s    			W	%B 2D	$dV&	9B	$dV&	9B8O8 2"#D	$dV&	9B8O8	$dV'	:B8O8r   c                 f   ddt         ddfd} t        dft        dft         ddfd}t        | dddg      }t        |dddg      }||k7  sJ t        |      t        |      k7  sJ t	        |      t	        |      k7  sJ ddt         ddfd}t        |dddg      }|j
                  |j
                  k(  sJ ||k(  sJ t        |      t        |      k(  sJ t	        |      t	        |      k(  sJ t        |ddd	g|j
                  
      }||k7  sJ t        |      t        |      k7  sJ t	        |      t	        |      k7  sJ t        |dddg|j
                  
      }||k7  sJ t        |      t        |      k7  sJ t	        |      t	        |      k7  sJ t        | dddg|j
                  
      }||k(  sJ t        |      t        |      k(  sJ t	        |      t	        |      k7  sJ t        | dddgd
      }	t        | dddgd
      }
|	|
k7  sJ t        |	      t        |
      k7  sJ t	        |	      t	        |
      k7  sJ t        t               dddg d
      }t        t               dddg d
      }||k(  sJ t        |      t        |      k(  sJ t	        |      t	        |      k7  sJ y )Nr,   r&   r4   rr   rY   r   rH   rQ   r   r  firstsecondr   rI   n)r   r   r	   r  r   r  object)r!  r  r"  r  dsk1bf1br  r#  f5f6f7f8f9s                r   test_SubgraphCallable_eqr1    s   #sC1Dqc
#sCAD	$c3Z	0B	$c3Z	0B 8O88tBxB<8B<''' !3S/2E
5#Sz
2C88rww998tCy   B<8C=((( 
$c3Zbgg	>B8O88tBxB<8B<''' 
$c3Zbgg	>B8O88tBxB<8B<''' 
$c3Zbgg	>B8O88tBxB<8B<''' 
$c3Zg	>B	$c3Zh	?B8O88tBxB<8B<''' 
s3S"3	GB	s3S"3	GB8O88tBxB<8B<'''r   c                2   dt         dft         dft        ddft         dft         dft        ddft         dft         d	fd
	}t        |dd      }t        dt	        dt        dt         t         dffft         t         t        dt         t         dfffffddd      fd      }||k(  sJ t        |ddd      }t        dt	        dt        dt         t         dffft         t         t        dt         t         dfffffddd      fi      }||k(  sJ t        |dd      }t        t	        dt        dt         t         dffft        dt         t         dfffddd      fdt         t         dffd      }||k(  sJ t        |dd      }g }t        j                  d      D ]e  }|j                  t        dt         t         dffdt	        t        ddft         t         t        dt         t         dfffffdd|      f|z   d             g ||v sJ t        |ddgd      }g }t        j                  d      D ]f  }|j                  t        dt         t         dfft	        t        ddft        dt         t         dfffdd|      f|z   dt         t         dffd             h ||v sJ y )Nr,   x-1inc-1inc-2add-1inc-3inc-4add-2inc-5)	r3  r4  r5  r6  r7  r8  r9  r:  inc-6r;  Tfuse_subgraphsadd-inc-x-1)r3  r6  r;  r'   )r;  r>  F)r=  r=   )r3  r6  r9  )r>  r9  r;  )r3  r5  	inc-add-1)r6  r;  )r3  r5  r;  r?  )r6  r9  )r3  r5  r?  r9  r;  )r   r   r   rF   r	   	itertoolspermutationsappend)r$   r   ressolsolsr   s         r   test_fuse_subgraphsrF     s5   uwug&www(ww
C sGD
1C
"  "%usS%L.A!B"%c7S3.<Q-R'S!T
 
	
C  #::
sGDe
DC
  "%usS%L.A!B"%c7S3.<Q-R'S!T
 
	
C #::
sGD
1C
 ! "%usS%L.A!B"%wsGn0E!F
 
 #C>*	
C" #::
sGD
1CD(()9: 
!C<0((*-ug)>$'%(3#W~9N*O$P*" $"
" "		

0 $;;
sWg&t
<CD(()9: 
!C<0(*-ug)>*-wsGn8M)N $"	" 
" )!C>2	

, $;;r   c                   dt         ddft         ddft         ddft         ddft         ddfd}t        |dd	
      }t        t        dt         ddft         ddft         ddft         ddft         ddfddd      fdd      }||k(  sJ y )Nr,   r3  r6  r9  add-3add-4)r3  r6  r9  rH  rI  add-5rJ  Tr<  r'   add-x-1)rK  rJ  )r   r   rF   r	   )r$   r   rC  rD  s       r   3test_fuse_subgraphs_linear_chains_of_duplicate_depsrL    s    ue$w(w(w(w(C sGD
1C
 ! "%ue!4"%w!8"%w!8"%w!8"%w!8  	
C& #::r   c                     t        j                  d      } | j                  d      t        dfd}t	        |d      d   |k(  sJ y)za
    Some types should stay in the graph bare

    This helps with things like serialization
    r     r)   r   r-   r   N)r6   r  r  r   r   )r   r   s     r   test_dont_fuse_numpy_arraysrO    sC     
		W	%B		!C:
.CS>!###r   c                     t         j                  j                  ddi      5  dt        dfd} ddi}t	        | d|      | |fk(  sJ 	 d d d        y # 1 sw Y   y xY w)	Nzoptimization.fuse.activeFr,   rH   r   rI   )rH   r   )daskconfigr   r   r   )r4   r:   s     r   test_fuse_configrS    si    	4e<	= Ls
 V}As61l:KKKKL L Ls   %AAc            	         t         dft         dft         dft         dft         dft        ddfdd	d
} t        | d      \  }}|D ]  }t        |      dk  rJ  y )NXv-looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongXw-looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongXx-looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongXy-looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongXz-looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongrH   rI   r,   r&   )zXu-looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongrU  rV  rW  rX  rY  rH   rI   TrL      )r   r   r   rs   )r4   fuseddepskeys       r   test_fused_keys_max_lengthr^    s     fe

 fe

 fe

 fe

 fe

 e

 7	A< qd+KE4 3x#~~r   )r&   );
__future__r   r@  r  	functoolsr   r6   rQ  	dask.baser   rk   r   
dask.localr   dask.optimizationr	   r
   r   r   r   r   r   
dask.utilsr   r   dask.utils_testr   r   r   fixturer$   r*   r;   rC   rF   r]   r`   rm   rt   r}   r   r   r   r   r   r   r   r   r   r  r  r  r$  r1  rF  rL  rO  rS  r^  r'   r   r   <module>rg     s    "       &    / $ L L
7;sl F'#T F"V	%1R	jE"PhV,^&3(l|~B	$L!r   