B
    ÛT•\Ì–  ã               @   sb  d dl Z d dlZd dlmZ d dlmZ d dlZd dlmZm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZ d d	lmZ d
d„ Zdd„ Zdd„ Zdd„ Zdd„ Z dd„ Z!dd„ Z"dd„ Z#dd„ Z$dd„ Z%dd„ Z&d d!„ Z'd"d#„ Z(d$d%„ Z)d&d'„ Z*d(d)„ Z+d*d+„ Z,d,d-„ Z-d.d/„ Z.d0d1„ Z/d;d3d4„Z0d5d6„ Z1d7d8„ Z2d9d:„ Z3dS )<é    N)Úgetitem)Úpartial)ÚaddÚinc)Úapply)Úget_dependencies)Úget_sync)	ÚcullÚfuseÚinlineÚinline_functionsÚfunctions_ofÚfuse_getitemÚfuse_selectionsÚfuse_linearÚSubgraphCallable)Úpartial_by_orderc             C   s   | d S )Né   © )Úxr   r   ú;lib/python3.7/site-packages/dask/tests/test_optimization.pyÚdouble   s    r   c                 sÐ   dt dft dftddfdœ‰ tˆ dƒ\} }| dt dftddfdœksHt‚|g dgdgdœks`t‚tˆ dƒtˆ dgƒkszt‚tˆ ddgƒd	 ˆ ks”t‚tˆ dgdggƒtˆ ddgƒks¸t‚t t‡ fd
d„¡ d S )Né   r   Úyé
   )r   r   ÚzÚoutr   )r   r   r   r   r   c                  s
   t ˆ dƒS )NZbadkey)r	   r   )Údr   r   Ú<lambda>    s    ztest_cull.<locals>.<lambda>)r   r   r	   ÚAssertionErrorÚpytestZraisesÚKeyError)ZculledÚdependenciesr   )r   r   Ú	test_cull   s    $r#   c              O   s6   t | |Ž}| d¡dk	r|S t| |Ž}||ks2t‚|S )z9Run both ``fuse`` and ``fuse_linear`` and compare resultsÚrename_keysF)r   Úgetr
   r   )ÚargsÚkwargsZrv1Zrv2r   r   r   Úfuse2#   s    

r(   c                s   ˆ ‡ fdd„ˆ D ƒfS )Nc                s   i | ]}t ˆ |ƒ|“qS r   )r   )Ú.0Úk)Údskr   r   ú
<dictcomp>.   s    zwith_deps.<locals>.<dictcomp>r   )r+   r   )r+   r   Ú	with_deps-   s    r-   c              C   s  t } tdftdftdftddfdddœ}| |d	d
tttttddffffdddœƒksZt‚| |dd
tttttddffffddddœƒksŽt‚tdftdftdftdftddfdddœ}| |d	d
ttdfttdffttddffdddœƒksòt‚| |dd
ttdfttdffttddffdddddœƒks2t‚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	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¶t‚| |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ddddœ	ƒkst‚tdftdftdftdftdfddœ}| |d	d
ttdftdfttdfftdfdœƒksdt‚| |dd
ttd ftd fttd fftdfd!d d"œƒks t‚dtdftddfd#œ}| |d	d
ttdftddfd$œƒksàt‚| |dd
ttdftd%d%fd%d&œƒkst‚d S )'Nr   r   r   ÚaÚbr   r   )Úwr   r   r   r.   r/   F)r$   )r0   r.   r/   Tzz-y-x-w)zz-y-x-wr.   r/   r0   )ÚNEWr0   r   r   r   r.   r/   )r1   r0   r   r.   r/   zz-yzx-w)r1   zx-wzz-yr.   r/   r0   r   r0   Úcr   )
ÚvÚur0   r   r   r   r.   r/   r2   r   )r4   r3   r   r.   r/   zc-azd-bzx-w-u)	zx-w-ur3   zz-yzc-azd-br.   r/   r4   r   r   )r.   r/   r2   r   r   r   )r.   r/   r   r   zy-xzc-d)r.   r/   zc-dzy-xr   r   )r.   r/   r2   )r/   r2   za-b)za-br2   r/   )r(   r   r   r-   r   )r
   r   r   r   r   Ú	test_fuse1   s¶    



