
    >ie                        d dl mZ d dlZd dlZd dlZd dlmZ erd dlmZm	Z	 d Z
d Zd Zdd	Z G d
 d          Zd ZddZddZej        d d            ZdS )!    )annotationsN)TYPE_CHECKING)HighLevelGraphLayerc                    | dz   S N    xs    /lib/python3.11/site-packages/dask/utils_test.pyincr          q5L    c                    | dz
  S r   r
   r   s    r   decr      r   r   c                    | |z   S Nr
   r   ys     r   addr      r   r   皙?c                4    t          j        |           | |z   S r   )timesleep)abdelays      r   slowaddr      s    Juq5Lr   c                  T    e 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S )GetFunctionTestMixina  
    The GetFunctionTestCase class can be imported and used to test foreign
    implementations of the `get` function specification. It aims to enforce all
    known expectations of `get` functions.

    To use the class, inherit from it and override the `get` function. For
    example:

    > from dask.utils_test import GetFunctionTestMixin
    > class TestCustomGet(GetFunctionTestMixin):
         get = staticmethod(myget)

    Note that the foreign `myget` function has to be explicitly decorated as a
    staticmethod.
    c                    dt           dft          ddfd}|                     |d          dk    sJ |                     |d          dk    sJ |                     |d          dk    sJ d S )Nr	   :x:yr#   r$   :z   r&      r   r   getselfds     r   test_getzGetFunctionTestMixin.test_get.   s    S$KT4/@AAxx4  A%%%%xx4  A%%%%xx4  A%%%%%%r   c                    dt           dft          ddfd}	 |                     |d          }d}|d| dz  }J |                    | j        j                              # t
          $ r Y d S w xY w)	Nr	   r#   r$   r%   badkey-Expected `{}` with badkey to raise KeyError.

Obtained '
' instead.)r   r   r*   format__name__KeyErrorr,   r-   resultmsgs       r   test_badkeyz GetFunctionTestMixin.test_badkey5   s    S$KT4/@AA	8XXa**F CC22222C7#**TX%677777  	 	 	DD	s   A 
A-,A-c                    ddt           ddgfd}	 |                     |dgdg          }d}|d| d	z  }J |                    | j        j                              # t          $ r Y d S w xY w)
Nr	   r'   r   r   r   r   zr0   r1   r2   r3   )sumr*   r4   r5   r6   r7   s       r   test_nested_badkeyz'GetFunctionTestMixin.test_nested_badkey@   s    !3c
"344	8XXa8*c!233F CC22222C7#**TX%677777  	 	 	DD	s   A 
A*)A*c                X    dt           ddfd}|                     |d          dk    sJ d S )Nr	   r   
   r   r      )r   r*   r+   s     r   test_data_not_in_dict_is_okz0GetFunctionTestMixin.test_data_not_in_dict_is_okL   s:    3R.))xx32%%%%%%r   c                    ddt           ddgfd}|                     |ddg          dk    sJ |                     |d          dk    sJ d S )	Nr	   r'   r   r   r<   )r	   r'   r=   r(   r>   r*   r+   s     r   test_get_with_listz'GetFunctionTestMixin.test_get_with_listP   sb    !3c
"344xxC:&&&0000xx31$$$$$$r   c                   g dddt           dfgt          dfgddgt          dfdgt          dfgdgd}|                     |d          g dk    sJ |                     |d          g dk    sJ |                     |d          ddgk    sJ |                     |d          d	gk    sJ |                     |d
          g dg dgk    sJ |                     |d          d	ddggd	gdgk    sJ d S )N)r	   r'   r(   r   r	   r   cr'   )r   r   rH   r-   efr-      rI   rJ   )r   r>   r*   r+   s     r   test_get_with_list_top_levelz1GetFunctionTestMixin.test_get_with_list_top_levelV   s<   c1X*s#J$sCj115
 
 xx3999,,,,xx3999,,,,xx3Aq6))))xx3A3&&&&xx3IIIyyy#99999xx3a!Q[!$4a#8888888r   c                    ddt           ddgfd}|                     |dgdg          dk    sJ |                     |d          dk    sJ d S )	Nr	   r'   r   r   r<   ))r	   r'   r=   r(   rE   r+   s     r   test_get_with_nested_listz.GetFunctionTestMixin.test_get_with_nested_listf   sd    !3c
