
    Lg                        d dl mZ d dlZd dlmZ d dlmZ d dlmZ  ej                  d      dz   ej                  d      dz  z   Z
 G d	 d
e      Zy)    )annotationsN)Number)default_timer)CallbackgGz?    c                  .    e Zd ZdZd Zd Zd Zd Zd Zy)Cachea  Use cache for computation

    Examples
    --------

    >>> cache = Cache(1e9)  # doctest: +SKIP

    The cache can be used locally as a context manager around ``compute`` or
    ``get`` calls:

    >>> with cache:  # doctest: +SKIP
    ...     result = x.compute()

    You can also register a cache globally, so that it works for all
    computations:

    >>> cache.register()    # doctest: +SKIP
    >>> cache.unregister()  # doctest: +SKIP
    c                
   	 dd l }|j                  | _        t        |t              r |j                  |g|i |}n|s|rJ || _        t               | _
        y # t        $ r}t        dt        |       d      |d }~ww xY w)Nr   zCache requires cachey, "z" problem importing)cacheyImportErrorstrnbytes_nbytes
isinstancer   r
   cachedict
starttimes)selfr   argskwargsr   exs         *lib/python3.12/site-packages/dask/cache.py__init__zCache.__init__!   s    	
 }}eV$ FLL888EF**
&  	*3r7)3FG	s   A 	B$A==Bc                    t               | _        t        |      t        | j                  j                        z  }|D ]  }| j                  j                  |   ||<     y N)r   	durationssetr   data)r   dskoverlapkeys       r   _startzCache._start0   sF    c(S11Czzs+CH     c                2    t               | j                  |<   y r   )r   r   )r   r"   r    states       r   _pretaskzCache._pretask6   s    ,r$   c                F    t                j                  |   z
  }|d   |   }|r|t         fd|D              z  }| j                  |<    j	                  |      t
        z   t        j                  |      dz  z   } j                  j                  ||||z  dz  |       y )Ndependenciesc              3  V   K   | ]   }j                   j                  |d        " yw)r   N)r   get).0kr   s     r   	<genexpr>z"Cache._posttask.<locals>.<genexpr>=   s#     CdDNN..q!4ds   &)r   g    eA)costr   )
r   r   maxr   r   overheadsys	getsizeofr   put)	r   r"   valuer    r&   iddurationdepsnbs	   `        r   	_posttaskzCache._posttask9   s     ?T__S%99^$S)CdCCCH&s\\% 8+cmmC.@1.DD

sE2(;BGr$   c                l    | j                   j                          | j                  j                          y r   )r   clearr   )r   r    r&   erroreds       r   _finishzCache._finishB   s"    r$   N)	__name__
__module____qualname____doc__r   r#   r'   r:   r>   r   r$   r   r
   r
      s!    (!,/Hr$   r
   )
__future__r   r2   numbersr   timeitr   dask.callbacksr   r3   r1   r
   r   r$   r   <module>rG      sJ    " 
    #3=="]S]]2%6%::8H 8r$   