o
    aĎi                     @  st   d Z ddlmZ ddlZddlmZmZmZ ddlm	Z	m
Z
mZ ddlmZmZ dddZededZdddZdS )z&Useful decorators for Traitlets users.    )annotationsN)	Parameter	Signature	signature)AnyTypeTypeVar   )	HasTraits	Undefinedvaluer   returnc                 C  s   | t krtjS | S )z:Get default argument value, given the trait default value.)r   r   empty)r    r   V/home/jeff/fluffinator/venv/lib/python3.10/site-packages/traitlets/utils/decorators.py_get_default   s   r   T)boundclsType[T]c           
        s(  dd |    D }t| j}t|j g }d}g }d}|jD ]9}t|j| }|jtj	u s6|jtj
u r<|| q |jtju rE|}q |jtju rQ|| q |jtju rY|}q |du rftd|  dg }	|	|dd 7 }	|dury|	| |	|7 }	|	 fdd|D 7 }	|	| t|	| _| S )zYReturn a decorated class with a constructor signature that contain Trait names as kwargs.c                 S  s(   g | ]\}}| d s|t|jfqS )_)
startswithr   default_value).0namer   r   r   r   
<listcomp>   s    z(signature_has_traits.<locals>.<listcomp>NzThe zh constructor does not take **kwargs, which means that the signature can not be expanded with trait names   c                   s(   g | ]\}}| vrt |t j|d qS ))kinddefault)r   KEYWORD_ONLY)r   r   r   old_parameter_namesr   r   r   K   s
    )class_traitsitemsr   __init__list
parameterscopyr   r   POSITIONAL_ONLYPOSITIONAL_OR_KEYWORDappendVAR_POSITIONALr   VAR_KEYWORDRuntimeErrorr   __signature__)
r   traitsold_signatureold_positional_parametersold_var_positional_parameterold_keyword_only_parametersold_var_keyword_parameterparameter_name	parameternew_parametersr   r    r   signature_has_traits   sH   







r8   )r   r   r   r   )r   r   r   r   )__doc__
__future__r   r'   inspectr   r   r   typingr   r   r   	traitletsr
   r   r   r   r8   r   r   r   r   <module>   s    