r5   c           	   C   s  t } dtdftdfdœ}dg}| ||ddttdftdfdœƒksFt‚| ||ddttdftd	fd	d
œƒkspt‚tdftdftdftddfdddœ}ddg}| ||ddttdfttdfftddfdddœƒksÔt‚| ||ddttdfttdfftddfddddœƒkst‚d S )Nr   r.   r/   )r.   r/   r2   F)r$   )r/   r2   Tza-b)za-br2   r/   r   r   r   r   )r0   r   r   r   r.   r/   )r0   r   r   r.   r/   zy-x)r0   zy-xr   r.   r/   r   )r(   r   r-   r   r   )r
   r   Úkeysr   r   r   Útest_fuse_keys§   s@    

r7   c           
   C   sž  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sDt‚t| dddgƒdt dft t dfftdt t dfffdœks€t‚dt dftddfdœ} t| ƒdt dftddfdœks¸t‚t| dd	dt dftdt dffdœksât‚t| dd
ddt dftdt dffdœkst‚ddddddgttdfdfdœ} t| dƒddddddgttdddgfdfdœksft‚t| dd
dddddddgttdfdfdœksšt‚d S )Nr   r.   r/   r2   )r.   r/   r2   r   r   r   )r   r   r   )r6   F)r6   Úinline_constantsr   )r.   r/   r2   r   Úe)r8   )r   r   r   r   Úlen)r   r   r   r   Útest_inlineÓ   sR    

 r;   c           
   C   sx   d\} }}}dt ||f|t| f|t|f| d|di}t|g ttgƒd}dt t| f|f|t|f| d|di}||kstt‚d S )NÚxyidr   r   )Úfast_functions)r   r   r   r   Úsetr   )r   r   Úir   r+   ÚresultÚexpectedr   r   r   Útest_inline_functions   s    
rB   c              C   sX   ddt tdƒdftdfdœ} t| g ttgƒd}|d t| d fksHt‚d|ksTt‚d S )Nr   r   r   r.   )r   r   r.   r/   )r=   r/   )r   r   r   r   r>   r   )r+   r@   r   r   r   Ú(test_inline_ignores_curries_and_partials  s    rC   c              C   sh   G dd„ dt ƒ} | ƒ }dtdf|dftdfdœ}t|g thd}|d ||d fksXt‚d|ksdt‚d S )	Nc               @   s   e Zd Zdd„ Zdd„ ZdS )z?test_inline_functions_non_hashable.<locals>.NonHashableCallablec             S   s   |d S )Nr   r   )Úselfr.   r   r   r   Ú__call__  s    zHtest_inline_functions_non_hashable.<locals>.NonHashableCallable.__call__c             S   s   t dƒ‚d S )NzNot hashable)Ú	TypeError)rD   r   r   r   Ú__hash__  s    zHtest_inline_functions_non_hashable.<locals>.NonHashableCallable.__hash__N)Ú__name__Ú
__module__Ú__qualname__rE   rG   r   r   r   r   ÚNonHashableCallable  s   rK   r   r.   r/   r2   )r.   r/   r2   r   )r=   )Úobjectr   r   r   )rK   Znohashr+   r@   r   r   r   Ú"test_inline_functions_non_hashable  s    rM   c              C   s2   t dfddœ} t| g tt gƒd}|| ks.t‚d S )Nr   r   )r   r   )r=   )r   r   r>   r   )r+   r@   r   r   r   Ú/test_inline_doesnt_shrink_fast_functions_at_top,  s    rN   c           
   C   s|   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tgƒd}||ksxt‚d S )Nr<   r   r   )r=   )Úsumr   r   r   r>   r   )r   r   r?   r   r+   rA   r@   r   r   r   Útest_inline_traverses_lists2  s    rP   c              C   s^   t dftdfdœ} t| g t gƒdtt dffiks4t‚t| dgt gƒtdft dfdœksZt‚d S )Nr   r   )r   r   r   )r   r   )r   r   r   r   )r+   r   r   r   Ú*test_inline_functions_protects_output_keys?  s    "rQ   c              C   sÒ   dd„ } dd„ }t | dfƒt| gƒks*t‚t | |dffƒt| |gƒksJt‚t | |dfgfƒt| |gƒkslt‚t | |dfgggfƒt| |gƒks’t‚t dƒtƒ ks¤t‚t | ƒtƒ ks¶t‚t | fƒt| gƒksÎt‚d S )Nc             S   s   | S )Nr   )r   r   r   r   r   G  s    z#test_functions_of.<locals>.<lambda>c             S   s   | S )Nr   )r   r   r   r   r   H  s    r   )r   r>   r   )r.   r/   r   r   r   Útest_functions_ofF  s     "&rR   c              C   sZ   dd„ } | ddddgft ddfdœ}t|| d	ƒ}t|d
