
    biR                    6   d dl mZ d dlmZ d dlZd dlZd dlmZmZm	Z	m
Z
 d dlmZ d dlmZmZmZmZmZmZ d dlmZ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&dZ*d Z+d Z,d Z-d Z.d  Z/d! Z0d" Z1d# Z2d$ Z3d% Z4y)'    )annotations)partialN)AliasTaskTaskRefconvert_legacy_graphget_dependencies)cullfunctions_offusefuse_linearinlineinline_functions)addincc                    | dz  S )N    xs    W/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/dask/tests/test_optimization.pydoubler      s    q5L    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outr    )r   r   r    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dependenciesr$   s     @r   	test_cullr+      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   fuse2r3   &   sG    
t
&v
&Czz- -



C#::Jr   c           	     F    | | D ci c]  }|t        | |       c}fS c c}w Nr	   )dskks     r   	with_depsr8   0   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   r:   r;   Fr-   )r=   r:   r;   Tz-y-x-w)r?   r:   r;   r=   )NEWr=   r   r   r   r:   r;   )r@   r=   r   r:   r;   z-yx-w)r@   rB   rA   r:   r;   r=   r   r=   cr$   )
vur=   r   r   r   r:   r;   rC   r$   )rE   rD   r   r:   r;   c-ad-bx-w-u)	rH   rD   rA   rF   rG   r:   r;   rE   r   r   )r:   r;   rC   r$   r   r   )r:   r;   r$   r   y-xc-d)r:   r;   rJ   rI   r$   r   r:   r;   rC   r;   rC   a-brM   rC   r;   )r3   r   r   r8   )r   r$   s     r   	test_fuserO   4   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   r:   r;   rK   Fr>   rL   TrM   rN   r   r   r   r   r<   )r=   r   r   r:   r;   rI   )r=   rI   r   r:   r;   r   )r3   r   r8   r   )r   r$   keyss      r   test_fuse_keysrR      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)rY   rZ   r[   Dr\   )rQ   r*   r   r.   r   )r   r   setr   	dask.corer.   )rW   r6   r*   	fused_dskr.   rV   s        @r   -test_donot_substitute_same_key_multiple_timesra      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   r:   r;   rC   r:   r;   rC   r$   rK   r   r   )r   r   r   )rQ   F)rQ   inline_constantsr$   r:   r;   rC   r$   e)r   r   r   )rd   )r   r;   rC   )r   r   r   lenr#   s    r   test_inlinerh      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xyidr    r   fast_functions)r   r   r   r   )r   r   ir$   r6   resultexpecteds          r   test_inline_functionsrq     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   r:   )r   r   r:   r;   rl   r;   )r   r   r   r   r6   ro   s     r   (test_inline_ignores_curries_and_partialsrt   #  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   )selfr:   s     r   __call__zHtest_inline_functions_non_hashable.<locals>.NonHashableCallable.__call__-  s    q5Lr   c                    t        d      )NzNot hashable)	TypeError)ry   s    r   __hash__zHtest_inline_functions_non_hashable.<locals>.NonHashableCallable.__hash__0  s    N++r   N)__name__
__module____qualname__rz   r}   r   r   r   NonHashableCallablerw   ,  s    		,r   r   r   r:   r;   rC   rc   rl   r   r   )r   nohashr6   ro   s       r   "test_inline_functions_non_hashabler   +  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   rl   r   rs   s     r   /test_inline_doesnt_shrink_fast_functions_at_topr   <  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 rj   )sumr   r   r   )r   r   rn   r$   r6   rp   ro   s          r   test_inline_traverses_listsr   B  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   )r6   s    r   *test_inline_functions_protects_output_keysr   J  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 r5   r   r   s    r   r%   z#test_functions_of.<locals>.<lambda>Q      ! r   c                    | S r5   r   r   s    r   r%   z#test_functions_of.<locals>.<lambda>R  r   r   r   )r   r^   r:   r;   s     r   test_functions_ofr   P  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   r:   r;   rK   r$   re   rf   r*   )r   rg   r   r   )r$   d2r*   s      r   test_inline_cull_dependenciesr   \  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 r5   r   r/   s    r   fz,test_fuse_reductions_single_input.<locals>.fd      r   r   r:   b1b2)r:   r   r   rC   gffffff?F	ave_widthr-   Tr   )r:   rC   b1-b2-c)r:   r   rC   b3)r:   r   r   r   rC   333333@   
b1-b2-b3-c)r:   r   rC   rC   d1r   )r:   r   r   rC   r   r   rf   )r:   rC   rf   d1-d2-e)r:   r   r   rC   rf   b4c1c2)r:   r   r   r   r   r   r   r$   )r:   r   r   r$   b1-b2-c1b3-b4-c2)r:   r   r   r$   r   r   )r:   r$   b1-b2-b3-b4-c1-c2-d)r:   r   r$   b5b6b7b8c3c4rf   )r:   r   r   r   r   r   r   rf   b5-b6-c3b7-b8-c4)r:   r   r   r   r   r   r   rf   r   r   r   r   )r:   r   r   rf   gffffff@b1-b2-b3-b4-c1-c2-d1b5-b6-b7-b8-c3-c4-d2)r:   r   r   rf   r   r   g@)r:   rf   +b1-b2-b3-b4-b5-b6-b7-b8-c1-c2-c3-c4-d1-d2-e)r:   r   rf   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   )r:   r   r   r   r   r   r   r   b10-b11-b12-b9-c5-c6-d3b13-b14-b15-b16-c7-c8-d4)r:   r   r   r   r   r   r   r   r   r   r   r   )r:   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)r:   r   r   r   r   r   g      @)r:   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)r:   r   r   r   r;   rM   )rM   r;   rc   r$   a-b-c-d)r   r$   b-c-d)r:   r   r$   )r:   r   r   r   r   r   r   )r:   r   r   r   b1-c1-d1-e1)r:   r   r   r   r   b1-b2-c1-d1-e1-f)r:   r   r   )r:   r   r   r   r   r   r   r   r   r   rf   r   g)r:   r   r   r   r   b1-c1-d1b2-c2-d2b3-c3-d3e-f-g)	r:   r   r   r   r   r   r   r   r   )r:   r;   rC   r$   rf   r   r   )r;   r$   r   rJ   )rM   rJ   r   r;   r$   r   r   r8   r   r$   rp   s      r   !test_fuse_reductions_single_inputr   c  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 r5   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)rQ   r   r-   )slicer   r8   )r   r$   rQ   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 r5   r   r   s    r   r   z.test_fuse_reductions_multiple_input.<locals>.f  r   r   r   r   a1a2r;   )r   r   r;   rC   Fr   rC   T	a1-a2-b-c)r   rC   )r   r   rC   b-c)r   r   r   rC   r   r   r   )r   r   r   r   r   rC   r   r   r   )r   r   r   rC   )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   r$   )r   r   r   r$   b1-b3-c1-c2-d)r   r   r   r   r$   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 r5   r   rK   s      r   func_with_kwargsr   k  s    q519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
    numpy   r   r   r   r   N)r&   importorskiparanger   r   )npr6   s     r   test_dont_fuse_numpy_arraysr  o  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   r:   r   r;   )r:   r   )daskconfigr^   r   r   )r$   r*   s     r   test_fuse_configr  {  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-looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongr:   r;   r   r   )zXu-looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongr  r  r	  r
  r  r:   r;   Tr>      )r   r   r   rg   )r$   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   c                     	 dj                  |       S # t        $ r" dj                  t        t        |             cY S w xY w)N-)joinr|   mapstrr   s    r   funcr    s9    (xx~ (xxC''(s    (>>c                 $    dj                  |       S )N=)r  r   s    r   func2r    s    88D>r   c                 x    dj                  |       dz   dj                  d |j                         D              z   S )N+z//c              3  0   K   | ]  \  }}| d |   yw)r  Nr   ).0r7   rD   s      r   	<genexpr>zfunc3.<locals>.<genexpr>  s     +R41aqc1#J+Rs   )r  items)r/   r0   s     r   func3r     s/    88D>D 388+R6<<>+R#RRRr   c            	         dt         t        dt        t        d      d      dfi} t	        |       } |d   ddi      dk(  sJ y )Nfoobarr:   r;   rC   za=b-c)r  r   r  r   r   )r6   new_dsks     r   test_hybrid_legacy_newr%    sO     	d5%sS93?C #3'G75>3*%000r   c                    t         ddft        ddfd} ddlm}  || dg      \  }}t	        |      d	k(  sJ d|v sJ t        |      }|j                  d       |j                         }|d   |k(  sJ ||   rJ t        |      }t        |d   t              sJ |d   j                  dk(  sJ ||   j                  rJ  ||          d
