B
    äŠ<[ž  ã               @   sJ   d Z ddlZddlmZ er2ddlmZ dd„ ZnddlmZ dd„ ZdS )zñ
    getargspec excerpted from:
    
    sphinx.util.inspect
    ~~~~~~~~~~~~~~~~~~~
    Helpers for inspecting Python modules.
    :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
é    N)ÚPY3)Úpartialc       	   
   C   sZ  t  | ¡r| j} t| ƒtkr| j}t|ƒ}t|d ƒ}t|d pDdƒ}t|d ƒ}t|d p`i ƒ}| j	r||t
| j	ƒd… }xz| jp†dD ]l}y<| |¡t
|ƒ }||= y
||= W n tk
rÄ   Y nX W qˆ tk
rò   | |¡}||= ||= Y qˆX qˆW t  ||d |d t|ƒ|||d	 ¡S xt| d
ƒr6| j} q W t  | ¡sPtd|  ƒ‚t  | ¡S )z?Like inspect.getargspec but supports functools.partial as well.r   é   © é   é   Né   é   é   Ú__wrapped__z%r is not a Python function)ÚinspectÚismethodÚ__func__Útyper   ÚfuncÚ
getargspecÚlistÚdictÚargsÚlenÚkeywordsÚindexÚ
IndexErrorÚ
ValueErrorZFullArgSpecÚtupleÚhasattrr   Ú
isfunctionÚ	TypeErrorZgetfullargspec)	r   Z	orig_funcZargspecr   ÚdefaultsZkwoargsZkwodefsÚargÚir   r   ú9lib/python3.7/site-packages/traitlets/utils/getargspec.pyr      s>    



r   c       	   	   C   s  t  | ¡r| j} d}t| ƒtkrJ| j}|dkr2i }t| jƒ| ¡ f}| j	} t  
| ¡s`td|  ƒ‚t  | j¡\}}}| j}|dkr†g }nt|ƒ}|d r¦||d d… }|d røxH|d D ]<}| |¡t|ƒ }||= y
||= W q¸ tk
rò   Y q¸X q¸W t  ||||¡S )z?Like inspect.getargspec but supports functools.partial as well.)r   r   Nz%r is not a Python functionr   r   )r   r   r   r   r   r   r   r   Úkeysr   r   r   ZgetargsÚ__code__Ú__defaults__r   r   r   ZArgSpec)	r   Úpartsr   r   ZvarargsZvarkwZfunc_defaultsr   r    r   r   r!   r   9   s6    



)Ú__doc__r   Zsixr   Ú	functoolsr   r   r   r   r   r!   Ú<module>
   s   
#