§
    �Štj  ã                  óè   — d dl mZ d dlZd dlZd dlmZ d dlmZmZm	Z	 d dl
mZ erd dlmZ d dlmZ  ed¦  «        Z e	d	¦  «        Z e	d
¦  «        Z e¦   «         Z ed¬¦  «        Zdd„Zdd„ZdS )é    )ÚannotationsN)ÚThreadPoolExecutor)ÚConcatenateÚTYPE_CHECKINGÚTypeVar)Ú	ParamSpec)ÚCallable)ÚFutureÚ_PÚ_TÚ_Cé   )Úmax_workersÚfuncúCallable[[], _T]Úreturnc                ó²   ‡ ‡‡‡— t           Št          j        ¦   «         ŠdŠd
ˆˆˆˆ fd„}dˆˆfd„}dˆˆˆfd„}dˆˆˆˆ fd	„}||_        ||_        ||_        |S )z�
    Like functools.cache but with a prefetch() method that starts computing
    the value in a background thread, and a set() method for prepopulating.
    Nr   r   c                 óÎ   •— ‰5  ‰ t           ur‰ cd d d ¦  «         S ‰�$‰                     ¦   «         Š d Š‰ cd d d ¦  «         S  ‰¦   «         Š ‰ cd d d ¦  «         S # 1 swxY w Y   d S ©N)Ú_cache_sentinelÚresult©Ú_cacheÚ_futureÚ_lockr   s   €€€€úT/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/utils/_functools.pyÚwrapperz#prefetchable_cache.<locals>.wrapper"   sú   ø€ àð 	ð 	Ø�_Ð,Ð,Øð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð Ð"Ø ŸšÑ)Ô)�Ø�Øð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð �T‘V”VˆFØð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   „AœAÁAÁAÁ!AÚvalÚNonec                ór   •— ‰5  ‰t           urt          d¦  «        ‚| Šd d d ¦  «         d S # 1 swxY w Y   d S )Nz$prefetchable_cache value already set)r   ÚRuntimeError)r   r   r   s    €€r   Úset_valz#prefetchable_cache.<locals>.set_val.   sŒ   ø€ àð 	ð 	Ø�_Ð,Ð,Ý"Ð#IÑJÔJÐJØˆFð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   „,¬0³0c                 óP   •— ‰5  t           Š d Šd d d ¦  «         d S # 1 swxY w Y   d S r   )r   )r   r   r   s   €€€r   Úclearz!prefetchable_cache.<locals>.clear5   sw   ø€ àð 	ð 	Ý$ˆFØˆGð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   „
›¢c                 ó¤   •— ‰5  ‰ t           us‰�	 d d d ¦  «         d S t                               ‰¦  «        Šd d d ¦  «         d S # 1 swxY w Y   d S r   )r   Ú_prefetch_executorÚsubmitr   s   €€€€r   Úprefetchz$prefetchable_cache.<locals>.prefetch;   s½   ø€ àð 	6ð 	6Ø�_Ð,Ð,°Ð0CØð	6ð 	6ð 	6ñ 	6ô 	6ð 	6ð 	6ð 	6õ )×/Ò/°Ñ5Ô5ˆGð	6ð 	6ð 	6ñ 	6ô 	6ð 	6ð 	6ð 	6ð 	6ð 	6ð 	6ð 	6øøøð 	6ð 	6ð 	6ð 	6ð 	6ð 	6s   „AžAÁA	ÁA	)r   r   )r   r   r   r   )r   r   )r   Ú	threadingÚLockÚsetr$   r(   )r   r   r"   r$   r(   r   r   r   s   `    @@@r   Úprefetchable_cacher,      sá   øøøø€ õ
 *€FÝŒNÑÔ€EØ!%€Gð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ðð ð ð ð ð ð ðð ð ð ð ð ð ð ð6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð €G„KØ€G„MØ€GÔØ€Nó    Úfú!Callable[Concatenate[_C, _P], _T]c                ó`   ‡ ‡— d‰ j         z   Št          j        ‰ ¦  «        dˆˆ fd
„¦   «         }|S )a  
    Like `@functools.cache` but for methods.

    `@functools.cache` (and similarly `@functools.lru_cache`) shouldn't be used
    on methods because it caches `self`, keeping it alive
    forever. `@cache_method` ignores `self` so won't keep `self` alive (assuming
    no cycles with `self` in the parameters).

    Footgun warning: This decorator completely ignores self's properties so only
    use it when you know that self is frozen or won't change in a meaningful
    way (such as the wrapped function being pure).
    Ú_cache_method_Úselfr   Úargsú_P.argsÚkwargsú	_P.kwargsr   r   c                óä   •— |rt          d¦  «        ‚t          | ‰d ¦  «        x}si }t          | ‰|¦  «         |                     |t          ¦  «        }|t          ur|S  ‰| g|¢R i |¤Ž}|||<   |S )Nz.cache_method does not accept keyword arguments)ÚAssertionErrorÚgetattrÚsetattrÚgetr   )r2   r3   r5   ÚcacheÚcached_valueÚvalueÚ
cache_namer.   s         €€r   Úwrapzcache_method.<locals>.wrapY   sœ   ø€ àð 	SÝ Ð!QÑRÔRÐRÝ   z°4Ñ8Ô8Ð8�ð 	-ØˆEÝ�D˜* eÑ,Ô,Ð,Ø—y’y ¥Ñ7Ô7ˆØ�Ð.Ð.ØÐØ��$Ð(˜Ð(Ð(Ð( Ð(Ð(ˆØˆˆd‰Øˆr-   )r2   r   r3   r4   r5   r6   r   r   )Ú__name__Ú	functoolsÚwraps)r.   r@   r?   s   ` @r   Úcache_methodrD   H   sQ   øø€ ð " A¤JÑ.€Jå„_�QÑÔðð ð ð ð ð ñ Ôðð €Kr-   )r   r   r   r   )r.   r/   r   r/   )Ú
__future__r   rB   r)   Úconcurrent.futuresr   Útypingr   r   r   Útyping_extensionsr   Úcollections.abcr	   r
   r   r   r   Úobjectr   r&   r,   rD   © r-   r   ú<module>rL      s  ðØ "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø Ð Ð Ð Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'ð ð *Ø(Ð(Ð(Ð(Ð(Ð(Ø)Ð)Ð)Ð)Ð)Ð)ð €Yˆt�_„_€Ø€WˆT�]„]€Ø€WˆT�]„]€ð �&‘(”(€à'Ð'°AÐ6Ñ6Ô6Ð ð,ð ,ð ,ð ,ð^ð ð ð ð ð r-   