ƒ\}}|d
| dddfiksVt‚d S )Nc              W   s   d S )Nr   )r&   r   r   r   ÚloadS  s    ztest_fuse_getitem.<locals>.loadÚstoreÚpartr.   r/   r   )r   r   é   r   )r   r   r	   r   )rS   r+   Údsk2r"   r   r   r   Útest_fuse_getitemR  s    rX   c                 sh   dd„ ‰ ˆ ddddgft ddfdœ} ‡ fd	d
„}t| t ˆ |ƒ}t|dƒ\}}|dˆ dddfiksdt‚d S )Nc              W   s   d S )Nr   )r&   r   r   r   rS   ]  s    z"test_fuse_selections.<locals>.loadrT   rU   r.   r/   r   )r   r   c                s   ˆ |d |d | d fS )Nr   r   r   )Zt1Zt2)rS   r   r   r   a  s    z&test_fuse_selections.<locals>.<lambda>r   )r   r   r	   r   )r+   ÚmergerW   r"   r   )rS   r   Útest_fuse_selections\  s    rZ   c              C   sF   ddddddgt tdfdfdœ} t| ddgƒ\}}t|dh|d d S )	Nr   r.   r/   r2   r   )r.   r/   r2   r   r9   r9   )r"   )r   r:   r	   r   )r   Úd2r"   r   r   r   Útest_inline_cull_dependenciesg  s    r\   c           "   C   sô  dd„ } d| df| ddf| ddfdœ}t |dd	d
t|ƒks@t‚t |ddd
t|ƒksZt‚t |dd	d
td| | df| ddffdœƒksŠt‚t |ddd
td| | df| ddffddœƒks¼t‚d| df| ddf| dddf| dddfdœ}t |dd	d
t|ƒkst‚t |ddd
t|ƒkst‚t |dd	d
td| | df| ddf| dddffdœƒksZt‚t |ddd
td| | df| ddf| dddffddœƒks˜t‚d| df| df| dddfdœ}t |dd	d
t|ƒksÒt‚t |ddd
t|ƒksît‚t |dd	d
td| d| df| dffdœƒks t‚t |ddd
td| d| df| dffddœƒksTt‚d| df| df| ddf| df| df| ddfdœ}t |dd	d
t|ƒks t‚t |ddd
t|ƒks¼t‚t |dd	d
td| | df| dff| | df| dffdœƒksüt‚t |ddd
td| | df| dff| | df| dffdddœƒks@t‚d| df| df| df| df| ddf| ddf| ddfd œ}t |dd	d
t|ƒks”t‚t |ddd
t|ƒks°t‚td| | df| dff| | df| dff| ddfd!œƒ}t |dd	d
|ksüt‚t |dd	d
|kst‚td| | df| dff| | df| dff| ddfd"d#d$œƒ}t |ddd
|ksdt‚t |ddd
|ks|t‚t |dd	d
td| | | df| dff| | df| dfffd%œƒksÀt‚t |ddd
td| | | df| dff| | df| dfffd&d'œƒkst‚d| df| df| df| df| df| df| df| df| ddf| ddf| d(d)f| d*d+f| ddf| d,d-f| ddfd.œ}t |dd	d
t|ƒks’t‚t |ddd
t|ƒks®t‚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	d
|ks*t‚t |dd	d
|ksBt‚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#d0d1d2œƒ}t |ddd
|ksÆt‚t |ddd
|ksÞt‚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d3œƒ}t |dd	d
|ksRt‚t |d4d	d
|ksjt‚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d5d6d7œƒ}t |ddd
|ksât‚t |d4dd
|ksút‚t |d8d	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d9œƒksft‚t |d8d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:d;œƒksÔt‚d| df| df| df| df| df| df| df| df| df| df| df| df| df| df| df| df| ddf| ddf| d(d)f| d*d+f| d<d=f| d>d?f| d@dAf| dBdCf| ddf| d,d-f| dDdEf| dFdGf| ddf| dHdIf| dJdKfdLœ }t |dd	d
t|ƒk	sÐt‚t |ddd
t|ƒk	sìt‚td| | df| dff| | df| dff| | df| dff| | df| dff| | 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| dDdEf| dFdGf| ddf| dHdIf| dJdKfdMœƒ}t |dd	d
|k
sÈt‚t |dd	d
|k
sàt‚td| | df| dff| | df| dff| | df| dff| | df| dff| | 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| dDdEf| dFdGf| ddf| dHdIf| dJdKfd"d#d0d1dNdOdPdQdRœƒ}t |ddd
|ksÌt‚t |ddd
|ksät‚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| dHdIf| dJdKfdSœƒ}t |dd	d
|ks°t‚t |d4d	d
|ksÈt‚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| dHdIf| dJdKfd5d6dTdUdVœƒ}t |ddd
|ksœt‚t |d4dd
|ks´t‚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| dJdKfdWœƒ}t |d8d	d
|ksxt‚t |dXd	d
|kst‚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| dJdKfdYdZd[œƒ}t |d8dd
|ksXt‚t |dXdd
|kspt‚t |d\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,t‚t |d\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êt‚d| dfd`œ}t |dd	d
tda| dfiƒkst‚t |ddd
t| dfdbdcœƒksBt‚d| df| daf| dfddœ}t |dd	d
tde| | | dfffiƒksˆt‚t |ddd
t| | | dfffdfdgœƒks¶t‚d| df| ddaf| ddfddœ}t |dd	d
td| d| d| dfffd%œƒkst‚t |ddd
td| d| d| dfffdhdiœƒks:t‚d| df| df| df| df| df| dJdfdjœ}td| df| | | | dffff| dJdfdkœƒ}t |dd	d
|ks¬t‚t |dd	d
|ksÄt‚td| df| | | | dffff| dJdfdldmœƒ}t |ddd
|ks
t‚t |ddd
|ks"t‚t |dd	d
td| | | | | dffff| dffd]œƒks^t‚t |ddd
td| | | | | dffff| dffdndoœƒksœt‚d| df| df| ddf| ddf| ddf| ddJdfdjœ}td| df| d| d| d| dffff| ddJdfdkœƒ}t |dd	d
|kst‚t |dd	d
|ks6t‚td| df| d| d| d| dffff| ddJdfdldmœƒ}t |ddd
|ks„t‚t |ddd
|ksœt‚t |dd	d
td| d| d| d| d| dffff| dffd]œƒksàt‚t |ddd
td| d| d| d| d| dffff| dffdndoœƒks&t‚d| df| df| df| df| df| df| df| df| d,f| dddHf| dpf| dqfdrœ}t |dd	d
td| | | dfff| | | dfff| | | dfff| | | dddHfffdsœƒksÖt‚t |ddd
td| | | dfff| | | dfff| | | dfff| | | dddHfffdtdudvdwdxœ	ƒks:t‚d| df| daf| dadf| def| dpf| dedqfdyœ}t |dd	d
t| df| da| daff| de| | defffdzœƒksªt‚t |ddd
t| df| da| daff| de| | defffdbd{dwd|œƒksðt‚d S )}Nc              W   s   | S )Nr   )r&   r   r   r   Úfs  s    z,test_fuse_reductions_single_input.<locals>.fr   r.   Úb1Úb2)r.   r^   r_   r2   gffffffþ?F)Ú	ave_widthr$   Tr   )r.   r2   zb1-b2-c)r.   zb1-b2-cr2   Úb3)r.   r^   r_   ra   r2   g333333@rV   z
b1-b2-b3-c)r.   z
b1-b2-b3-cr2   r2   Úd1r[   )r.   r^   r_   r2   rb   r[   r9   )r.   r2   r9   zd1-d2-e)r.   zb1-b2-czd1-d2-er2   r9   Úb4Úc1Úc2)r.   r^   r_   ra   rc   rd   re   r   )r.   rd   re   r   zb1-b2-c1zb3-b4-c2)r.   zb1-b2-c1zb3-b4-c2r   rd   re   )r.   r   zb1-b2-b3-b4-c1-c2-d)r.   zb1-b2-b3-b4-c1-c2-dr   Úb5Úb6Úb7Úb8Úc3Úc4)r.   r^   r_   ra   rc   rf   rg   rh   ri   rd   re   rj   rk   rb   r[   r9   )r.   rd   re   rj   rk   rb   r[   r9   zb5-b6-c3zb7-b8-c4)r.   zb1-b2-c1zb3-b4-c2zb5-b6-c3zb7-b8-c4rb   r[   r9   rd   re   rj   rk   )r.   rb   r[   r9   gffffff@zb1-b2-b3-b4-c1-c2-d1zb5-b6-b7-b8-c3-c4-d2)r.   zb1-b2-b3-b4-c1-c2-d1zb5-b6-b7-b8-c3-c4-d2r9   rb   r[   gÍÌÌÌÌÌ@)r.   r9   z+b1-b2-b3-b4-b5-b6-b7-b8-c1-c2-c3-c4-d1-d2-e)r.   z+b1-b2-b3-b4-b5-b6-b7-b8-c1-c2-c3-c4-d1-d2-er9   Úb9Úb10Úb11Úb12Úb13Úb14Úb15Úb16Úc5Úc6Úc7Úc8Úd3Úd4Úe1Úe2) r.   r^   r_   ra   rc   rf   rg   rh   ri   rl   rm   rn   ro   rp   rq   rr   rs   rd   re   rj   rk   rt   ru   rv   rw   rb   r[   rx   ry   rz   r{   r]   )r.   rd   re   rj   rk   rt   ru   rv   rw   rb   r[   rx   ry   rz   r{   r]   z	b10-b9-c5z
b11-b12-c6z
b13-b14-c7z
b15-b16-c8)r.   zb1-b2-c1zb3-b4-c2zb5-b6-c3zb7-b8-c4z	b10-b9-c5z
b11-b12-c6z
b13-b14-c7z
b15-b16-c8rb   r[   rx   ry   rz   r{   r]   rd   re   rj   rk   rt   ru   rv   rw   )r.   rb   r[   rx   ry   rz   r{   r]   zb10-b11-b12-b9-c5-c6-d3zb13-b14-b15-b16-c7-c8-d4)r.   zb1-b2-b3-b4-c1-c2-d1zb5-b6-b7-b8-c3-c4-d2zb10-b11-b12-b9-c5-c6-d3zb13-b14-b15-b16-c7-c8-d4rz   r{   r]   rb   r[   rx   ry   )r.   rz   r{   r]   gš™™™™™@z,b1-b2-b3-b4-b5-b6-b7-b8-c1-c2-c3-c4-d1-d2-e1z3b10-b11-b12-b13-b14-b15-b16-b9-c5-c6-c7-c8-d3-d4-e2)r.   z,b1-b2-b3-b4-b5-b6-b7-b8-c1-c2-c3-c4-d1-d2-e1z3b10-b11-b12-b13-b14-b15-b16-b9-c5-c6-c7-c8-d3-d4-e2r]   rz   r{   g      @)r.   r]   zbb1-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.   zbb1-b10-b11-b12-b13-b14-b15-b16-b2-b3-b4-b5-b6-b7-b8-b9-c1-c2-c3-c4-c5-c6-c7-c8-d1-d2-d3-d4-e1-e2-fr]   )r.   r/   r/   za-b)za-br/   )r.   r/   r2   r   r   za-b-c-d)za-b-c-dr   zb-c-d)r.   zb-c-dr   )r.   r^   r_   rd   rb   rz   r]   )r.   r_   rz   r]   zb1-c1-d1-e1)r.   r_   zb1-c1-d1-e1r]   rz   zb1-b2-c1-d1-e1-f)r.   zb1-b2-c1-d1-e1-fr]   r9   r]   )r.   r^   r_   ra   rd   re   rj   rb   r[   rx   r9   r]   Úg)r.   rb   r[   rx   r|   zb1-c1-d1zb2-c2-d2zb3-c3-d3ze-f-g)	r.   zb1-c1-d1zb2-c2-d2zb3-c3-d3ze-f-grb   r[   rx   r|   )r.   r/   r2   r   r9   r]   r|   )r/   r   r|   zc-d)za-bzc-dze-f-gr/   r   r|   )r
   r-   r   )r]   r   rA   r   r   r   Ú!test_fuse_reductions_single_inputr  sj    
," 
4$
$$$$
&6$&
$$$$$$$$
&&&&$&$&
(&&8&&&("
,

4$
" r}   c              C   sÚ   d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œ}ddddh}t||ddd}|t|d ƒksÖt‚d S )Nc              W   s   | S )Nr   )r&   r   r   r   r]     s    ztest_fuse_stressed.<locals>.fr   )z)cholesky-26a6b670a8aabb7e2f8936db7ccb6a88r   r   )z/cholesky-upper-26a6b670a8aabb7e2f8936db7ccb6a88r   r   z/array-original-27b9f9d257a80fa6adae06a98faf71ebr   r   )z)cholesky-26a6b670a8aabb7e2f8936db7ccb6a88r   r   )z&array-27b9f9d257a80fa6adae06a98faf71ebr   r   )z0cholesky-lt-dot-26a6b670a8aabb7e2f8936db7ccb6a88r   r   r   r   )z)cholesky-26a6b670a8aabb7e2f8936db7ccb6a88r   r   é   )z)cholesky-26a6b670a8aabb7e2f8936db7ccb6a88r   r   )r   r   )z&array-27b9f9d257a80fa6adae06a98faf71ebr   r   )z&array-27b9f9d257a80fa6adae06a98faf71ebr   r   )z/array-original-27b9f9d257a80fa6adae06a98faf71eb)z/cholesky-upper-26a6b670a8aabb7e2f8936db7ccb6a88r   r   )z)cholesky-26a6b670a8aabb7e2f8936db7ccb6a88r   r   )z&array-27b9f9d257a80fa6adae06a98faf71ebr   r   )z/cholesky-upper-26a6b670a8aabb7e2f8936db7ccb6a88r   r   )z)cholesky-26a6b670a8aabb7e2f8936db7ccb6a88r   r   )z0cholesky-lt-dot-26a6b670a8aabb7e2f8936db7ccb6a88r   r   r   r   )z&array-27b9f9d257a80fa6adae06a98faf71ebr   r   )z/cholesky-upper-26a6b670a8aabb7e2f8936db7ccb6a88r   r   )z)cholesky-26a6b670a8aabb7e2f8936db7ccb6a88r   r   )z&array-27b9f9d257a80fa6adae06a98faf71ebr   r   )z/cholesky-upper-26a6b670a8aabb7e2f8936db7ccb6a88r   r   )z)cholesky-26a6b670a8aabb7e2f8936db7ccb6a88r   r   )z/cholesky-upper-26a6b670a8aabb7e2f8936db7ccb6a88r   r   )z/cholesky-upper-26a6b670a8aabb7e2f8936db7ccb6a88r   r   )z/cholesky-upper-26a6b670a8aabb7e2f8936db7ccb6a88r   r   r   T)r6   r`   r$   )Úslicer
   r-   r   )r]   r   r6   Úrvr   r   r   Útest_fuse_stressed  sL    