"344xxSE3<((I5555xx31$$$$$$r   c                V    d }d|ddhfd}|                      |d          dk    sJ d S )Nc                &    | t          |          z   S r   )lenr   s     r   <lambda>zPGetFunctionTestMixin.test_get_works_with_unhashables_in_values.<locals>.<lambda>m   s    SVV r   r	   r   r   r   r'   )r*   )r,   rJ   r-   s      r   )test_get_works_with_unhashables_in_valuesz>GetFunctionTestMixin.test_get_works_with_unhashables_in_valuesl   sD    ##1cA3-((xx31$$$$$$r   c                v    dt           dft          t           dfdfd}|                     |d          dk    sJ d S )Nr	   r   r   r<   r=      r)   r+   s     r   test_nested_tasksz&GetFunctionTestMixin.test_nested_tasksr   sE    3*C#sS+ABBxx31$$$$$$r   c                z    d t          d          D             }d|d<   |                     |d          dk    sJ d S )Nc                4    i | ]}d |dz   z  t           d |z  fS )zx%dr	   )r   ).0is     r   
<dictcomp>z=GetFunctionTestMixin.test_get_stack_limit.<locals>.<dictcomp>x   s+    EEE1Ua!e_sEAI.EEEr   i'  r   x0x10000)ranger*   r+   s     r   test_get_stack_limitz)GetFunctionTestMixin.test_get_stack_limitw   sI    EEeEEE$xx8$$------r   c                    ddl m} dt          dfddt          t          dfdfid}d	d
hd} |||          }|                     |d          dk    sJ d S )Nr   )r   r	   r   r   r=   r   )r   r   r
   r   rU   )dask.highlevelgraphr   r   r   r*   )r,   r   layersdependenciesgraphs        r   test_with_HighLevelGraphz-GetFunctionTestMixin.test_with_HighLevelGraph|   s    666666c3Z00cC:s=S7TUUse,,v|44xxs##q((((((r   N)r5   
__module____qualname____doc__r.   r:   r?   rC   rF   rL   rN   rS   rV   r_   re   r
   r   r   r!   r!      s          & & &	8 	8 	8
8 
8 
8& & &% % %9 9 9 % % %% % %% % %
. . .
) ) ) ) )r   r!   c                \    	 t          j        |           S # t          t          f$ r Y dS w xY w)z>Import a module and return it; in case of failure; return NoneN)	importlibimport_moduleImportErrorAttributeError)names    r   import_or_nonero      s?    &t,,,(   tts    ++hlgr   prefixstrreturnr   c                    | j                                         D ]\  }}|                    |          r|c S t          d|dt	          | j                              )zIGet the first layer from a HighLevelGraph whose name starts with a prefixzNo layer starts with z: )rb   items
startswithr6   list)rp   rq   keylyrs       r   	hlg_layerrz      sn    J$$&&  S>>&!! 	JJJ	
I6IItCJ7G7GII
J
JJr   rZ   intc                L    | j         |                                 |                  S )zDGet the layer from a HighLevelGraph at position ``i``, topologically)rb   _toposort_layers)rp   rZ   s     r   hlg_layer_topologicalr~      s     :c**,,Q/00r   	conditionboolcategorytype[Warning]messagec              #     K   | r:ddl }|                    ||          5 }|V  ddd           dS # 1 swxY w Y   dS t          j                    5 }|V  ddd           dS # 1 swxY w Y   dS )z*Conditionally check if a warning is raisedr   N)match)pytestwarns
contextlibnullcontext)r   r   r   r   ctxs        r   _check_warningr      s       \\('\22 	cIII	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 #%% 	III	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   266A$$A(+A()r   )rp   r   rq   rr   rs   r   )rp   r   rZ   r{   rs   r   )r   r   r   r   r   rr   )
__future__r   r   rj   r   typingr   ra   r   r   r   r   r   r   r!   ro   rz   r~   contextmanagerr   r
   r   r   <module>r      sE   " " " " " "                      :99999999         
e) e) e) e) e) e) e) e)P  K K K K1 1 1 1
 	 	 	 	 	 	r   