U
    /eb                      @   s  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m	Z	 d dl
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ejdddideigdd Zdd Zd d! Zd"d# Zejd$d%d&gd'd( Z d)d* Z!d+d, Z"dS )-    N)Set)	Blockwiseblockwise_token)HighLevelGraphLayerMaterializedLayerto_graphviz)incc                 C   sb   t d t d}t| }|jddd}|d }|d }|| }|j| tj|s^t	d S )Ngraphviz
dask.array
      chunks      )
pytestimportorskipstronesdaskZ	visualizeospathexistsAssertionError)Ztmpdirdafnabcd r"   =/tmp/pip-unpacked-wheel-dbjnr7gq/dask/tests/test_highgraph.pytest_visualize   s    

r$   c                  C   sp   ddi} dt dfi}| |d}t dhd}t||}t|dt dfdksPttdd |j D sltd S )	Nxr   yr   r   r   r%   r&   c                 s   s   | ]}t |tV  qd S )N)
isinstancer   ).0layerr"   r"   r#   	<genexpr>!   s     ztest_basic.<locals>.<genexpr>)r	   setr   dictr   alllayersvaluesr   r   r0   dependencieshgr"   r"   r#   
test_basic   s    

r5   c                     s   t d} | jddd}|d }|d }|| }|j         }}}t|ts`t	t
|t
 kstt	t
| fdd D kst	t
|t
t||kst	  t kst	d S )	Nr   r   r   r   r   r   c                    s   g | ]} | qS r"   r"   )r*   ir4   r"   r#   
<listcomp>/   s     z:test_keys_values_items_to_dict_methods.<locals>.<listcomp>)r   r   r   r   keysr1   itemsr)   r   r   listzipZto_dictr.   )r   r   r   r    r!   r9   r1   r:   r"   r7   r#   &test_keys_values_items_to_dict_methods$   s    
r=   c               
   C   s   t ddddddidt t d} | d dks6t| d	 dksFt| d
 dksVt| d dksftdD ]"}tt | |  W 5 Q R X qjG dd d}| | ffD ]"}tt | |  W 5 Q R X qd S )Nr   r      r   r   r   r   r       r'   r   r@   r   )r!    r   r"   c                   @   s   e Zd ZdZdS )z test_getitem.<locals>.UnhashableN)__name__
__module____qualname____hash__r"   r"   r"   r#   
UnhashableE   s   rG   )r   r-   r   r   ZraisesKeyError	TypeError)r4   krG   r"   r"   r#   test_getitem4   s     rK   c                  C   sv   t ddiddiddht d} |   | js4t|  }dD ]0}t| |}t||}||k	sdt||ks@tq@d S )Nr   r   r   r'   )r0   r3   key_dependencies)r   r-   Zget_all_dependenciesrL   r   copygetattr)h1h2rJ   Zv1Zv2r"   r"   r#   	test_copyM   s    


rQ   c                  C   sf   dt dfd} td| idt i}|dh}t|ddiksBt|dggg}t|| ksbtd S )Nr   r%   r(   r   r&   )r	   r   r-   cullr.   r   )r   r4   Zculled_by_xZculled_by_yr"   r"   r#   	test_cull\   s    rS   c                  C   s   t ddddddddidddddd	d
ddhdht t t d
} t dd | j D dd | j D }| ddg}|j|jkst|j|jkst|jD ]4}|j| | j| kst|j| | j| kstqd S )Nd1e1)Za1Za2r!   r   )r   Z
dontcull_bZ
dontcull_c)r!   Z
dontcull_d)eZ
dontcull_e)r   r   r    r!   rV   rV   c                 S   s"   i | ]\}}|d kr|t |qS r    )r.   r*   rJ   vr"   r"   r#   
<dictcomp>v   s       z$test_cull_layers.<locals>.<dictcomp>c                 S   s"   i | ]\}}|d kr|t |qS rW   )r-   rX   r"   r"   r#   rZ   w   s       r   r   )r   r-   r0   r:   r3   Zcull_layersr   )r4   expectZculledrJ   r"   r"   r#   test_cull_layersh   s&    
r\   c                  C   sx   t d tddddddidt t d} tjj|  d k	sJt	| j
 D ]}tjj| d k	sTt	qTd S )	NZjinja2r   r   r>   r?   r    rA   r'   )r   r   r   r-   xmletreeElementTree
fromstringZ_repr_html_r   r0   r1   )r4   r+   r"   r"   r#   test_repr_html_hlg_layers   s    
ra   c                 C   s   | dd  S )Nr   r"   )keyr"   r"   r#   annot_map_fn   s    rc   
annotationZworkeraliceblock_idc              	   C   sh   t d}tjf |  |jddd}W 5 Q R X | j|j }|j| ksNt	tj
dd d ksdt	d S )Nr   r   r   r   r   r   annotations)r   r   r   annotater   __dask_graph__r0   nameri   r   configget)rd   r   Aalayerr"   r"   r#   test_single_annotation   s    
rq   c               
   C   s   t d} tjtd8 tjddid | jddd}W 5 Q R X |d }W 5 Q R X |d }tjd	d d ksrt|	 j
|j }|	 j
|j }|	 j
|j }|jdditd
kst|jdtikst|jd kstd S )Nr   )rf   ZGPUr   )	resourcesrg   rh   r   ri   )rr   rf   rf   )r   r   r   rj   rc   r   rm   rn   r   rk   r0   rl   ri   )r   ro   BCrp   ZblayerZclayerr"   r"   r#   test_multiple_annotations   s    
ru   c                  C   sJ   t ddiddid} |  }i }t|||   |dddiiksFtd S )Nn*   workers)re   ri   )r   Z%__dask_distributed_annotations_pack__r   Z'__dask_distributed_annotations_unpack__r9   r   )r+   Zpacked_annori   r"   r"   r#   test_annotation_pack_unpack   s      rz   c                  C   sN   t dddddid} | dhg \}}t|dks8t|jddiksJtd S )	Nrw   gQ	@r'   Zfoobarry   r   r   )r   rR   lenr   ri   )r+   Zculled_layer_r"   r"   r#   1test_materializedlayer_cull_preserves_annotations   s    r~   flatTFc                 C   s*  t d}t d}| r6||dddd }n@||ddd	}||ddd	}||| }| }d
}|jf|h}|	|}|j
 D ]\}	}
t|
tjjst|j
|	 tjjrtqt|j
|	 tjjst|
 rt|
 }||
jf|hkst|
 rtqd S )Nr   Znumpy(   )rA   r   )r   rA   d   r   )r   )rA   r   r   )r   r   Z
from_arrayZarangeZreshapeouterZ	transposerk   _namerR   r0   r:   r)   r   Z	blockwiser   r   is_materializedget_output_keysoutput)r   r   npr%   r&   dskselectr9   Zdsk_cullrl   r+   Zout_keysr"   r"   r#   test_blockwise_cull   s(    


r   c               	   C   s   ddi} t dtddtdggidi ddd	d
}t|t| ksJt| |d}t dhd}t||}|jd 	 s~t|jd 	 rtt|t| t|   krdksn t|jd 	 rtd S )Nr%   r   r   Zijr   r"   )r   r   r   r   )r6   j)r   Zoutput_indicesr   indicesZ	numblocksZnew_axesr'   r      )
r   tupler   r|   r   r   r-   r   r0   r   r2   r"   r"   r#   test_len_does_not_materialize   s"    

*r   c            
      C   s   t d} t d | jddd}||j }|jdd}|j}t|}|jD ]R}d|krLd	|ksdt|	d
t
d
 }|	d|}||| }	t
|	dksLtqLd S )Nr   r
   )  r   )r   r   r   r   )Zaxislabeltooltipz	tooltip=""r   )r   r   r   Tsumr   r   bodyr   findr|   )
r   r   r   r    r4   gr+   startendr   r"   r"   r#   test_node_tooltips_exist  s    



r   )#r   xml.etree.ElementTreer]   collections.abcr   r   r   Zdask.blockwiser   r   Zdask.highlevelgraphr   r   r   r   Zdask.utils_testr	   r$   r5   r=   rK   rQ   rS   r\   ra   rc   markZparametrizerq   ru   rz   r~   r   r   r   r"   r"   r"   r#   <module>   s<   



 