
    Cd                    p   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(dZ1d  Z2d! Z3d" Z4d# Z5d$ Z6d% Z7d& Z8d' Z9dS ))    )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 oc| j        |j        k    oSt          | j                  t          |j                  k    o)t	          | j                  t	          |j                  k    S N)typeoutkeysetinkeysr   dsk)selfothers     <lib/python3.11/site-packages/dask/tests/test_optimization.py_subgraph_callables_eqr      sp    T

d5kk! 	6K5<'	6EL 1 11	6 TX(59"5"55	    c                H    |                      t          dt                     dS )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KKKK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
           d S )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$5 r   )r   r   r
   pytestraisesKeyError)culleddependenciesr4   s     @r   	test_cullr;   2   s   sCjSz3R.IIA5>>FL1C:sCnEEEEEE3%>>>>>>5>>T!eW------E3<  #q((((UGcU#$$Q(=(=====
M(555566666r   c                 x    t          | i |}|                    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   ?   sT    
t
&v
&
&Czz-  --




C#::::Jr   c                $       fd D             fS )Nc                2    i | ]}|t          |          S r'   r   ).0kr   s     r   
<dictcomp>zwith_deps.<locals>.<dictcomp>J   s&    :::$S!,,:::r   r'   r   s   `r   	with_depsrJ   I   s#    ::::c:::::r   c                 n   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 d S )'Nr)   r-   r/   abr,   r&   wr)   r-   r/   rL   rM   Fr=   )rO   rL   rM   Tz-y-x-w)rQ   rL   rM   rO   )NEWrO   r)   r-   r/   rL   rM   )rR   rO   r-   rL   rM   z-yx-w)rR   rT   rS   rL   rM   rO   r-   rO   cr4   )
vurO   r)   r-   r/   rL   rM   rU   r4   )rW   rV   r-   rL   rM   c-ad-bx-w-u)	rZ   rV   rS   rX   rY   rL   rM   rW   r-   r   )rL   rM   rU   r4   r)   r-   )rL   rM   r4   r)   y-xc-d)rL   rM   r\   r[   r4   r)   rL   rM   rU   rM   rU   a-br_   rU   rM   )rC   r   r   rJ   )r   r4   s     r   	test_fusera   M   s   D3Z3Z3Z3_	 	A 4u%%%S3c3012CC* *     4t$$$	cC#sC#9:;		
 	
) )     Sz3Z3Z3Z3_	 	A 4u%%%:Sz"S#'	
 	
* *     4t$$$	<#u&#sC)	
 	

) 
) 
 
 
 
 3Z3Z3Z3Z3Z3_3Z3Z	 	A 4u%%%c3Z()sS#'qq	
 	
