
    bi                        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y)    )annotationsN)TYPE_CHECKING)HighLevelGraphLayerc                    | dz   S N    xs    J/home/cdr/jupyterlab/.venv/lib/python3.12/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                6    t        j                  |       | |z   S r   )timesleep)abdelays      r   slowaddr      s    JJuq5Lr   c                  R    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y)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}| j                  |d      dk(  sJ | j                  |d      dk(  sJ | j                  |d      dk(  sJ y )Nr	   :x:yr"   r#   :z   r%      r   r   getselfds     r   test_getzGetFunctionTestMixin.test_get.   sd    S$KT4/@Axx4 A%%%xx4 A%%%xx4 A%%%r   c                    dt         dft        ddfd}	 | j                  |d      }d}|d| dz  }J |j                  | j                  j                               # t
        $ r Y y 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   sz    S$KT4/@A	8XXa*F CCZxz22C7#**TXX%6%6775  		s   A 	A('A(c                    ddt         ddgfd}	 | j                  |dgdg      }d}|d| d	z  }J |j                  | j                  j                               # t        $ r Y y w xY w)
Nr	   r&   r   r   r   r   zr/   r0   r1   r2   )sumr)   r3   r4   r5   r6   s       r   test_nested_badkeyz'GetFunctionTestMixin.test_nested_badkey@   s    !3c
"34	8XXa8*c!23F CCZxz22C7#**TXX%6%6775  		s   A 	A&%A&c                J    dt         ddfd}| j                  |d      dk(  sJ y )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}| j                  |ddg      dk(  sJ | j                  |d      dk(  sJ y )	Nr	   r&   r   r   r;   )r	   r&   r<   r'   r=   r)   r*   s     r   test_get_with_listz'GetFunctionTestMixin.test_get_with_listP   sM    !3c
"34xxC:&&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}| j                  |d      g dk(  sJ | j                  |d      g dk(  sJ | j                  |d      ddgk(  sJ | j                  |d      d	gk(  sJ | j                  |d
      g dg dgk(  sJ | j                  |d      d	ddggd	gdgk(  sJ y )N)r	   r&   r'   r   r	   r   cr&   )r   r   rG   r,   efr,      rH   rI   )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9,,,xx39,,,xx3Aq6)))xx3A3&&&xx3Iy#9999xx3a!Q[!$4a#8888r   c                    ddt         ddgfd}| j                  |dgdg      dk(  sJ | j                  |d      dk(  sJ y )	Nr	   r&   r   r   r;   ))r	   r&   r<   r'   rD   r*   s     r   test_get_with_nested_listz.GetFunctionTestMixin.test_get_with_nested_listf   sO    !3c
"34xxSE3<(I555xx31$$$r   c                J    d }d|ddhfd}| j                  |d      dk(  sJ y )Nc                    | t        |      z   S r   )lenr   s     r   <lambda>zPGetFunctionTestMixin.test_get_works_with_unhashables_in_values.<locals>.<lambda>m   s    SV r   r	   r   r   r   r&   )r)   )r+   rI   r,   s      r   )test_get_works_with_unhashables_in_valuesz>GetFunctionTestMixin.test_get_works_with_unhashables_in_valuesl   s2    #1cA3-(xx31$$$r   c                d    dt         dft        t         dfdfd}| j                  |d      dk(  sJ y )Nr	   r   r   r;   r<      r(   r*   s     r   test_nested_tasksz&GetFunctionTestMixin.test_nested_tasksr   s6    3*C#sS+ABxx31$$$r   c                    t        d      D ci c]  }d|dz   z  t        d|z  f }}d|d<   | j                  |d      dk(  sJ y c c}w )Ni'  zx%dr	   r   x0x10000)ranger   r)   )r+   ir,   s      r   test_get_stack_limitz)GetFunctionTestMixin.test_get_stack_limitw   sW    8=eE1Ua!e_sEAI..EE$xx8$--- Fs   Ac                    ddl m} dt        dfddt        t        dfdfid}d	d
hd} |||      }| j	                  |d      dk(  sJ y )Nr   )r   r	   r   r   r<   r   )r   r   r
   r   rT   )dask.highlevelgraphr   r   r   r)   )r+   r   layersdependenciesgraphs        r   test_with_HighLevelGraphz-GetFunctionTestMixin.test_with_HighLevelGraph|   sY    6c3Z0cC:s=S7TUse,v|4xxs#q(((r   N)r4   
__module____qualname____doc__r-   r9   r>   rB   rE   rK   rM   rR   rU   r[   ra   r
   r   r   r    r       s>     &	8
8&%9 %%%
.
)r   r    c                X    	 t        j                  |       S # t        t        f$ r Y y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_nonerk      s/    &&t,,( s    ))c                    | j                   j                         D ]  \  }}|j                  |      s|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: )r^   items
startswithr5   list)hlgprefixkeylyrs       r   	hlg_layerrt      sX    JJ$$& S>>&!J *6*BtCJJ7G6HI
JJr   c                B    | j                   | j                         |      S )zDGet the layer from a HighLevelGraph at position ``i``, topologically)r^   _toposort_layers)rp   rZ   s     r   hlg_layer_topologicalrw      s    ::c**,Q/00r   c              #     K   | r%ddl }|j                  ||      5 }| ddd       yt        j                         5 }| ddd       y# 1 sw Y   yxY w# 1 sw Y   yxY ww)z*Conditionally check if a warning is raisedr   N)match)pytestwarns
contextlibnullcontext)	conditioncategorymessagerz   ctxs        r   _check_warningr      sm      \\('\2 	cI	 	 ##% 	I	 		 		 	s2   A$AA$A	A$AA$A!A$)g?)rp   r   rq   strreturnr   )rp   r   rZ   intr   r   )r~   boolr   ztype[Warning]r   r   )
__future__r   r|   rf   r   typingr   r]   r   r   r   r   r   r   r    rk   rt   rw   contextmanagerr   r
   r   r   <module>r      se    "     9
e) e)PK1
 	 	r   