o
    ȷe}                     @   s@   d Z ddlZddlmZmZmZ ddlmZ dd Zdd	 Z	dS )
z&Useful decorators for Traitlets users.    N)	Parameter	Signature	signature   )	Undefinedc                 C   s   | t krtjS | S )z:Get default argument value, given the trait default value.)r   r   empty)value r	   Q/var/www/ideatree/venv/lib/python3.10/site-packages/traitlets/utils/decorators.py_get_default	   s   r   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 retd| g }	|	|dd 7 }	|durx|	| |	|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>NznThe {} 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   H   s
    )class_traitsitemsr   __init__list
parameterscopyr   r   POSITIONAL_ONLYPOSITIONAL_OR_KEYWORDappendVAR_POSITIONALr   VAR_KEYWORDRuntimeErrorformatr   __signature__)
cls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   sL   






r0   )
__doc__r   inspectr   r   r   	traitletsr   r   r0   r	   r	   r	   r
   <module>   s    