r   c              C   sÀ  dd„ } dd| ddf| dfdœ}t |dd	d
td| | ddffiƒksHt‚t |ddd
t| | ddffddœƒksrt‚t |dd	d
tdd| | ddffdœƒksžt‚t |ddd
tdd| | ddffddœƒksÌt‚dd| df| ddf| df| dddfdœ}t|ƒ}t |dd	d
|kst‚t |dd	d
|ks,t‚t |ddd
|ksDt‚t |ddd
|ks\t‚t |dd	d
tdd| | df| ddf| dffdœƒks–t‚t |ddd
tdd| | df| ddf| dffddœƒksÒt‚dd| df| ddf| df| ddf| ddfdœ}t |dd	d
t|ƒkst‚t |ddd
t|ƒks8t‚t |dd	d
tdd| ddf| | dfdf| d| dffdœƒkszt‚t |ddd
tdd| ddf| | dfdf| d| dffdddœƒksÀt‚dd| df| ddf| df| ddf| ddf| dd fd!œ}t |dd	d
t|ƒkst‚t |ddd
t|ƒks.t‚t |dd	d
tdd| ddf| | | dfdf| d| dfffd"œƒkstt‚t |ddd
tdd| ddf| | | dfdf| d| dfffd#d$œƒks¼t‚d S )%Nc              W   s   | S )Nr   )r&   r   r   r   r]   Õ  s    z.test_fuse_reductions_multiple_input.<locals>.fr   r   Úa1Úa2r/   )r‚   rƒ   r/   r2   F)r`   r$   r2   Tz	a1-a2-b-c)z	a1-a2-b-cr2   )r‚   rƒ   r2   zb-c)r‚   rƒ   zb-cr2   r^   r_   ra   )r‚   rƒ   r^   r_   ra   r2   g333333@rV   z
b1-b2-b3-c)r‚   rƒ   z
b1-b2-b3-cr2   )r‚   rƒ   r^   r_   ra   rd   re   )r‚   rƒ   r_   rd   re   zb1-c1zb3-c2)r‚   rƒ   r_   zb1-c1zb3-c2rd   re   rd   re   )r‚   rƒ   r^   r_   ra   rd   re   r   )r‚   rƒ   r_   r   zb1-b3-c1-c2-d)r‚   rƒ   r_   zb1-b3-c1-c2-dr   )r
   r-   r   )r]   r   rA   r   r   r   Ú#test_fuse_reductions_multiple_inputÔ  s¦    (,r„   r   c             C   s   | | | S )Nr   )r.   r/   r2   r   r   r   Úfunc_with_kwargsD  s    r…   c              C   s:  dddg} 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d}|jdks t‚t	|ƒdks°t‚| 