* *     4t$$$	C#u./u#ue,-88
	
 
	
) )     3Z3Z3Z3Z3Z	 	A 4u%%%CjSzsCj0AaQQ* *     4t$$$	uu#u&8	
 	
	) 	) 	 	 	 	 sCjS#77A4u%%%Ahc3_--* *     4t$$$	aUE2??) )      r   c            
     r   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 d S )Nr,   rL   rM   r]   FrP   r^   Tr_   r`   r)   r-   r/   r&   rN   )rO   r)   r/   rL   rM   r[   )rO   r[   r/   rL   rM   r)   )rC   r   rJ   r   )r   r4   keyss      r   test_fuse_keysrd      s   DsCjSz22A5D44U+++yAhc3Z((0 0     44T***iaU|%88/ /    
 3Z3Z3Z3_	 	A :D44U+++yCjc3Z0S#QUVWW0 0     44T***iu#s$sC	
 	
	/ 	/ 	 	 	 	 	 	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 d S )Nr,   rL   rM   rU   rL   rM   rU   r4   r]   r)   r-   )r)   r-   r/   )rc   F)rc   inline_constantsr4   rL   rM   rU   r4   e)r,   r,   r,   )rg   )r,   rM   rU   )r   r   r   lenr3   s    r   test_inlinerk      s8   sCjSzc3HHA!99asAhc3ZsAsmTTTTTT!___%%1XC8_1sS!Ho&	* *     sCjS#77A!99asAhc1c]CCCCCC!#aQa?Q"R"RRRRR!#6663Z3c
#; ;     c///sCjRU@VWWA!S>>YYC#Q'      !S5111]]C:q!6 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 d S Nxyidr0   r,   fast_functions)r   r   r*   r   )r)   r-   ir4   r   resultexpecteds          r   test_inline_functionsrt   	  s    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 d S )Nr,   r&   r)   rL   )r)   r-   rL   rM   ro   rM   )r   r   r   r   r   rr   s     r   (test_inline_ignores_curries_and_partialsrw     sn    a# 6c3Z
H
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 d S )	Nc                      e Zd Zd Zd ZdS )?test_inline_functions_non_hashable.<locals>.NonHashableCallablec                    |dz   S )Nr,   r'   )r   rL   s     r   __call__zHtest_inline_functions_non_hashable.<locals>.NonHashableCallable.__call__  s    q5Lr   c                     t          d          )NzNot hashable)	TypeError)r   s    r   __hash__zHtest_inline_functions_non_hashable.<locals>.NonHashableCallable.__hash__  s    N+++r   N)__name__
__module____qualname__r|   r   r'   r   r   NonHashableCallablerz     s2        	 	 		, 	, 	, 	, 	,r   r   r,   rL   rM   rU   rf   ro   r   r   )r   nohashr   rr   s       r   "test_inline_functions_non_hashabler     s    , , , , , , , , ! ""Fc
&#c3Z
H
HCc2se<<<F#;63s8,,,,,fr   c                 ^    t           dfdd} t          | g t           h          }|| k    sJ d S )Nr-   r,   r)   r-   ro   r   rv   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 d S rm   )sumr   r*   r   )r)   r-   rq   r4   r   rs   rr   s          r   test_inline_traverses_listsr   1  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 d S )Nr,   r)   r   r-   )r-   r)   )r   r*   r   rI   s    r   *test_inline_functions_protects_output_keysr   9  s|    a}
-
-CCcU++fsAh5G/HHHHHC#..SRSH2U2UUUUUUUr   c                    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 d S )Nc                    | S r   r'   r(   s    r   r5   z#test_functions_of.<locals>.<lambda>@      ! r   c                    | S r   r'   r(   s    r   r5   z#test_functions_of.<locals>.<lambda>A  r   r   r,   )r   r   rL   rM   s     r   test_functions_ofr   ?  s    AAAA3&&&&QF$$A....aVH&&1a&00001vhZL)**q!f4444??cee####??cee####!$$$$$$r   c                     dddg dt           t          dfdfd} t          | ddg          \  }}t          |dh|           d S )	Nr,   rL   rM   r]   r4   rh   ri   r:   )r   rj   r
   r   )r4   d2r:   s      r   test_inline_cull_dependenciesr   K  sZ    c///sCjRU@VWWAASz**B
2u<00000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 d S )zNc                     | S r   r'   r?   s    r   fz,test_fuse_reductions_single_input.<locals>.fS      r   r,   rL   b1b2)rL   r   r   rU   gffffff?F	ave_widthr=   Tr&   )rL   rU   b1-b2-c)rL   r   rU   b3)rL   r   r   r   rU   333333@   
b1-b2-b3-c)rL   r   rU   rU   d1r   )rL   r   r   rU   r   r   ri   )rL   rU   ri   d1-d2-e)rL   r   r   rU   ri   b4c1c2)rL   r   r   r   r   r   r   r4   )rL   r   r   r4   b1-b2-c1b3-b4-c2)rL   r   r   r4   r   r   )rL   r4   b1-b2-b3-b4-c1-c2-d)rL   r   r4   b5b6b7b8c3c4ri   )rL   r   r   r   r   r   r   ri   b5-b6-c3b7-b8-c4)rL   r   r   r   r   r   r   ri   r   r   r   r   )rL   r   r   ri   gffffff@b1-b2-b3-b4-c1-c2-d1b5-b6-b7-b8-c3-c4-d2)rL   r   r   ri   r   r   g@)rL   ri   +b1-b2-b3-b4-b5-b6-b7-b8-c1-c2-c3-c4-d1-d2-e)rL   r   ri   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   )rL   r   r   r   r   r   r   r   b10-b11-b12-b9-c5-c6-d3b13-b14-b15-b16-c7-c8-d4)rL   r   r   r   r   r   r   r   r   r   r   r   )rL   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)rL   r   r   r   r   r   g      @)rL   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)rL   r   r   r   rM   r_   )r_   rM   rf   r4   a-b-c-d)r   r4   b-c-d)rL   r   r4   )rL   r   r   r   r   r   r   )rL   r   r   r   b1-c1-d1-e1)rL   r   r   r   r   b1-b2-c1-d1-e1-f)rL   r   r   )rL   r   r   r   r   r   r   r   r   r   ri   r   g)rL   r   r   r   r   b1-c1-d1b2-c2-d2b3-c3-d3e-f-g)	rL   r   r   r   r   r   r   r   r   )rL   rM   rU   r4   ri   r   r   )rM   r4   r   r\   )r_   r\   r   rM   r4   r   r   rJ   r   r4   rs   s      r   !test_fuse_reductions_single_inputr   R  s!      3x3}AtT?KKASe444	!DDDDSd333y||CCCCQE222iq1c(QSM2337 7     QD111YQC1c3-8yII6 6    
 #h#sm#sC tT"	 	A Se444	!DDDDSd333y||CCCCQE222iq1c(QSMAsC3EFGG7 7     QD111Yq#hC3S7IJ	
 	
6 6     3x3xq#tT6JKKASe444	!DDDDSd333y||CCCCQE222iq#3x!S2337 7     QD111YQaX3x8yII6 6    
 #h#ht_#h#ht_	 	A Se444	!DDDDSd333y||CCCCQE222iq1c(QH-QC1c(4KLL7 7     QD111YAs8aX.As8aX.	
 	
6 6     #h#h#h#h$o$ot_		 		A Se444	!DDDDSd333y||CCCCq#hC)q#hC)T4		
 	
 H QE222h>>>>Se444@@@@QHq#h/QHq#h/T4	
 	
	 	H QD111X====Sd333x????QE222iq1q#hC1A3x!S3JKLL7 7     QD111YQHq#h'QHq#h'$
 '	
 	

6 
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44	!DDDDSd333y||CCCCq#hC)q#hC)q#hC)q#hC)dD/dD/T4		
 		
 H QE222h>>>>Se444@@@@QHq#h/QHq#h/QHq#h/QHq#h/dD/dD/T4	
 	
 H  QD111X====Sd333x????q1c(QH-As8aX/FGq1c(QH-As8aX/FGT4		
 	
 H QE222h>>>>Se444@@@@QHq#h'QHq#h'% QHq#h'QHq#h'%
 T4((	
 	
 H$ QD111X====Sd333x????Se444	QC1c(+a!SAs8-DEQC1c(+a!SAs8-DE	
 	
	9 	9 	 	 	 	 Sd333yQC1c(+a!SAs8-DEQC1c(+a!SAs8-DE<
 ?	
 	

8 
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44	!DDDDSd333y||C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222h>>>>Se44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111X====Sd33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222h>>>>Se44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111X====Sd33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44@@@@Se44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333x????Sd333x????Se44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 9    $ Sd33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 8    ( q#hAQE222iq!f6N6NNNNNQD111YAU##6 6     q#haXQH==AQE222iq1qRSf+FV@W6X6XXXXXQD111YQF$9556 6     q#hac]!S#GGAQE222iq#3C12337 7     QD111Y1cAsQH#56WEE6 6    
 #h#h$i$i$it_	 	A 3xAAs8}+='>at_UU H QE222h>>>>Se444@@@@c(A3x=12T4	
 	
 H QD111X====Sd333x????QE222iq1q1q#h-01As8<==7 7     QD111Y!"QQCM(:$;aX F#	
 	
6 6     #h#h#tn#tn#tndD!	 	A c(cAsQaX$678S$%		
 	
 H QE222h>>>>Se444@@@@c(sQaq#h-?$@AS$%	
 	
 H QD111X====Sd333x????QE222iq#3C!S1c(1C(DE3xPQQ7 7     QD111YC!S1cAs8"456C	! $		
 		
6 6     #h#h#h$i$i$i$i$i$itT"XX	 	A QE222iq1c(m$q1c(m$q1c(m$a!T4./0	
 	
7 7     QD111YQCM*QCM*QCM*!atT234
	
 
	
6 6     XXc]XXc]	 	A QE222i!fAsQH-Qa!S]4KLL7 7     QD111Yq6sQH%q1c(m,	
 	
	6 	6 	 	 	 	 	 	r   c                    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 d S )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)rc   r   r=   )slicer   rJ   )r   r4   rc   rvs       r   test_fuse_stressedr     s|      <=?D

 E>

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

D
 @UVW>
 ?EK
 =1b$r2t!4!45;
 ?D
 ?@]=2r4  %B"5"56;
 ?<D
 <>
k9	 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 d S )$Nc                     | S r   r'   r   s    r   r   z.test_fuse_reductions_multiple_input.<locals>.f  r   r   r,   r&   a1a2rM   )r   r   rM   rU   Fr   rU   T	a1-a2-b-c)r   rU   )r   r   rU   b-c)r   r   r   rU   r   r   r   )r   r   r   r   r   rU   r   r   r   )r   r   r   rU   )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     s      D$q#h??AQE222iq1aQR)n@U6V6VVVVVQD111Y1a)n;776 6     QE222iQdO 4557 7     QD111Y1q$o"6UCC6 6    
 $i$o$itT"	 	A ||HQE222h>>>>Se444@@@@QD111X====Sd333x????QE222iQI4D	 JKK7 7     QD111Yq$i!T41d)D		
 	
6 6     $i$o$i$o$o	 	A QE222illBBBBQD111Yq\\AAAAQE222idD/q$i&dQI&	
 	
7 7     QD111YdD/!TD)4y)	
 	

6 
6 
 
 
 
 $i$o$i$o$ot_		 		A QE222illBBBBQD111Yq\\AAAA QE222idD/a!TD)AtaY+?@		
 	
7 7     QD111YdD/!aY!54!T7KL 	
 	
6 6      r   r&   c                    | |z   |z   S r   r'   r]   s      r   func_with_kwargsr   Z  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          }||k    sJ t          t          d d d g                    sJ t          |          t          |          k    s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 d S )N)r,   r&   r   in1r&   in2)r,   r      )functionr   rU   )r  r   rL   rU   r4   rM   r   )rL   rM   rU   r4   ri   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  ^  sq   99L S5!*%G)WIAFF	
 EN)WI>>	
 3Z3_1cCsL&9:;C:c3Z01# C( 	cE5>???A6V77f	#sUEN	@	@	@B7777	#sUEN	@	@	@B7777 tdV445555588tBxx88::DKK!$$%%%1Q77htD3%003cU;;A>>>>>1Q77aa1gg	fl1oo	&	&B777788tAww2a88qqAwwr   c                 `   t          j        d          } d|                     d          i}t          |dd gd          }t          |dd gd          }||k    sJ d|                     d          dz   i}t          |dd gd          }||k    sJ t          |dd gd          }||k    sJ d S )NnumpyrL   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&	9	9	9B	$dV&	9	9	9B8888 2"#D	$dV&	9	9	9B8888	$dV'	:	:	:B888888r   c                 *   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          }||k    sJ t          |ddd	g|j        
          }||k    sJ t          |dddg|j        
          }||k    sJ t          | dddg|j        
          }||k    sJ t	          |          t	          |          k    sJ t          | dddgd
          }t          | dddgd
          }||k    sJ d S )Nr,   r&   r4   ri   r]   r   rL   rU   r   r  firstsecond)r   r   r	   r  r  )	r  r  r  r  r  r  f5unnamed1unnamed2s	            r   test_SubgraphCallable_eqr"    sV   #sC11Dqc
