o
    i                     @   s  U d Z ddlZddlZddlmZ ddlmZ ddlmZ ddlm	Z	 ddlm
Z
 ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ edZe
dZi Zeeef ed< e	d!ddddddee de	d dB deeeef geeef f fddZeddddeeef dee de	d dB deeef fddZ	d!ddddeeef dB dee de	d dB dee deeeef geeef f eeef B f
ddZdeeef dee dedB deeef fdd ZdS )"
    N)	timedelta)partial)Callable)Literal)TypeVar)overload)	ParamSpec)Unpack   )Config   )GPUSize)DynamicDuration)EmptyKwargsPRdecorated_cachedurationsizetaskr   r   )largexlargereturnc                C      d S N r   r   r   r   r   I/home/ubuntu/.local/lib/python3.10/site-packages/spaces/zero/decorator.pyGPU      r    c                C   r   r   r   r   r   r   r   r    "   r!   kwargsc                K   sP   d|v r	t d t| s"t| tr| }n| dur| }tt||dS t| ||S )a%  
    ZeroGPU decorator

    Args:
        task (`Callable | None`): Python function that requires CUDA
        duration (`int | datetime.timedelta`): Estimated duration in seconds or `datetime.timedelta`
        size (`"large" | "xlarge" | None`): Defaults to **large** when running on ZeroGPU

    Returns:
        `Callable`: GPU-ready function

    Examples:
        Basic usage:
        ```
        @spaces.GPU
        def fn(...):
            # CUDA is available here
            pass
        ```

        With custom duration:
        ```
        @spaces.GPU(duration=45) # Expressed in seconds
        def fn(...):
            pass
        ```

        With custom duration and size:
        ```
        @spaces.GPU(duration=45, size='xlarge')
        def fn(...):
            pass
        ```
    enable_queuez@`enable_queue` parameter is now ignored and always set to `True`Nr   )warningswarncallable
isinstancestrr   _GPU)r   r   r   r"   r   r   r   r    )   s   (

c                 C   s   t js| S ddlm} ddlm} ddlm} | tv rt|  S t	| r&t
t| r2|| ||}n|| ||}t|dd  t| |||i |S )Nr   )client)regular_function_wrapper)generator_function_wrapperzerogpu)r   zero_gpu r*   wrappersr+   r,   r   inspectiscoroutinefunctionNotImplementedErrorisgeneratorfunctionsetattrupdate)r   r   r   r*   r+   r,   	decoratedr   r   r   r)   \   s$   

r)   r   )__doc__r1   r$   datetimer   	functoolsr   typingr   r   r   r   typing_extensionsr	   r
   configr   apir   typesr   r   r   r   r   dict__annotations__r    r)   r   r   r   r   <module>   s    




(
3