¡ }| dddœ¡ |ddƒtt|dgƒd dgƒd ksòt‚|ddƒ|ddƒkst‚t t |¡¡}|ddƒ|ddƒks6t‚d S )Nr   r   rV   Úin1Úin2)r   r~   é   )ÚfunctionÚotherr2   )r‰   rŠ   r.   r2   r   r/   r]   )r.   r/   r2   r   r9   r]   Úhr‹   Ztest)Úname)r†   r‡   r   )r   r   r   r…   r   rO   r   rŒ   r   ÚreprÚcopyÚupdater   r	   ÚpickleÚloadsÚdumps)Znon_hashabler+   r]   rW   Úf2r   r   r   Útest_SubgraphCallableH  s&    

*r”   c              C   sp  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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št‚t| d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øt‚t| d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sZt‚t| ddd}g }xdt d¡D ]V}| 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| dœƒ¡ qxW ||ksàt‚t| ddgdd}g }xft d¡D ]X}| tdt t dffttddftdt t dfffdœd|ƒf| dt t dffdœƒ¡ qW ||kslt‚d S )Nr   zx-1zinc-1zinc-2zadd-1zinc-3zinc-4zadd-2zinc-5)	zx-1zinc-1zinc-2zadd-1zinc-3zinc-4zadd-2zinc-5zinc-6zinc-6T)Úfuse_subgraphszadd-inc-x-1)zx-1zadd-1zinc-6r   )zinc-6zadd-inc-x-1F)r•   r$   )zx-1zadd-1zadd-2)zadd-inc-x-1zadd-2zinc-6)zx-1zinc-2z	inc-add-1)zadd-1zinc-6)zx-1zinc-2zinc-6z	inc-add-1)zadd-1zadd-2)zx-1zinc-2z	inc-add-1zadd-2zinc-6)	r   r   r
   r-   r   r   Ú	itertoolsÚpermutationsÚappend)r+   ÚresÚsolZsolsZinkeysr   r   r   Útest_fuse_subgraphsb  sz    

r›   c           
   C   s’   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	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Žt‚d S )Nr   zx-1zadd-1zadd-2zadd-3zadd-4)zx-1zadd-1zadd-2zadd-3zadd-4zadd-5zadd-5T)r•   r   zadd-x-1)zadd-x-1zadd-5)r   r
   r-   r   r   )r+   r™   rš   r   r   r   Ú3test_fuse_subgraphs_linear_chains_of_duplicate_deps°  s$    
rœ   )r   )4r–   r   Úoperatorr   Ú	functoolsr   r    Zdask.utils_testr   r   Zdask.compatibilityr   Z	dask.corer   Z
dask.localr   Zdask.optimizationr	   r
   r   r   r   r   r   r   r   Z
dask.utilsr   r   r#   r(   r-   r5   r7   r;   rB   rC   rM   rN   rP   rQ   rR   rX   rZ   r\   r}   r   r„   r…   r”   r›   rœ   r   r   r   r   Ú<module>   sL   ,
v,-

    !Ep
N