k(  sJ t        dt         dd      t        ddfd}  || dg      \  }}t	        |      d	k(  sJ | |k(  sJ t         ddft        dt        t        d      d      d}  || dg      \  }}t	        |      d	k(  sJ | |k(  sJ y )Nr:   r;   r"  rC   )r"  r#  r   r   r#  r   za-b=c)r  r  dask.optimizationr   rg   r^   removepopr   
isinstancer   r  r*   r   r   )r6   r   r  
fused_depsrQ   fused_task_keyr$  s          r   test_fusion_legacy_hybridr.    s   c3uc"C '
 S5'*E:u:??E>>u:DKKXXZN<>))).)))"5)Ggene,,,5>&&&~&3333"7>"$/// E4c*uc"C S5'*E:u:??%<< c3E5'%.#6C S5'*E:u:??%<<r   c                 V   t         j                  j                  ddi      5  t        ddft        ddft        ddfd} dd	lm}  || d
g      \  }}t        |      dk(  sJ t        |      }|j                  d
       |j                         }|d
   |k(  sJ ||   rJ t        |      }t        |d
   t              sJ |d
   j                  d
k(  sJ ||   j                  rJ  ||          dk(  sJ t        dt        dd      }|t        ddft        ddfd}  || d
g      \  }}||t        t        ddfdfddk(  sJ t        dt        dd      }t        ddf|t        ddfd}  || d
g      \  }}||t        dt        ddffddk(  sJ t        dt        dd      t        dt        dd      t        ddfd}  || d
g      \  }}| |k(  sJ t        ddft        ddft        d
t        t!        d      t!        d            d}  || d
g      \  }}| |k(  sJ 	 d d d        y # 1 sw Y   y xY w)Nzoptimization.fuse.ave-widthr   r:   r;   r"  r   r"  r   )r1  r0  r#  r   r'  r#  za-b=a-bfoo-bar)r1  r2  r#  )r0  r2  r#  )r  r  r^   r  r  r(  r   rg   r)  r*  r   r+  r   r  r*   r   r   )r6   r   r  r,  rQ   r-  r$  ts           r   test_fusion_wide_legacy_hybridr4    s   	7;	< FsC(sC(:z2

 	+ !ug.z5zQ5zEU|~---n---&u-'%.%000u~!!U***>*7777&w~&(I555
 T3,sC(:z2

 !ug.zc3/<
 
 	
 
 T3,sC(:z2

 !ug.zzD#s+;<
 
 	
 
 ZsC8ZsC8:z2

 !ug.ze|| sC(sC(ugj&97:;NO

 !ug.ze||MF F Fs   G3HH(c                 
   ddl m}  t        ddft        dft        dfddd}t        |g t        g      } | |d	g       | |d	g      k(  sJ t        d
dft        ddfdd}t        |dht        f      }t        |      dk(  sJ |d   dk(  sJ  | |dg       | |dg      k(  sJ t        d
dft        dt        t        d      df      dd}t        |dht                     }||k(  sJ t        |dht        f      }||k(  sJ y )Nr   r]   rn   r$   r   r   1)r    rn   r$   r   r   r    r:   r;   r"  rC   r#  )r"  r#  bazr7  rl   r   )
r_   r.   r  r  r   r   rg   r   r   r^   )r.   r6   inlineds      r    test_do_not_inline_legacy_hybridr9  9  sR    c3S\S\C sB0Gw CeW$5555c3uc"C 	wG
 w<15>U"""sUGGeW 5555 c3E575>3"78C 	uG
 '>>	wG
 '>>r   )r   )5
__future__r   	functoolsr   r&   r  dask._task_specr   r   r   r   r_   r
   r(  r   r   r   r   r   r   dask.utils_testr   r   r   r+   r3   r8   rO   rR   ra   rh   rq   rt   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r   r%  r.  r4  r9  r   r   r   <module>r>     s    "    F F &  %
7;sl F'#T F"V	%1R	jE"PhV	$L!H(S1*ZGT,r   