#sCAAD	$c3Z	0	0B	$c3Z	0	0B8888 
$c3Zbg	>	>	>B8888 
$c3Zbg	>	>	>B8888 
$c3Zbg	>	>	>B888888tBxx  cC:GDDDHcC:HEEEHxr   c                   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 ]y}|                    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                     z||v sJ t          |ddgd          }g }t          j        d          D ]z}|                    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                     {||v sJ d S )Nr,   x-1inc-1inc-2add-1inc-3inc-4add-2inc-5)	r$  r%  r&  r'  r(  r)  r*  r+  inc-6r,  Tfuse_subgraphsadd-inc-x-1)r$  r'  r,  r'   )r,  r/  F)r.  r=   )r$  r'  r*  )r/  r*  r,  )r$  r&  	inc-add-1)r'  r,  )r$  r&  r,  r0  )r'  r*  )r$  r&  r0  r*  r,  )r   r   r   rJ   r	   	itertoolspermutationsappend)r$   r   ressolsolsr   s         r   test_fuse_subgraphsr7    s   uwug&www(ww
 
C sGD
1
1
1C
"  "%usS%L.A!B"%c7S3.<Q-R'S!T 
  
	
 	
 C  #::::
sGDe
D
D
DC
  "%usS%L.A!B"%c7S3.<Q-R'S!T 
  
	
 C #::::
sGD
1
1
1C
 ! "%usS%L.A!B"%wsGn0E!F 
  
 #C>*	
 	
 C" #::::
sGD
1
1
1CD()9:: 
 
!C<0((*-ug)>$'%(3#W~9N*O$P*"  $"
 
" "	  	
 	
 	
 	
. $;;;;
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 d S )Nr,   r$  r'  r*  add-3add-4)r$  r'  r*  r9  r:  add-5r;  Tr-  r'   add-x-1)r<  r;  )r   r   rJ   r	   )r$   r   r4  r5  s       r   3test_fuse_subgraphs_linear_chains_of_duplicate_depsr=  :  s    ue$w(w(w(w( C sGD
1
1
1C
 ! "%ue!4"%w!8"%w!8"%w!8"%w!8    	
 	
 C& #::::::r   c                     t          j        d          } |                     d          t          dfd}t	          |d          d         |k    sJ dS )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_arraysr@  [  sS     
	W	%	%B		!C:
.
.CS>>!######r   c                     t           j                            ddi          5  dt          dfd} ddi}t	          | d|          | |fk    sJ 	 d d d            d S # 1 swxY w Y   d S )	Nzoptimization.fuse.activeFr,   rL   r   rM   )rL   r   )daskconfigr   r   r   )r4   r:   s     r   test_fuse_configrD  g  s    	4e<	=	= L Ls
 
 V}As6661l:KKKKKKL L L L L L L L L L L L L L L L L Ls   +A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     sJ d S )NXv-looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongXw-looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongXx-looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongXy-looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongXz-looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongrL   rM   r,   r&   )zXu-looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongrF  rG  rH  rI  rJ  rL   rM   TrP      )r   r   r   rj   )r4   fuseddepskeys       r   test_fused_keys_max_lengthrO  q  s     fe

 fe

 fe

 fe

 fe

 e

 7	 	A< qd+++KE4  3xx#~~~~~ r   )r&   ):
__future__r   r1  r
  	functoolsr   r6   rB  	dask.baser   	dask.corer   
dask.localr   dask.optimizationr	   r
   r   r   r   r   r   
dask.utilsr   r   dask.utils_testr   r   r   fixturer$   r*   r;   rC   rJ   ra   rd   rk   rt   rw   r   r   r   r   r   r   r   r   r   r   r  r  r"  r7  r=  r@  rD  rO  r'   r   r   <module>rY     s   " " " " " "                    & & & & & &                        / . . . . . . . $ $ $ $ $ $ $ $   L L L  
7 
7 
7  ; ; ;s s sl     F     F      "    V V V	% 	% 	%1 1 1R	 R	 R	jE" E" E"Ph h hV   , , ,^  &     6| | |~  B	$ 	$ 	$L L L! ! ! ! !r   