o
    .i                     @   s  d Z ddlZddlZddlZddlmZmZ ddlmZm	Z	m
Z
 ddlmZmZ ddlmZ ddlmZ eeZedZed	Zed
edef dZdedefddZdeedf deedf fddZ		d)dedeeg ef B dedB deegef fddZddddedeeg ef B dedB deegef fddZedddd edef d!ed"ed#edef
d$d%Zdddd edef d&eeef dB d"ed#ede eef f
d'd(Z!dS )*zh
Contains helpers that are applied to functions.

This is similar in concept to the `functools` module.
    N)CallableMapping)	lru_cachepartialwraps)AnyTypeVar)	ParamSpec)init_loggerPTF.)boundvaluereturnc                 K   s   | S )z!Returns the first provided value. )r   kwargsr   r   R/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/vllm/utils/func_utils.pyidentity   s   r   fc                    s4   dt jdt jdd f fddd_t _S )Nargsr   r   c                     s^   j rd S j j sd_  | i |W  d    S W d    d S 1 s(w   Y  d S )NT)has_runlock)r   r   r   wrapperr   r   r   "   s   "zrun_once.<locals>.wrapperF)r   r   r   r   	threadingLockr   )r   r   r   r   run_once!   s    	
r   Tstart_indexis_deprecatedadditional_messagec                    s0   t s	ttdtdtf fdd}|S )Nfnr   c                    sR   t  j}t jjt jjffdd| D t  fdd}|S )Nc                    s   g | ]\}}|j  v r|qS r   )kind).0kwparam)	pos_typesr   r   
<listcomp>>   s    z3deprecate_args.<locals>.wrapper.<locals>.<listcomp>c                     s\    r't |  }|r'd| d} d ur|d  7 }tjt|dd | i |S )NzThe positional arguments 7 are deprecated and will be removed in a future update.    
stacklevel)lenwarningswarnDeprecationWarning)r   r   deprecated_argsmsg)r    r!   r   pos_kwsr   r   r   inner@   s   
z.deprecate_args.<locals>.wrapper.<locals>.inner)inspect	signature
parameters	ParameterPOSITIONAL_ONLYPOSITIONAL_OR_KEYWORDitemsr   )r!   paramsr4   r    r   r   )r!   r3   r&   r   r   8   s   zdeprecate_args.<locals>.wrapper)callabler   r   r   )r   r   r    r   r   r=   r   deprecate_args0   s   
r?   )r   r    kwsc                    s8   t |tsttdtdtf fdd}|S )Nr!   r   c                    s   t   fdd}|S )Nc                     sX    r%|  @ }|r%d| d} d ur|d  7 }tjt|dd | i |S )NzThe keyword arguments r(   r)   r*   r+   )keysr.   r/   r0   )r   r   deprecated_kwargsr2   )r    deprecated_kwsr!   r   r   r   r4   c   s   
z0deprecate_kwargs.<locals>.wrapper.<locals>.inner)r   )r!   r4   r    rC   r   )r!   r   r   b   s   z!deprecate_kwargs.<locals>.wrapper)setr>   r   r   r   )r   r    r@   r   r   rD   r   deprecate_kwargsX   s
   
rF   Frequires_kw_onlyallow_var_kwargsr>   kw_namerH   rI   c          	      C   s   t | j}|s
dS ||}tt jjt jjt jjf}|r?|j	|v }|r0|r0|j	t jjkr0dS |r9|j	t jjks=|s?|r?dS |rU|t
t| }|j	t jjkoT|j|kS dS )zCheck if a keyword is a valid kwarg for a callable; if requires_kw_only
    disallows kwargs names that can also be positional arguments.
    FT)r5   r6   r7   getrE   r8   r9   r:   KEYWORD_ONLYr"   nextreversedVAR_KEYWORDname)	r>   rJ   rH   rI   r<   	param_valpassable_kw_typesis_sig_param
last_paramr   r   r   supports_kw{   s<   

rU   	overridesc                   sZ   |si S  fdd|  D }| |  }|r+r%td| |S td| |S )a  
    Given a callable which has one or more keyword only params and a dict
    mapping param names to values, drop values that can be not be kwarg
    expanded to overwrite one or more keyword-only args. This is used in a
    few places to handle custom processor overrides for multimodal models,
    e.g., for profiling when processor options provided by the user
    may affect the number of mm tokens per instance.

    Args:
        callable: Callable which takes 0 or more keyword only arguments.
                  If None is provided, all overrides names are allowed.
        overrides: Potential overrides to be used when invoking the callable.
        allow_var_kwargs: Allows overrides that are expandable for var kwargs.

    Returns:
        Dictionary containing the kwargs to be leveraged which may be used
        to overwrite one or more keyword only arguments when invoking the
        callable.
    c                    s&   i | ]\}}t | d r||qS )rG   )rU   )r#   
kwarg_namevalrI   r>   rH   r   r   
<dictcomp>   s    z4get_allowed_kwarg_only_overrides.<locals>.<dictcomp>zRThe following intended overrides are not keyword-only args and will be dropped: %szMThe following intended overrides are not keyword args and will be dropped: %s)r;   rA   loggerwarning)r>   rV   rH   rI   filtered_overridesdropped_keysr   rY   r    get_allowed_kwarg_only_overrides   s$   r_   )TN)"__doc__r5   r   r.   collections.abcr   r   	functoolsr   r   r   typingr   r   typing_extensionsr	   vllm.loggerr
   __name__r[   r   r   r   r   r   intboolstrr?   rF   objectrU   dictr_   r   r   r   r   <module>   s   "
*
#
:

