
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3

  \ÞÈ ã               @   sœ  dóZ ddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZ ddlmZmZ eƒ Zx"ejjƒ D ]\ZZeede < qºW dôZd	d
„ Zdd„ Z dd„ Z!dd„ Z"dd„ Z#e$edƒ�rdd„ Z%ndd„ Z%e$edƒ�r2dd„ Z&ndd„ Z&dd„ Z'dd„ Z(dd „ Z)d!d"„ Z*d#d$„ Z+d%d&„ Z,d'd(„ Z-d)d*„ Z.d+d,„ Z/d-d.„ Z0d/d0„ Z1d1d2„ Z2d3d4„ Z3d5d6„ Z4dõd7d8„Z5ed9d:ƒZ6d;d<„ Z7d=d>„ Z8dd?œd@dA„Z9dBdC„ Z:dDdE„ Z;dFdG„ Z<dHdI„ Z=dJdK„ Z>dLdM„ Z?dNdO„ Z@dPdQ„ ZAdödRdS„ZBi ZCi ZDd÷dTdU„ZEdVdW„ ZFdXdY„ ZGG dZd[„ d[eHƒZIG d\d]„ d]ƒZJd^d_„ ZKd`da„ ZLdbdc„ ZMddde„ ZNdødgdh„ZOedidjƒZPdkdl„ ZQdmdn„ ZRedodpƒZSdqdr„ ZTedsdtƒZUdudv„ ZVedwdxƒZWdydz„ ZXdùd{d|„ZYd}d~„ ZZdddf i i e[dd€„ d�d€„ d‚d€„ dƒd€„ eYfd„d…„Z\e[d†d€„ d‡d€„ dˆd€„ fd‰dŠ„Z]d‹dŒ„ Z^d�dŽ„ Z_d�d�„ Z`ed‘d’ƒZad“d”„ Zbed•d–ƒZcdúd—d˜„Zdd™dš„ Zeed›dûecjf ƒZgdüd�dž„ZhdýdŸd „Zid¡d¢„ Zjdþd£d¤„Zkdÿd¥d¦„Zlemƒ Znd§d¨„ Zod©dª„ Zpd«d¬„ Zqd­d®„ Zrd¯d°„ Zsenfd±d²„Ztd³Zud´ZvdµZwd¶Zxd·d¸„ Zyd¹dº„ Zzd»Z{d¼Z|d½Z}d¾Z~d¿dÀ„ ZdÁdÂ„ Z€e�e�j‚ƒZƒe�e„j‚ƒZ…e�e†j‡dÃ ƒZˆeƒe…eˆej‰fZŠdÄdÅ„ Z‹f fdÆdÇ„ZŒdÈdÉ„ Z�dÊdË„ ZŽdÌdÍ„ Z�dÎdÏ„ Z�dÐdÑ„ Z‘�d dÓdÔ„Z’�ddÕdÖ„Z“d×dØ„ Z”dÒdÒdÙœdÚdÛ„Z•G dÜdÝ„ dÝƒZ–G dÞdß„ dßƒZ—G dàdá„ dáej˜ƒZ™e™jšZ›e™jœZ�e™jžZŸe™j Z¡e™j¢Z£e›dâe�dãeŸdäe¡dåe£dæiZ¤e¤j¥Z¦G dçdè„ dèƒZ§G dédê„ dêƒZ¨G dëdì„ dìƒZ©dÒdíœdîdï„Zªdðdñ„ Z«e¬dòk�r˜e«ƒ  dS (  úKa-Ping Yee <ping@lfw.org>ú'Yury Selivanov <yselivanov@sprymix.com>é    N)Ú
attrgetter)Ú
namedtupleÚOrderedDictZCO_é   é   c             C   s   t | tjƒS )N)Ú
isinstanceÚtypesÚ
ModuleType)Úobject© r   ú/usr/lib64/python3.6/inspect.pyÚismodule@   s    r   c             C   s
   t | tƒS )N)r	   Útype)r   r   r   r   ÚisclassI   s    r   c             C   s   t | tjƒS )N)r	   r
   Ú
MethodType)r   r   r   r   ÚismethodQ   s    r   c             C   s:   t | ƒst| ƒst| ƒrdS t| ƒ}t|dƒo8t|dƒ S )NFÚ__get__Ú__set__)r   r   Ú
isfunctionr   Úhasattr)r   Útpr   r   r   Úismethoddescriptor[   s    r   c             C   s8   t | ƒst| ƒst| ƒrdS t| ƒ}t|dƒo6t|dƒS )NFr   r   )r   r   r   r   r   )r   r   r   r   r   Úisdatadescriptoro   s    r   ÚMemberDescriptorTypec             C   s   t | tjƒS )N)r	   r
   r   )r   r   r   r   Úismemberdescriptor   s    r   c             C   s   dS )NFr   )r   r   r   r   r   ‡   s    ÚGetSetDescriptorTypec             C   s   t | tjƒS )N)r	   r
   r   )r   r   r   r   Úisgetsetdescriptor�   s    r   c             C   s   dS )NFr   )r   r   r   r   r   ˜   s    c             C   s   t | tjƒS )N)r	   r
   ÚFunctionType)r   r   r   r   r   Ÿ   s    r   c             C   s    t t| ƒst| ƒo| jjt@ ƒS )N)Úboolr   r   Ú__code__Úco_flagsZCO_GENERATOR)r   r   r   r   Úisgeneratorfunction¬   s    r#   c             C   s    t t| ƒst| ƒo| jjt@ ƒS )N)r    r   r   r!   r"   ZCO_COROUTINE)r   r   r   r   Úiscoroutinefunction´   s    r$   c             C   s    t t| ƒst| ƒo| jjt@ ƒS )N)r    r   r   r!   r"   ZCO_ASYNC_GENERATOR)r   r   r   r   Úisasyncgenfunction¼   s    r%   c             C   s   t | tjƒS )N)r	   r
   ÚAsyncGeneratorType)r   r   r   r   Ú
isasyncgenÅ   s    r'   c             C   s   t | tjƒS )N)r	   r
   ÚGeneratorType)r   r   r   r   ÚisgeneratorÉ   s    r)   c             C   s   t | tjƒS )N)r	   r
   ÚCoroutineType)r   r   r   r   ÚiscoroutineÚ   s    r+   c             C   s6   t | tjƒp4t | tjƒr(t| jjt@ ƒp4t | tj	j
ƒS )N)r	   r
   r*   r(   r    Úgi_coder"   ZCO_ITERABLE_COROUTINEÚcollectionsÚabcÚ	Awaitable)r   r   r   r   ÚisawaitableÞ   s    r0   c             C   s   t | tjƒS )N)r	   r
   ÚTracebackType)r   r   r   r   Úistracebackå   s    r2   c             C   s   t | tjƒS )N)r	   r
   Ú	FrameType)r   r   r   r   Úisframeï   s    r4   c             C   s   t | tjƒS )N)r	   r
   ÚCodeType)r   r   r   r   Úiscodeý   s    r6   c             C   s   t | tjƒS )N)r	   r
   ÚBuiltinFunctionType)r   r   r   r   Ú	isbuiltin  s    r8   c             C   s    t | ƒpt| ƒpt| ƒpt| ƒS )N)r8   r   r   r   )r   r   r   r   Ú	isroutine  s    r9   c             C   s¬   t | tƒsdS | jt@ rdS tt| ƒtjƒs0dS t| dƒr>dS x&| jj	ƒ D ]\}}t
|ddƒrJdS qJW x@| jD ]6}x0t
|df ƒD ] }t
| |d ƒ}t
|ddƒr€dS q€W qnW dS )NFTÚ__abstractmethods__Ú__isabstractmethod__)r	   r   Ú	__flags__ÚTPFLAGS_IS_ABSTRACTÚ
issubclassr.   ÚABCMetar   Ú__dict__ÚitemsÚgetattrÚ	__bases__)r   ÚnameÚvalueÚbaser   r   r   Ú
isabstract%  s"    


rG   c             C   s&  t | ƒr| ft| ƒ }nf }g }tƒ }t| ƒ}yBx<| jD ]2}x,|jjƒ D ]\}}t|tj	ƒrH|j
|ƒ qHW q8W W n tk
r„   Y nX xŠ|D ]‚}	yt| |	ƒ}
|	|kr¨t‚W n: tk
rä   x$|D ]}|	|jkrÀ|j|	 }
P qÀW wŒY nX | sö||
ƒ�r|j
|	|
fƒ |j|	ƒ qŒW |jdd„ d� |S )Nc             S   s   | d S )Nr   r   )Zpairr   r   r   Ú<lambda>f  s    zgetmembers.<locals>.<lambda>)Úkey)r   ÚgetmroÚsetÚdirrC   r@   rA   r	   r
   ÚDynamicClassAttributeÚappendÚAttributeErrorrB   ÚaddÚsort)r   Z	predicateÚmroÚresultsÚ	processedÚnamesrF   ÚkÚvrI   rE   r   r   r   Ú
getmembers=  s:    




rX   Ú	Attributezname kind defining_class objectc             C   s\  t | ƒ}t t| ƒƒ}tdd„ |D ƒƒ}| f| }|| }t| ƒ}x:|D ]2}x,|jjƒ D ]\}}t|tjƒrV|j	|ƒ qVW qFW g }	t
ƒ }
�xÎ|D �]Ä}d }d }d }||
k�rŒy|dkr¼tdƒ‚t| |ƒ}W n" tk
rê } zW Y d d }~X n¢X t|d|ƒ}||k�rŒd }d }x(|D ] }t||d ƒ}||k�r|}�qW xH|D ]@}y|j| |ƒ}W n tk
�rh   �w:Y nX ||k�r:|}�q:W |d k	�rŒ|}x4|D ],}||jk�r’|j| }||k�rº|}P �q’W |d k�rÎqŽ|d k	�rÜ|n|}t|tƒ�röd}|}n@t|tƒ�rd}|}n*t|tƒ�r"d}|}nt|ƒ�r2d	}nd
}|	j	t||||ƒƒ |
j|ƒ qŽW |	S )Nc             S   s   g | ]}|t tfkr|‘qS r   )r   r   )Ú.0Úclsr   r   r   ú
<listcomp>ˆ  s    z(classify_class_attrs.<locals>.<listcomp>r@   z)__dict__ is special, don't want the proxyÚ__objclass__zstatic methodzclass methodÚpropertyÚmethodÚdata)rJ   r   ÚtuplerL   r@   rA   r	   r
   rM   rN   rK   Ú	ExceptionrB   Ú__getattr__rO   ÚstaticmethodÚclassmethodr^   r9   rY   rP   )r[   rR   ZmetamroZclass_basesZ	all_basesrU   rF   rV   rW   ÚresultrT   rD   ZhomeclsZget_objZdict_objÚexcZlast_clsZsrch_clsZsrch_objÚobjÚkindr   r   r   Úclassify_class_attrsk  s€    

















rj   c             C   s   | j S )N)Ú__mro__)r[   r   r   r   rJ   ß  s    rJ   )Ústopc               s€   ˆ d krdd„ }n‡ fdd„}| }t |ƒ|i}tjƒ }xD|| ƒrz| j} t | ƒ}||ksbt|ƒ|krptdj|ƒƒ‚| ||< q8W | S )Nc             S   s
   t | dƒS )NÚ__wrapped__)r   )Úfr   r   r   Ú_is_wrapperö  s    zunwrap.<locals>._is_wrapperc                s   t | dƒoˆ | ƒ S )Nrm   )r   )rn   )rl   r   r   ro   ù  s    z!wrapper loop when unwrapping {!r})ÚidÚsysÚgetrecursionlimitrm   ÚlenÚ
ValueErrorÚformat)Úfuncrl   ro   rn   ÚmemoZrecursion_limitZid_funcr   )rl   r   Úunwrapå  s    

rx   c             C   s   | j ƒ }t|ƒt|jƒ ƒ S )N)Ú
expandtabsrs   Úlstrip)ÚlineZexpliner   r   r   Ú
indentsize	  s    r|   c             C   sR   t jj| jƒ}|d krd S x&| jjdƒd d… D ]}t||ƒ}q0W t|ƒsNd S |S )NÚ.r   éÿÿÿÿ)rq   ÚmodulesÚgetÚ
__module__Ú__qualname__ÚsplitrB   r   )rv   r[   rD   r   r   r   Ú
_findclass  s    r„   c             C   sÔ  t | ƒrRxD| jD ]:}|tk	ry
|j}W n tk
r<   wY nX |d k	r|S qW d S t| ƒr–| jj}| j}t |ƒrŽt	t	||d ƒdƒ| jkrŽ|}n|j
}nît| ƒrÈ| j}t| ƒ}|d ksÂt	||ƒ| k	rÆd S n¼t| ƒ�r
| j}| j}t |ƒoø|jd | | jk�r|}n|j
}nzt| tƒ�rJ| j}|j}t|ƒ}|d k�sDt	||ƒ| k	�r„d S n:t| ƒ�s^t| ƒ�r€| j}| j}t	||ƒ| k	�r„d S nd S xJ|jD ]@}yt	||ƒj}W n tk
�rº   �wŒY nX |d k	�rŒ|S �qŒW d S )NÚ__func__r}   )r   rk   r   Ú__doc__rO   r   r…   Ú__name__Ú__self__rB   Ú	__class__r   r„   r8   r‚   r	   r^   Úfgetr   r   r]   )rh   rF   ÚdocrD   Úselfr[   rv   r   r   r   Ú_finddoc  sb    




r�   c             C   sd   y
| j }W n tk
r   d S X |d krNyt| ƒ}W n ttfk
rL   d S X t|tƒs\d S t|ƒS )N)r†   rO   r�   Ú	TypeErrorr	   ÚstrÚcleandoc)r   r‹   r   r   r   ÚgetdocS  s    

r‘   c             C   sü   y| j ƒ jdƒ}W n tk
r&   d S X tj}x:|dd … D ]*}t|jƒ ƒ}|r<t|ƒ| }t||ƒ}q<W |r~|d jƒ |d< |tjk r´x*tdt|ƒƒD ]}|| |d … ||< q˜W x|rÎ|d  rÎ|j	ƒ  q¶W x|rì|d  rì|j	dƒ qÒW dj
|ƒS d S )NÚ
r   r   r~   )ry   rƒ   ÚUnicodeErrorrq   Úmaxsizers   rz   ÚminÚrangeÚpopÚjoin)r‹   ÚlinesZmarginr{   ZcontentÚindentÚir   r   r   r�   f  s(    
 r�   c             C   s¼   t | ƒr&t| dƒr| jS tdj| ƒƒ‚t| ƒrdt| dƒrVtjj| j	ƒ} t| dƒrV| jS tdj| ƒƒ‚t
| ƒrr| j} t| ƒr€| j} t| ƒrŽ| j} t| ƒrœ| j} t| ƒrª| jS tdj| ƒƒ‚d S )NÚ__file__z{!r} is a built-in moduler�   z{!r} is a built-in classzO{!r} is not a module, class, method, function, traceback, frame, or code object)r   r   rœ   rŽ   ru   r   rq   r   r€   r�   r   r…   r   r!   r2   Útb_framer4   Úf_coder6   Úco_filename)r   r   r   r   Úgetfileƒ  s,    


r    c             C   sT   t jj| ƒ}dd„ tjjƒ D ƒ}|jƒ  x&|D ]\}}|j|ƒr.|d |… S q.W d S )Nc             S   s   g | ]}t |ƒ |f‘qS r   )rs   )rZ   Úsuffixr   r   r   r\      s   z!getmodulename.<locals>.<listcomp>)ÚosÚpathÚbasenameÚ	importlibÚ	machineryÚall_suffixesrQ   Úendswith)r£   ZfnameÚsuffixesZneglenr¡   r   r   r   Úgetmodulenameœ  s    
rª   c                sº   t | ƒ‰ tjjd d … }|tjjd d … 7 }t‡ fdd„|D ƒƒr`tjjˆ ƒd tjj	d  ‰ nt‡ fdd„tjj
D ƒƒr~d S tjjˆ ƒrŽˆ S tt| ˆ ƒdd ƒd k	r¨ˆ S ˆ tjkr¶ˆ S d S )Nc             3   s   | ]}ˆ j |ƒV  qd S )N)r¨   )rZ   Ús)Úfilenamer   r   ú	<genexpr>¯  s    z getsourcefile.<locals>.<genexpr>r   c             3   s   | ]}ˆ j |ƒV  qd S )N)r¨   )rZ   r«   )r¬   r   r   r­   ²  s    Ú
__loader__)r    r¥   r¦   ÚDEBUG_BYTECODE_SUFFIXESÚOPTIMIZED_BYTECODE_SUFFIXESÚanyr¢   r£   ÚsplitextÚSOURCE_SUFFIXESÚEXTENSION_SUFFIXESÚexistsrB   Ú	getmoduleÚ	linecacheÚcache)r   Zall_bytecode_suffixesr   )r¬   r   Úgetsourcefile¨  s    
r¹   c             C   s,   |d krt | ƒpt| ƒ}tjjtjj|ƒƒS )N)r¹   r    r¢   r£   ÚnormcaseÚabspath)r   Ú	_filenamer   r   r   Ú
getabsfile¾  s    r½   c       
      C   s‚  t | ƒr| S t| dƒr$tjj| jƒS |d k	rD|tkrDtjjt| ƒS yt| |ƒ}W n tk
rf   d S X |tkr€tjjt| ƒS xnt	tjj
ƒ ƒD ]\\}}t |ƒr�t|dƒr�|j}|tj|d ƒkrÂq�|t|< t|ƒ}|j t|< ttjj|ƒ< q�W |tk�r
tjjt| ƒS tjd }t| dƒ�s$d S t|| jƒ�rLt|| jƒ}|| k�rL|S tjd }t|| jƒ�r~t|| jƒ}	|	| k�r~|S d S )Nr�   rœ   Ú__main__r‡   Úbuiltins)r   r   rq   r   r€   r�   Úmodulesbyfiler½   rŽ   ÚlistrA   rœ   Ú_filesbymodnamer‡   r¢   r£   ÚrealpathrB   )
r   r¼   ÚfileÚmodnameÚmodulern   ÚmainZ
mainobjectZbuiltinZbuiltinobjectr   r   r   r¶   Ê  sD    





r¶   c       
      C   sÒ  t | ƒ}|rtj|ƒ n$t| ƒ}|jdƒo2|jdƒs<tdƒ‚t| |ƒ}|rZtj||j	ƒ}n
tj|ƒ}|sptdƒ‚t
| ƒr€|dfS t| ƒ�r | j}tjd| d ƒ}g }xRtt|ƒƒD ]B}|j|| ƒ}|r´|| d dkrâ||fS |j|jd	ƒ|fƒ q´W |�r|jƒ  ||d d	 fS td
ƒ‚t| ƒ�r0| j} t| ƒ�r@| j} t| ƒ�rP| j} t| ƒ�r`| j} t| ƒ�rÆt| dƒ�s~tdƒ‚| jd	 }	tjdƒ}x*|	dk�r¼|j||	 ƒ�r°P |	d	 }	�q”W ||	fS tdƒ‚d S )Nú<ú>zsource code not availablezcould not get source coder   z^(\s*)class\s*z\bÚcr   zcould not find class definitionÚco_firstlinenoz"could not find function definitionz>^(\s*def\s)|(\s*async\s+def\s)|(.*(?<!\w)lambda(:|\s))|^(\s*@)zcould not find code object) r¹   r·   Ú
checkcacher    Ú
startswithr¨   ÚOSErrorr¶   Úgetlinesr@   r   r   r‡   ÚreÚcompiler–   rs   ÚmatchrN   ÚgrouprQ   r   r…   r   r!   r2   r�   r4   rž   r6   r   rË   )
r   rÄ   rÆ   r™   rD   ZpatZ
candidatesr›   rÒ   Úlnumr   r   r   Ú
findsourceø  s^    









 rÕ   c             C   s>  yt | ƒ\}}W n ttfk
r(   d S X t| ƒròd}|rR|d d d… dkrRd}x(|t|ƒk rz|| jƒ dkrz|d }qTW |t|ƒk rî|| d d… dkrîg }|}x>|t|ƒk râ|| d d… dkrâ|j|| jƒ ƒ |d }q¦W dj|ƒS �nH|dk�r:t	|| ƒ}|d }|dk�r:|| j
ƒ d d… dk�r:t	|| ƒ|k�r:|| jƒ j
ƒ g}|dk�rØ|d }|| jƒ j
ƒ }x\|d d… dk�rÖt	|| ƒ|k�rÖ|g|d d…< |d }|dk �rÂP || jƒ j
ƒ }�q|W x*|�r|d jƒ dk�rg |d d…< �qÚW x*|�r.|d jƒ dk�r.g |d	d …< �qW dj|ƒS d S )
Nr   é   z#!r   Ú ú#)r×   rØ   r~   r~   )rÕ   rÎ   rŽ   r   rs   ÚstriprN   ry   r˜   r|   rz   )r   r™   rÔ   ÚstartZcommentsÚendrš   Zcommentr   r   r   ÚgetcommentsA  sJ      "
$
&
 rÜ   c               @   s   e Zd ZdS )Ú
EndOfBlockN)r‡   r�   r‚   r   r   r   r   rÝ   n  s    rÝ   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚBlockFinderc             C   s.   d| _ d| _d| _d| _d| _d| _d| _d S )Nr   Fr   )rš   ÚislambdaÚstartedÚpasslineÚindecoratorÚdecoratorhasargsÚlast)rŒ   r   r   r   Ú__init__r  s    zBlockFinder.__init__c             C   s&  | j  rD| j rD|dkr d| _n|dkr<|dkr6d| _d| _ d| _nÞ|dkrZ| jrXd| _nÈ|dkrv| jrtd| _d| _n¬|tjkr°d| _|d	 | _| jršt‚| jr®| j r®d| _nr| jr¸nj|tj	krÖ| j
d
 | _
d| _nL|tjk�r | j
d
 | _
| j
d	k�r"t‚n"| j
d	k�r"|tjtjfk�r"t‚d S )Nú@TÚdefÚclassÚlambdaú(ú)Fr   r   )rç   rè   ré   )rà   râ   rß   rá   rã   ÚtokenizeÚNEWLINErä   rÝ   ÚINDENTrš   ÚDEDENTÚCOMMENTÚNL)rŒ   r   ÚtokenZsrowcolZerowcolr{   r   r   r   Ú
tokeneater{  sB    


zBlockFinder.tokeneaterN)r‡   r�   r‚   rå   ró   r   r   r   r   rÞ   p  s   	rÞ   c             C   sZ   t ƒ }y,tjt| ƒjƒ}x|D ]}|j|Ž  qW W n ttfk
rJ   Y nX | d |j… S )N)	rÞ   rì   Úgenerate_tokensÚiterÚ__next__ró   rÝ   ÚIndentationErrorrä   )r™   ZblockfinderÚtokensZ_tokenr   r   r   Úgetblock§  s    
rù   c             C   sb   t | ƒ} t| ƒ\}}t| ƒr"| j} t| ƒs>t| ƒrF| jjdkrF|dfS t||d … ƒ|d fS d S )Nz<module>r   r   )	rx   rÕ   r2   r�   r   r4   rž   Úco_namerù   )r   r™   rÔ   r   r   r   Úgetsourcelines²  s    rû   c             C   s   t | ƒ\}}dj|ƒS )Nr×   )rû   r˜   )r   r™   rÔ   r   r   r   Ú	getsourceÇ  s    rü   c             C   sV   g }| j tddƒd� x:| D ]2}|j||jfƒ ||kr|jt|| ||ƒƒ qW |S )Nr�   r‡   )rI   )rQ   r   rN   rC   Úwalktree)ÚclassesÚchildrenÚparentrS   rÊ   r   r   r   rý   Ñ  s    
rý   Fc             C   s¤   i }g }xn| D ]f}|j rbxZ|j D ]<}||kr4g ||< ||| krN|| j|ƒ |r || kr P q W q||kr|j|ƒ qW x|D ]}|| kr~|j|ƒ q~W t||d ƒS )N)rC   rN   rý   )rþ   Úuniquerÿ   ÚrootsrÊ   r   r   r   r   ÚgetclasstreeÛ  s"    	
 
r  Ú	Argumentszargs, varargs, varkwc             C   s    t | ƒ\}}}}t|| ||ƒS )N)Ú_getfullargsr  )ÚcoÚargsÚvarargsÚ
kwonlyargsÚvarkwr   r   r   Úgetargsø  s    r  c       	      C   sœ   t | ƒstdj| ƒƒ‚| j}| j}| j}t|d |… ƒ}t|||| … ƒ}d}||7 }d }| jt@ rx| j| }|d }d }| jt	@ r�| j| }||||fS )Nz{!r} is not a code objectr   r   )
r6   rŽ   ru   Úco_argcountÚco_varnamesÚco_kwonlyargcountrÁ   r"   Ú
CO_VARARGSÚCO_VARKEYWORDS)	r  ÚnargsrU   Znkwargsr  r	  Ústepr  r
  r   r   r   r    s"    



r  ÚArgSpeczargs varargs keywords defaultsc             C   sD   t jdtdd� t| ƒ\}}}}}}}|s.|r6tdƒ‚t||||ƒS )Nzhinspect.getargspec() is deprecated since Python 3.0, use inspect.signature() or inspect.getfullargspec()rÖ   )Ú
stacklevelzdFunction has keyword-only parameters or annotations, use getfullargspec() API which can support them)ÚwarningsÚwarnÚDeprecationWarningÚgetfullargspecrt   r  )rv   r  r  r
  Údefaultsr	  ÚkwonlydefaultsÚannr   r   r   Ú
getargspec   s    
r  ÚFullArgSpeczGargs, varargs, varkw, defaults, kwonlyargs, kwonlydefaults, annotationsc             C   s`  yt | ddtd�}W n, tk
r@ } ztdƒ|‚W Y d d }~X nX g }d }d }g }f }i }f }i }	|j|jk	rx|j|d< x¾|jjƒ D ]°}
|
j}|
j	}|t
kr¨|j|ƒ nv|tkrÔ|j|ƒ |
j|
jk	rÒ||
jf7 }nJ|tkrâ|}n<|tk�r|j|ƒ |
j|
jk	�r|
j|	|< n|tk�r|}|
j|
jk	r„|
j||< q„W |	�sBd }	|�sLd }t||||||	|ƒS )NF)Úfollow_wrapper_chainsÚskip_bound_argÚsigclszunsupported callableÚreturn)Ú_signature_from_callableÚ	Signaturerb   rŽ   Úreturn_annotationÚemptyÚ
parametersÚvaluesri   rD   Ú_POSITIONAL_ONLYrN   Ú_POSITIONAL_OR_KEYWORDÚdefaultÚ_VAR_POSITIONALÚ_KEYWORD_ONLYÚ_VAR_KEYWORDÚ
annotationr  )rv   ÚsigÚexr  r  r
  r	  r  ÚannotationsÚ
kwdefaultsÚparamri   rD   r   r   r   r  A  sT    





r  ÚArgInfozargs varargs keywords localsc             C   s    t | jƒ\}}}t|||| jƒS )N)r  rž   r4  Úf_locals)Úframer  r  r
  r   r   r   Úgetargvaluesž  s    r7  c             C   sV   t | dd ƒdkr t| ƒjddƒS t| tƒrN| jd|fkr>| jS | jd | j S t| ƒS )Nr�   Ztypingztyping.r×   r¿   r}   )rB   ÚreprÚreplacer	   r   r�   r‚   )r.  Zbase_moduler   r   r   Úformatannotation¨  s    
r:  c                s   t | dd ƒ‰ ‡ fdd„}|S )Nr�   c                s
   t | ˆ ƒS )N)r:  )r.  )rÆ   r   r   Ú_formatannotation³  s    z5formatannotationrelativeto.<locals>._formatannotation)rB   )r   r;  r   )rÆ   r   Úformatannotationrelativeto±  s    r<  c             C   s   d|  S )NÚ*r   )rD   r   r   r   rH   º  s    rH   c             C   s   d|  S )Nz**r   )rD   r   r   r   rH   »  s    c             C   s   dt | ƒ S )Nú=)r8  )rE   r   r   r   rH   ¼  s    c             C   s   d|  S )Nz -> r   )Útextr   r   r   rH   ½  s    c                s(  ‡ ‡‡fdd„}g }|r(t | ƒt |ƒ }xFt| ƒD ]:\}}||ƒ}|rb||krb||
|||  ƒ }|j|ƒ q2W |d k	rŒ|j|||ƒƒƒ n|rš|jdƒ |rÚx:|D ]2}||ƒ}|rÌ||krÌ||
|| ƒ7 }|j|ƒ q¤W |d k	rô|j|	||ƒƒƒ ddj|ƒ d }dˆ k�r$||ˆˆ d ƒƒ7 }|S )Nc                s(   ˆ| ƒ}| ˆ kr$|dˆˆ |  ƒ 7 }|S )Nz: r   )Úargrf   )r1  r:  Ú	formatargr   r   ÚformatargandannotationÆ  s    z-formatargspec.<locals>.formatargandannotationr=  rê   z, rë   r!  )rs   Ú	enumeraterN   r˜   )r  r  r
  r  r	  r  r1  rA  ÚformatvarargsÚformatvarkwÚformatvalueZformatreturnsr:  rB  ÚspecsZfirstdefaultr›   r@  ÚspecZ	kwonlyargrf   r   )r1  r:  rA  r   Úformatargspec·  s2    


rI  c             C   s   d|  S )Nr=  r   )rD   r   r   r   rH   ç  s    c             C   s   d|  S )Nz**r   )rD   r   r   r   rH   è  s    c             C   s   dt | ƒ S )Nr>  )r8  )rE   r   r   r   rH   é  s    c             C   sŠ   |||fdd„}g }	x&t t| ƒƒD ]}
|	j|| |
 ƒƒ q"W |rZ|	j||ƒ||| ƒ ƒ |rx|	j||ƒ||| ƒ ƒ ddj|	ƒ d S )Nc             S   s   || ƒ|||  ƒ S )Nr   )rD   ÚlocalsrA  rF  r   r   r   Úconvertð  s    z formatargvalues.<locals>.convertrê   z, rë   )r–   rs   rN   r˜   )r  r  r
  rJ  rA  rD  rE  rF  rK  rG  r›   r   r   r   Úformatargvalueså  s    rL  c                s˜   ‡ fdd„|D ƒ}t |ƒ}|dkr,|d }n>|dkr@dj|Ž }n*dj|dd … Ž }|dd …= dj|ƒ| }td	| ||rzd
nd|dkrˆdnd|f ƒ‚d S )Nc                s   g | ]}|ˆ krt |ƒ‘qS r   )r8  )rZ   rD   )r'  r   r   r\   ý  s    z&_missing_arguments.<locals>.<listcomp>r   r   rÖ   z	{} and {}z, {} and {}z, z*%s() missing %i required %s argument%s: %sÚ
positionalzkeyword-onlyr×   r«   éþÿÿÿrN  )rs   ru   r˜   rŽ   )Úf_nameZargnamesÚposr'  rU   Úmissingr«   Útailr   )r'  r   Ú_missing_argumentsü  s    


rS  c          	      sÔ   t |ƒ| }t ‡ fdd„|D ƒƒ}|r:|dk}	d|f }
n2|rTd}	d|t |ƒf }
nt |ƒdk}	tt |ƒƒ}
d}|ržd}||dkr†d	nd||dkr–d	ndf }td
| |
|	r®d	nd|||dkrÆ| rÆdndf ƒ‚d S )Nc                s   g | ]}|ˆ kr|‘qS r   r   )rZ   r@  )r'  r   r   r\     s    z_too_many.<locals>.<listcomp>r   zat least %dTzfrom %d to %dr×   z7 positional argument%s (and %d keyword-only argument%s)r«   z5%s() takes %s positional argument%s but %d%s %s givenZwasZwere)rs   r�   rŽ   )rO  r  Zkwonlyr  ZdefcountZgivenr'  ZatleastZkwonly_givenZpluralr/  Z
kwonly_sigÚmsgr   )r'  r   Ú	_too_many  s$    rU  c              O   s6  | d }| dd … }t |ƒ}|\}}}}}	}
}|j}i }t|ƒrV|jd k	rV|jf| }t|ƒ}t|ƒ}|rrt|ƒnd}t||ƒ}x t|ƒD ]}|| ||| < qŠW |rºt||d … ƒ||< t||	 ƒ}|rÒi ||< xd|j	ƒ D ]X\}}||k�r|�st
d||f ƒ‚||| |< qÜ||k�r,t
d||f ƒ‚|||< qÜW ||k�r^| �r^t|||	||||ƒ ||k �rÚ|d || … }x&|D ]}||k�r~t||d|ƒ �q~W x8t||| d … ƒD ] \}}||k�r¶|| ||< �q¶W d}x>|	D ]6}||k�rä|
�r||
k�r|
| ||< n|d7 }�qäW |�r2t||	d|ƒ |S )Nr   r   z*%s() got an unexpected keyword argument %rz(%s() got multiple values for argument %rTF)r  r‡   r   rˆ   rs   r•   r–   ra   rK   rA   rŽ   rU  rS  rC  )Zfunc_and_positionalZnamedrv   rM  rH  r  r  r
  r  r	  r  r  rO  Z	arg2valueZnum_posZnum_argsZnum_defaultsÚnr›   Zpossible_kwargsÚkwrE   Zreqr@  rQ  Úkwargr   r   r   Úgetcallargs!  sd    








rY  ÚClosureVarsz"nonlocals globals builtins unboundc       	      C   s   t | ƒr| j} t| ƒs$tdj| ƒƒ‚| j}| jd kr:i }ndd„ t|j| jƒD ƒ}| j	}|j
dtjƒ}t|ƒrt|j}i }i }tƒ }xn|jD ]d}|dkr˜qŠy|| ||< W qŠ tk
rì   y|| ||< W n tk
ræ   |j|ƒ Y nX Y qŠX qŠW t||||ƒS )	Nz'{!r}' is not a Python functionc             S   s   i | ]\}}|j |“qS r   )Úcell_contents)rZ   ÚvarZcellr   r   r   ú
<dictcomp>v  s   z"getclosurevars.<locals>.<dictcomp>Ú__builtins__ÚNoneÚTrueÚFalse)r_  r`  ra  )r   r…   r   rŽ   ru   r!   Ú__closure__ÚzipÚco_freevarsÚ__globals__r€   r¿   r@   r   rK   Úco_namesÚKeyErrorrP   rZ  )	rv   ÚcodeZnonlocal_varsZ	global_nsZ
builtin_nsZglobal_varsZbuiltin_varsZunbound_namesrD   r   r   r   Úgetclosurevarsa  s8    	
ri  Ú	Tracebackz+filename lineno function code_context indexc             C   sÚ   t | ƒr| j}| j} n| j}t| ƒs2tdj| ƒƒ‚t| ƒp@t| ƒ}|dkr¾|d |d  }yt	| ƒ\}}W n t
k
r†   d  }}Y qÆX tdt|t|ƒ| ƒƒ}|||| … }|d | }nd  }}t||| jj||ƒS )Nz'{!r} is not a frame or traceback objectr   r   rÖ   )r2   Ú	tb_linenor�   Úf_linenor4   rŽ   ru   r¹   r    rÕ   rÎ   Úmaxr•   rs   rj  rž   rú   )r6  ÚcontextÚlinenor¬   rÚ   r™   rÔ   Úindexr   r   r   Úgetframeinfo˜  s$    rq  c             C   s   | j S )N)rl  )r6  r   r   r   Ú	getlineno¸  s    rr  Ú	FrameInfor6  c             C   s6   g }x,| r0| ft | |ƒ }|jt|Ž ƒ | j} qW |S )N)rq  rN   rs  Úf_back)r6  rn  Ú	framelistÚ	frameinfor   r   r   Úgetouterframes¿  s    
rw  c             C   s8   g }x.| r2| j ft| |ƒ }|jt|Ž ƒ | j} qW |S )N)r�   rq  rN   rs  Útb_next)Útbrn  ru  rv  r   r   r   ÚgetinnerframesË  s    
rz  c               C   s   t tdƒrtjdƒS d S )NÚ	_getframer   )r   rq   r{  r   r   r   r   Úcurrentframe×  s    r|  c             C   s   t tjdƒ| ƒS )Nr   )rw  rq   r{  )rn  r   r   r   ÚstackÛ  s    r}  c             C   s   t tjƒ d | ƒS )NrÖ   )rz  rq   Úexc_info)rn  r   r   r   Útraceß  s    r  c             C   s   t jd j| ƒS )Nrk   )r   r@   r   )Úklassr   r   r   Ú_static_getmroè  s    r�  c             C   s8   i }yt j| dƒ}W n tk
r(   Y nX tj||tƒS )Nr@   )r   Ú__getattribute__rO   Údictr€   Ú	_sentinel)rh   ÚattrZinstance_dictr   r   r   Ú_check_instanceë  s    r†  c             C   sF   x@t | ƒD ]4}tt|ƒƒtkr
y
|j| S  tk
r<   Y q
X q
W tS )N)r�  Ú_shadowed_dictr   r„  r@   rg  )r€  r…  Úentryr   r   r   Ú_check_classô  s    

r‰  c             C   s&   yt | ƒ W n tk
r    dS X dS )NFT)r�  rŽ   )rh   r   r   r   Ú_is_typeý  s
    rŠ  c             C   sn   t jd }x^t| ƒD ]R}y|j|ƒd }W n tk
r>   Y qX t |ƒtjko`|jdko`|j|ks|S qW t	S )Nr@   )
r   r@   r�  r   rg  r
   r   r‡   r]   r„  )r€  Ú	dict_attrrˆ  Z
class_dictr   r   r   r‡    s    


r‡  c             C   s  t }t| ƒs>t| ƒ}t|ƒ}|t ks2t|ƒtjkrBt| |ƒ}n| }t||ƒ}|t k	r„|t k	r„tt|ƒdƒt k	r„tt|ƒdƒt k	r„|S |t k	r�|S |t k	rœ|S | |krêxDtt|ƒƒD ]4}tt|ƒƒt kr²y
|j	| S  t
k
rä   Y q²X q²W |t k	rö|S t|ƒ‚d S )Nr   r   )r„  rŠ  r   r‡  r
   r   r†  r‰  r�  r@   rg  rO   )rh   r…  r*  Zinstance_resultr€  r‹  Zklass_resultrˆ  r   r   r   Úgetattr_static  s6    


rŒ  ÚGEN_CREATEDÚGEN_RUNNINGÚGEN_SUSPENDEDÚ
GEN_CLOSEDc             C   s,   | j r
tS | jd krtS | jjdkr(tS tS )Nr   r~   )Ú
gi_runningrŽ  Úgi_framer�  Úf_lastir�  r�  )Ú	generatorr   r   r   ÚgetgeneratorstateG  s    	
r•  c             C   s:   t | ƒstdj| ƒƒ‚t| dd ƒ}|d k	r2| jjS i S d S )Nz '{!r}' is not a Python generatorr’  )r)   rŽ   ru   rB   r’  r5  )r”  r6  r   r   r   ÚgetgeneratorlocalsY  s    r–  ÚCORO_CREATEDÚCORO_RUNNINGÚCORO_SUSPENDEDÚCORO_CLOSEDc             C   s,   | j r
tS | jd krtS | jjdkr(tS tS )Nr   r~   )Ú
cr_runningr˜  Úcr_framerš  r“  r—  r™  )Ú	coroutiner   r   r   Úgetcoroutinestateq  s    	
rž  c             C   s"   t | dd ƒ}|d k	r|jS i S d S )Nrœ  )rB   r5  )r�  r6  r   r   r   Úgetcoroutinelocalsƒ  s    rŸ  Ú
from_bytesc             C   s6   yt | |ƒ}W n tk
r"   d S X t|tƒs2|S d S )N)rB   rO   r	   Ú_NonUserDefinedCallables)r[   Zmethod_nameÚmethr   r   r   Ú"_signature_get_user_defined_methodŸ  s    
r£  c             C   sœ  | j }t|jƒ ƒ}|jpf }|jp$i }|r2|| }y| j||Ž}W n6 tk
rx } zdj|ƒ}	t|	ƒ|‚W Y d d }~X nX d}
�x
|jƒ D � ]ü\}}y|j	| }W n t
k
r¶   Y nlX |jtkrÎ|j|ƒ qŠ|jtk�r||krød}
|j|d�||< n|j|jƒ qŠ|jtk�r"|j|d�||< |
rŠ|jtk�rV|| jtd�}|||< |j|ƒ qŠ|jttfk�rr|j|ƒ qŠ|jtkrŠ|j|jƒ qŠW | j|jƒ d�S )Nz+partial object {!r} has incorrect argumentsFT)r*  )ri   )r&  )r&  r   rA   r  ÚkeywordsÚbind_partialrŽ   ru   rt   Ú	argumentsrg  ri   r(  r—   r)  r9  rD   r,  Úmove_to_endr-  r+  r'  )Úwrapped_sigÚpartialZ
extra_argsZ
old_paramsÚ
new_paramsZpartial_argsZpartial_keywordsZbar0  rT  Ztransform_to_kwonlyÚ
param_namer3  Z	arg_valueZ	new_paramr   r   r   Ú_signature_get_partial¯  sL    





r¬  c             C   sn   t | jjƒ ƒ}| s&|d jttfkr.tdƒ‚|d j}|ttfkrR|dd … }n|t	k	rbtdƒ‚| j
|d�S )Nr   zinvalid method signaturer   zinvalid argument type)r&  )ra   r&  r'  ri   r-  r,  rt   r)  r(  r+  r9  )r/  Úparamsri   r   r   r   Ú_signature_bound_methodû  s    
r®  c             C   s&   t | ƒp$t| ƒp$t| tƒp$| ttfkS )N)r8   r   r	   r¡  r   r   )rh   r   r   r   Ú_signature_is_builtin  s    
r¯  c             C   s–   t | ƒ st| ƒrdS t| dd ƒ}t| dd ƒ}t| dtƒ}t| dtƒ}t| dd ƒ}t|tjƒo”t|tƒo”|d kszt|tƒo”|d ksŒt|t	ƒo”t|t	ƒS )NFr‡   r!   Ú__defaults__Ú__kwdefaults__Ú__annotations__)
Úcallabler   rB   Ú_voidr	   r
   r5   r�   ra   rƒ  )rh   rD   rh  r  r2  r1  r   r   r   Ú_signature_is_functionlike!  s    
rµ  c             C   s<   | j dƒ}|dkr| j dƒ}| j dƒ}| j dƒ}| d|… S )Nú,r   rë   ú:r>  rÖ   r~   )Úfind)rH  rP  Zcposr   r   r   Ú_signature_get_bound_param:  s    




r¹  c             C   s$  | s| d d fS d }d }dd„ | j dƒD ƒ}t|ƒj}tj|ƒ}d}d}g }|j}	d}
tj}tj}t|ƒ}x¦|D ]ž}|j	|j
 }}||kr¾|dkr¨|ršd}qnd}|
d7 }
qn|d	kr¾d}|
d }qn||krÔ|d
krÔ|
}qn|rôd}||koê|dksô|	dƒ |	|ƒ |dkrn|	dƒ qnW dj|ƒ}|||fS )Nc             S   s   g | ]}|j d ƒ‘qS )Úascii)Úencode)rZ   Úlr   r   r   r\   d  s    z6_signature_strip_non_python_syntax.<locals>.<listcomp>r’   Fr   r¶  Tr   ú/ú$rë   z, ú r×   )rƒ   rõ   rö   rì   rN   rò   ÚOPÚ
ERRORTOKENÚnextr   Ústringr˜   )Ú	signatureÚself_parameterÚlast_positional_onlyr™   r”  Ztoken_streamZdelayed_commaZskip_next_commar?  rP   Zcurrent_parameterrÀ  rÁ  Útr   rÃ  Úclean_signaturer   r   r   Ú"_signature_strip_non_python_syntaxQ  sP    




rÉ  Tc                sV  | j ‰ t|ƒ\}}}d| d }ytj|ƒ}W n tk
rF   d }Y nX t|tjƒsbtdj|ƒƒ‚|j	d }	g ‰ˆ j
‰tƒ ‰d }i ‰t|dd ƒ}
|
r¬tjj|
d ƒ}|r¬|j‰tjjƒ ‰dd„ ‰‡‡fdd	„‰	G ‡	fd
d„dtjƒ‰ˆf‡ ‡‡‡‡‡‡fdd„	}t|	jjƒ}t|	jjƒ}tj||d d�}|d k	�r8ˆ j‰nˆ j‰x<ttt|ƒƒƒD ](\}\}}|||ƒ ||k�rPˆ j‰�qPW |	jj�ršˆ j‰||	jjˆƒ ˆ j‰x*t|	jj |	jj!ƒD ]\}}|||ƒ �q´W |	jj"�rêˆ j#‰||	jj"ˆƒ |d k	�rHt|dd ƒ}|d k	}t$|ƒ}|�r.|�s"|�r.ˆj%dƒ nˆd j&ˆ jd�}|ˆd< | ˆ| j
d�S )Nzdef fooz: passz"{!r} builtin has invalid signaturer   r�   c             S   s   | j d krtdƒ‚| jS )Nz'Annotations are not currently supported)r.  rt   r@  )Únoder   r   r   Ú
parse_name¼  s    
z&_signature_fromstr.<locals>.parse_namec                sª   yt | ˆ ƒ}W n> tk
rL   yt | ˆƒ}W n tk
rF   tƒ ‚Y nX Y nX t|tƒrbtj|ƒS t|ttfƒrztj	|ƒS t|t
ƒrŽtj|ƒS |dkr tj|ƒS tƒ ‚d S )NTF)TFN)ÚevalÚ	NameErrorÚRuntimeErrorr	   r�   ÚastZStrÚintÚfloatZNumÚbytesZBytesZNameConstant)r«   rE   )Úmodule_dictÚsys_module_dictr   r   Ú
wrap_valueÂ  s     





z&_signature_fromstr.<locals>.wrap_valuec                   s$   e Zd Z‡ fdd„Z‡ fdd„ZdS )z,_signature_fromstr.<locals>.RewriteSymbolicsc                s`   g }|}x"t |tjƒr*|j|jƒ |j}q
W t |tjƒs>tƒ ‚|j|jƒ dj	t
|ƒƒ}ˆ |ƒS )Nr}   )r	   rÏ  rY   rN   r…  rE   ÚNamerÎ  rp   r˜   Úreversed)rŒ   rÊ  ÚarV  rE   )rÕ  r   r   Úvisit_AttributeÖ  s    
z<_signature_fromstr.<locals>.RewriteSymbolics.visit_Attributec                s   t |jtjƒstƒ ‚ˆ |jƒS )N)r	   ZctxrÏ  ZLoadrt   rp   )rŒ   rÊ  )rÕ  r   r   Ú
visit_Nameâ  s    z7_signature_fromstr.<locals>.RewriteSymbolics.visit_NameN)r‡   r�   r‚   rÙ  rÚ  r   )rÕ  r   r   ÚRewriteSymbolicsÕ  s   rÛ  c                sŠ   ˆ| ƒ}|ˆkrd S |rp|t k	rpyˆƒ j|ƒ}tj|ƒ}W n tk
rR   ˆ}Y nX |ˆkr`d S |ˆk	rl|n|}ˆjˆ |ˆ|ˆd�ƒ d S )N)r*  r.  )Ú_emptyZvisitrÏ  Zliteral_evalrt   rN   )Z	name_nodeZdefault_noder*  rD   Úo)Ú	ParameterrÛ  r%  Úinvalidri   r&  rË  r   r   Úpç  s    
z_signature_fromstr.<locals>.p)Ú	fillvaluerˆ   )ri   )r$  )'Ú_parameter_clsrÉ  rÏ  ÚparseÚSyntaxErrorr	   ZModulert   ru   Zbodyr%  r   rB   rq   r   r€   r@   ÚcopyZNodeTransformerr×  r  r  Ú	itertoolsÚzip_longestÚPOSITIONAL_ONLYÚPOSITIONAL_OR_KEYWORDrC  rÁ   ZvarargÚVAR_POSITIONALÚKEYWORD_ONLYrc  r	  Zkw_defaultsrX  ÚVAR_KEYWORDr   r—   r9  )r[   rh   r«   r  rÈ  rÅ  rÆ  ZprogramrÆ   rn   Zmodule_namerà  r  r  rõ   r›   rD   r*  Ú_selfZself_isboundZself_ismoduler   )
rÞ  rÛ  r%  rß  ri   rÓ  r&  rË  rÔ  rÕ  r   Ú_signature_fromstr™  sj    








rî  c             C   sB   t |ƒstdj|ƒƒ‚t|dd ƒ}|s4tdj|ƒƒ‚t| |||ƒS )Nz%{!r} is not a Python builtin functionÚ__text_signature__z#no signature found for builtin {!r})r¯  rŽ   ru   rB   rt   rî  )r[   rv   r  r«   r   r   r   Ú_signature_from_builtin&  s    rð  c             C   sú  d}t |ƒs(t|ƒrd}ntdj|ƒƒ‚| j}|j}|j}|j}t|d |… ƒ}|j	}|||| … }	|j
}
|j}|j}|r†t|ƒ}nd}g }|| }x4|d |… D ]$}|
j|tƒ}|j|||td�ƒ q¤W xBt||d … ƒD ].\}}|
j|tƒ}|j|||t|| d�ƒ qÞW |jt@ �rH|||  }|
j|tƒ}|j|||td�ƒ xJ|	D ]B}t}|d k	�rl|j|tƒ}|
j|tƒ}|j|||t|d�ƒ �qNW |jt@ �rä|| }|jt@ �r¼|d7 }|| }|
j|tƒ}|j|||td�ƒ | ||
jdtƒ|d	�S )
NFTz{!r} is not a Python functionr   )r.  ri   )r.  ri   r*  r   r!  )r$  Ú__validate_parameters__)r   rµ  rŽ   ru   râ  r!   r  r  ra   r  r²  r°  r±  rs   r€   rÜ  rN   r)  rC  r"   r  r+  r,  r  r-  )r[   rv   Zis_duck_functionrÞ  Z	func_codeZ	pos_countZ	arg_namesrM  Zkeyword_only_countZkeyword_onlyr1  r  r2  Zpos_default_countr&  Znon_default_countrD   r.  Úoffsetr*  rp  r   r   r   Ú_signature_from_function6  sj    










ró  )r  r  c         !   C   sˆ  t | ƒstdj| ƒƒ‚t| tjƒrDt| j|||d�}|r@t|ƒS |S |rtt	| dd„ d�} t| tjƒrtt| |||d�S y
| j
}W n tk
r’   Y n&X |d k	r¸t|tƒs´tdj|ƒƒ‚|S y
| j}W n tk
rÖ   Y nvX t|tjƒ�rLt|j|||d�}t||dƒ}t|jjƒ ƒd }|jtjk�r(|S t|jjƒ ƒ}|f| }	|j|	d�S t| ƒ�s`t| ƒ�rjt|| ƒS t| ƒ�r‚t|| |d	�S t| tjƒ�r¬t| j|||d�}t|| ƒS d }t| tƒ�rÈt t| ƒd
ƒ}
|
d k	�ræt|
|||d�}nJt | dƒ}|d k	�rt||||d�}n$t | dƒ}|d k	�r0t||||d�}|d k�r:xL| j!d d… D ]:}y
|j"}W n tk
�rn   Y nX |�rJt#|| |ƒS �qJW t| j!k�r:| j$t%j$k�r¸| j&t%j&k�r¸t't%ƒS t(dj| ƒƒ‚nrt| t)ƒ�s:t t| ƒd
ƒ}
|
d k	�r:yt|
|||d�}W n8 t(k
�r8 } zdj| ƒ}t(|ƒ|‚W Y d d }~X nX |d k	�rV|�rRt|ƒS |S t| tj*ƒ�rvdj| ƒ}t(|ƒ‚t(dj| ƒƒ‚d S )Nz{!r} is not a callable object)r  r  r   c             S   s
   t | dƒS )NÚ__signature__)r   )rn   r   r   r   rH   £  s    z*_signature_from_callable.<locals>.<lambda>)rl   z1unexpected object {!r} in __signature__ attributer   )r&  )r  Ú__call__Ú__new__rå   r   z(no signature found for builtin type {!r}zno signature found for {!r}z,no signature found for builtin function {!r}z+callable {!r} is not supported by signature)Nr~   )+r³  rŽ   ru   r	   r
   r   r"  r…   r®  rx   rô  rO   r#  Ú_partialmethodÚ	functoolsÚpartialmethodrv   r¬  ra   r&  r'  ri   rÞ  rê  r9  r   rµ  ró  r¯  rð  r©  r   r£  rk   rï  rî  rå   r   rö  rÄ  rt   r¡  r7   )rh   r  r  r   r/  rù  r¨  Zfirst_wrapped_paramZ
sig_paramsrª  ZcallÚnewZinitrF   Ztext_sigr0  rT  r   r   r   r"  ‡  sæ    	



















r"  c               @   s   e Zd ZdS )r´  N)r‡   r�   r‚   r   r   r   r   r´  P	  s   r´  c               @   s   e Zd ZdS )rÜ  N)r‡   r�   r‚   r   r   r   r   rÜ  T	  s   rÜ  c               @   s(   e Zd ZdZdZdZdZdZdd„ ZdS )	Ú_ParameterKindr   r   rÖ   é   é   c             C   s   | j S )N)Ú_name_)rŒ   r   r   r   Ú__str___	  s    z_ParameterKind.__str__N)	r‡   r�   r‚   rè  ré  rê  rë  rì  rÿ  r   r   r   r   rû  X	  s   rû  zpositional-onlyzpositional or keywordzvariadic positionalzkeyword-onlyzvariadic keywordc               @   s¬   e Zd Zd ZeZeZeZ	e
ZeZeZeedœdd„Zdd	„ Zd
d„ Zedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZeeeedœdd„Zdd„ Zdd„ Zdd„ Zdd„ ZdS )!rÞ  Ú_nameÚ_kindÚ_defaultÚ_annotation)r*  r.  c            C   s"  yt |ƒ| _W n$ tk
r2   td|›d�ƒ‚Y nX |tk	rf| jttfkrfd}|jt| jƒƒ}t|ƒ‚|| _|| _	|tkr‚tdƒ‚t
|tƒs¤djt|ƒjƒ}t|ƒ‚|d dko¾|dd … jƒ �r | jtkrèd	}|jt| jƒƒ}t|ƒ‚t| _d
j|dd … ƒ}|jƒ �stdj|ƒƒ‚|| _d S )Nzvalue z is not a valid Parameter.kindz({} parameters cannot have default valuesz*name is a required attribute for Parameterzname must be a str, not a {}r   r}   r   zLimplicit arguments must be passed as positional or keyword arguments, not {}z
implicit{}z"{!r} is not a valid parameter name)rû  r  rt   rÜ  r+  r-  ru   Ú_get_paramkind_descrr  r  r	   r�   r   r‡   rŽ   Úisdigitr)  r(  Úisidentifierr   )rŒ   rD   ri   r*  r.  rT  r   r   r   rå   ”	  s4    


zParameter.__init__c             C   s    t | ƒ| j| jf| j| jdœfS )N)r  r  )r   r   r  r  r  )rŒ   r   r   r   Ú
__reduce__¼	  s    
zParameter.__reduce__c             C   s   |d | _ |d | _d S )Nr  r  )r  r  )rŒ   Ústater   r   r   Ú__setstate__Â	  s    
zParameter.__setstate__c             C   s   | j S )N)r   )rŒ   r   r   r   rD   Æ	  s    zParameter.namec             C   s   | j S )N)r  )rŒ   r   r   r   r*  Ê	  s    zParameter.defaultc             C   s   | j S )N)r  )rŒ   r   r   r   r.  Î	  s    zParameter.annotationc             C   s   | j S )N)r  )rŒ   r   r   r   ri   Ò	  s    zParameter.kind)rD   ri   r.  r*  c            C   sL   |t kr| j}|t kr| j}|t kr*| j}|t kr8| j}t| ƒ||||d�S )N)r*  r.  )r´  r   r  r  r  r   )rŒ   rD   ri   r.  r*  r   r   r   r9  Ö	  s    zParameter.replacec             C   sj   | j }| j}| jtk	r(dj|t| jƒƒ}| jtk	rDdj|t| jƒƒ}|tkrVd| }n|t	krfd| }|S )Nz{}:{}z{}={}r=  z**)
ri   r   r  rÜ  ru   r:  r  r8  r+  r-  )rŒ   ri   Ú	formattedr   r   r   rÿ  è	  s    


zParameter.__str__c             C   s   dj | jj| ƒS )Nz	<{} "{}">)ru   r‰   r‡   )rŒ   r   r   r   Ú__repr__û	  s    zParameter.__repr__c             C   s   t | j| j| j| jfƒS )N)ÚhashrD   ri   r.  r*  )rŒ   r   r   r   Ú__hash__þ	  s    zParameter.__hash__c             C   sJ   | |krdS t |tƒstS | j|jkoH| j|jkoH| j|jkoH| j|jkS )NT)r	   rÞ  ÚNotImplementedr   r  r  r  )rŒ   Úotherr   r   r   Ú__eq__
  s    
zParameter.__eq__N)r   r  r  r  )r‡   r�   r‚   Ú	__slots__r(  rè  r)  ré  r+  rê  r,  rë  r-  rì  rÜ  r%  rå   r  r	  r^   rD   r*  r.  ri   r´  r9  rÿ  r  r  r  r   r   r   r   rÞ  t	  s(   (rÞ  c               @   sd   e Zd ZdZdd„ Zedd„ ƒZedd	„ ƒZed
d„ ƒZdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )ÚBoundArgumentsr¦  Ú
_signatureÚ__weakref__c             C   s   || _ || _d S )N)r¦  r  )rŒ   rÄ  r¦  r   r   r   rå   
  s    zBoundArguments.__init__c             C   s   | j S )N)r  )rŒ   r   r   r   rÄ  #
  s    zBoundArguments.signaturec             C   s|   g }xn| j jjƒ D ]^\}}|jttfkr*P y| j| }W n tk
rN   P Y qX |jtkrf|j	|ƒ q|j
|ƒ qW t|ƒS )N)r  r&  rA   ri   r-  r,  r¦  rg  r+  ÚextendrN   ra   )rŒ   r  r«  r3  r@  r   r   r   r  '
  s    
zBoundArguments.argsc             C   s–   i }d}xˆ| j jjƒ D ]x\}}|sF|jttfkr6d}n|| jkrFd}q|sLqy| j| }W n tk
rn   Y qX |jtkr†|j|ƒ q|||< qW |S )NFT)	r  r&  rA   ri   r-  r,  r¦  rg  Úupdate)rŒ   ÚkwargsZkwargs_startedr«  r3  r@  r   r   r   r  >
  s&    

zBoundArguments.kwargsc             C   s    | j }g }x†| jjjƒ D ]v\}}y|j||| fƒ W q tk
rŒ   |jtk	rX|j}n"|jt	krhf }n|jt
krxi }nw|j||fƒ Y qX qW t|ƒ| _ d S )N)r¦  r  r&  rA   rN   rg  r*  rÜ  ri   r+  r-  r   )rŒ   r¦  Znew_argumentsrD   r3  Úvalr   r   r   Úapply_defaults\
  s    	


zBoundArguments.apply_defaultsc             C   s2   | |krdS t |tƒstS | j|jko0| j|jkS )NT)r	   r  r  rÄ  r¦  )rŒ   r  r   r   r   r  x
  s    
zBoundArguments.__eq__c             C   s   |d | _ |d | _d S )Nr  r¦  )r  r¦  )rŒ   r  r   r   r   r	  €
  s    
zBoundArguments.__setstate__c             C   s   | j | jdœS )N)r  r¦  )r  r¦  )rŒ   r   r   r   Ú__getstate__„
  s    zBoundArguments.__getstate__c             C   sD   g }x(| j jƒ D ]\}}|jdj||ƒƒ qW dj| jjdj|ƒƒS )Nz{}={!r}z	<{} ({})>z, )r¦  rA   rN   ru   r‰   r‡   r˜   )rŒ   r  r@  rE   r   r   r   r  ‡
  s    zBoundArguments.__repr__N)r¦  r  r  )r‡   r�   r‚   r  rå   r^   rÄ  r  r  r  r  r	  r  r  r   r   r   r   r  
  s   r  c               @   sÖ   e Zd Zd,ZeZeZeZ	d-eddœdd„Z
edd	„ ƒZed
d„ ƒZeddœdd„ƒZedd„ ƒZedd„ ƒZeedœdd„Zdd„ Zdd„ Zdd„ Zddœdd„Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ ZdS ).r#  Ú_return_annotationÚ_parametersNT)r$  rñ  c            C   sö   |d krt ƒ }nÐ|rÎt ƒ }t}d}x¼t|ƒD ]œ\}}|j}	|j}
|	|k rjd}|jt|ƒt|	ƒƒ}t|ƒ‚n|	|krzd}|	}|	ttfkr¦|j	t
kr¢|r¦d}t|ƒ‚nd}|
|krÀdj|
ƒ}t|ƒ‚|||
< q,W nt dd„ |D ƒƒ}tj|ƒ| _|| _d S )NFz7wrong parameter order: {} parameter before {} parameterz-non-default argument follows default argumentTzduplicate parameter name: {!r}c             s   s   | ]}|j |fV  qd S )N)rD   )rZ   r3  r   r   r   r­   Ý
  s   z%Signature.__init__.<locals>.<genexpr>)r   r(  rC  ri   rD   ru   r  rt   r)  r*  rÜ  r
   ÚMappingProxyTyper  r  )rŒ   r&  r$  rñ  r­  Ztop_kindZkind_defaultsÚidxr3  ri   rD   rT  r   r   r   rå   ¬
  s>    






zSignature.__init__c             C   s   t jdtdd� t| |ƒS )Nz_inspect.Signature.from_function() is deprecated since Python 3.5, use Signature.from_callable()rÖ   )r  )r  r  r  ró  )r[   rv   r   r   r   Úfrom_functionã
  s    
zSignature.from_functionc             C   s   t jdtdd� t| |ƒS )Nz^inspect.Signature.from_builtin() is deprecated since Python 3.5, use Signature.from_callable()rÖ   )r  )r  r  r  rð  )r[   rv   r   r   r   Úfrom_builtinï
  s    
zSignature.from_builtin)Úfollow_wrappedc            C   s   t || |d�S )N)r   r  )r"  )r[   rh   r!  r   r   r   Úfrom_callableû
  s    zSignature.from_callablec             C   s   | j S )N)r  )rŒ   r   r   r   r&    s    zSignature.parametersc             C   s   | j S )N)r  )rŒ   r   r   r   r$    s    zSignature.return_annotation)r&  r$  c            C   s0   |t kr| jjƒ }|t kr | j}t| ƒ||d�S )N)r$  )r´  r&  r'  r  r   )rŒ   r&  r$  r   r   r   r9  	  s    
zSignature.replacec             C   s8   t dd„ | jjƒ D ƒƒ}dd„ | jjƒ D ƒ}||| jfS )Nc             s   s   | ]}|j tkr|V  qd S )N)ri   r,  )rZ   r3  r   r   r   r­     s    z(Signature._hash_basis.<locals>.<genexpr>c             S   s   i | ]}|j tkr||j“qS r   )ri   r,  rD   )rZ   r3  r   r   r   r]    s    z)Signature._hash_basis.<locals>.<dictcomp>)ra   r&  r'  r$  )rŒ   r­  Ú
kwo_paramsr   r   r   Ú_hash_basis  s    zSignature._hash_basisc             C   s(   | j ƒ \}}}t|jƒ ƒ}t|||fƒS )N)r$  Ú	frozensetr'  r  )rŒ   r­  r#  r$  r   r   r   r  !  s    zSignature.__hash__c             C   s*   | |krdS t |tƒstS | jƒ |jƒ kS )NT)r	   r#  r  r$  )rŒ   r  r   r   r   r  &  s
    
zSignature.__eq__F)r©  c            C   s   t ƒ }t| jjƒ ƒ}f }t|ƒ}�xxyt|ƒ}W nÈ tk
rø   yt|ƒ}	W n tk
rb   P Y n’X |	jtkrrP n‚|	j|kr¬|	jt	kr¢d}
|
j
|	jd�}
t|
ƒd ‚|	f}P nH|	jtksÀ|	jtk	rÊ|	f}P n*|rØ|	f}P nd}
|
j
|	jd�}
t|
ƒd ‚Y q$X yt|ƒ}	W n  tk
�r&   tdƒd ‚Y q$X |	jttfk�rBtdƒd ‚|	jtk�rn|g}|j|ƒ t|ƒ||	j< P |	j|k�rŽtdj
|	jd�ƒd ‚|||	j< q$W d }x¾tj||ƒD ]®}	|	jtk�rÆ|	}�q®|	jtk�rÖ�q®|	j}y|j|ƒ}W nH tk
�r2   | �r.|	jtk�r.|	jtk�r.tdj
|d�ƒd ‚Y n(X |	jt	k�rRtdj
|	jd�ƒ‚|||< �q®W |�r”|d k	�r||||j< ntdj
tt|ƒƒd�ƒ‚| j| |ƒS )NzA{arg!r} parameter is positional only, but was passed as a keyword)r@  z$missing a required argument: {arg!r}ztoo many positional argumentsz$multiple values for argument {arg!r}z*got an unexpected keyword argument {arg!r})r   rõ   r&  r'  rÂ  ÚStopIterationri   r+  rD   r(  ru   rŽ   r-  r*  rÜ  r,  r  ra   ræ  Úchainr—   rg  Ú_bound_arguments_cls)rŒ   r  r  r©  r¦  r&  Zparameters_exZarg_valsZarg_valr3  rT  r'  Zkwargs_paramr«  r   r   r   Ú_bind-  s”    







zSignature._bindc              O   s   | d j | dd … |ƒS )Nr   r   )r)  )r  r  r   r   r   Úbind°  s    zSignature.bindc              O   s   | d j | dd … |dd�S )Nr   r   T)r©  )r)  )r  r  r   r   r   r¥  ·  s    zSignature.bind_partialc             C   s    t | ƒt| jjƒ ƒfd| jifS )Nr  )r   ra   r  r'  r  )rŒ   r   r   r   r  ¾  s    zSignature.__reduce__c             C   s   |d | _ d S )Nr  )r  )rŒ   r  r   r   r   r	  Ã  s    zSignature.__setstate__c             C   s   dj | jj| ƒS )Nz<{} {}>)ru   r‰   r‡   )rŒ   r   r   r   r  Æ  s    zSignature.__repr__c       	      C   sÄ   g }d}d}xr| j jƒ D ]d}t|ƒ}|j}|tkr8d}n|rJ|jdƒ d}|tkrXd}n|tkrr|rr|jdƒ d}|j|ƒ qW |rŽ|jdƒ djdj	|ƒƒ}| j
tk	rÀt| j
ƒ}|dj|ƒ7 }|S )NFTr½  r=  z({})z, z -> {})r&  r'  r�   ri   r(  rN   r+  r,  ru   r˜   r$  rÜ  r:  )	rŒ   rf   Zrender_pos_only_separatorZrender_kw_only_separatorr3  r
  ri   ZrenderedZannor   r   r   rÿ  É  s0    




zSignature.__str__)r  r  )N)r‡   r�   r‚   r  rÞ  râ  r  r(  rÜ  r%  rå   re   r  r   r"  r^   r&  r$  r´  r9  r$  r  r  r)  r*  r¥  r  r	  r  rÿ  r   r   r   r   r#  Ž
  s0   6	 r#  )r!  c            C   s   t j| |d�S )N)r!  )r#  r"  )rh   r!  r   r   r   rÄ  ÷  s    rÄ  c              C   sÈ  dd l } dd l}| jƒ }|jddd� |jddddd	� |jƒ }|j}|jd
ƒ\}}}y|j|ƒ }}	W nL tk
r´ }
 z0dj	|t
|
ƒj|
ƒ}t|tjd� tdƒ W Y d d }
~
X nX |rà|jdƒ}|	}x|D ]}t||ƒ}qÎW |	jtjk�rtdtjd� tdƒ |j�r¸tdj	|ƒƒ tdj	t|	ƒƒƒ tdj	|	jƒƒ ||	k�rxtdj	t|	jƒƒƒ t|	dƒ�r®tdj	|	jƒƒ n6yt|ƒ\}}W n tk
�rž   Y nX tdj	|ƒƒ tdƒ ntt|ƒƒ d S )Nr   r   zCThe object to be analysed. It supports the 'module:qualname' syntax)Úhelpz-dz	--detailsÚ
store_truez9Display info about the module rather than its source code)Úactionr+  r·  zFailed to import {} ({}: {}))rÄ   rÖ   r}   z#Can't get info for builtin modules.r   z
Target: {}z
Origin: {}z
Cached: {}z
Loader: {}Ú__path__zSubmodule search path: {}zLine: {}r’   )Úargparser¥   ÚArgumentParserÚadd_argumentÚ
parse_argsr   Ú	partitionÚimport_modulerb   ru   r   r‡   Úprintrq   ÚstderrÚexitrƒ   rB   Úbuiltin_module_namesZdetailsr¹   Ú
__cached__r8  r®   r   r.  rÕ   rü   )r/  r¥   Úparserr  ÚtargetZmod_nameZ	has_attrsZattrsrh   rÆ   rg   rT  ÚpartsÚpartÚ__ro  r   r   r   Ú_mainü  sV    



r?  r¾   )r   r   i   )N)N)N)F)N)r   )r6  )r   )r   )r   )r   )T)T)­Ú
__author__r.   rÏ  ZdisÚcollections.abcr-   ÚenumÚimportlib.machineryr¥   ræ  r·   r¢   rÐ   rq   rì   rò   r
   r  rø  r¿   Úoperatorr   r   r   ÚglobalsZmod_dictZCOMPILER_FLAG_NAMESrA   rV   rW   r=   r   r   r   r   r   r   r   r   r   r#   r$   r%   r'   r)   r+   r0   r2   r4   r6   r8   r9   rG   rX   rY   rj   rJ   rx   r|   r„   r�   r‘   r�   r    rª   r¹   r½   rÀ   rÂ   r¶   rÕ   rÜ   rb   rÝ   rÞ   rù   rû   rü   rý   r  r  r  r  r  r  r  r  r4  r7  r:  r<  r�   rI  rL  rS  rU  rY  rZ  ri  rj  rq  rr  Ú_fieldsrs  rw  rz  r|  r}  r  r   r„  r�  r†  r‰  rŠ  r‡  rŒ  r�  rŽ  r�  r�  r•  r–  r—  r˜  r™  rš  rž  rŸ  r   rõ  Z_WrapperDescriptorÚallZ_MethodWrapperrÐ  r@   Z_ClassMethodWrapperr7   r¡  r£  r¬  r®  r¯  rµ  r¹  rÉ  rî  rð  ró  r"  r´  rÜ  ÚIntEnumrû  rè  r(  ré  r)  rê  r+  rë  r,  rì  r-  Z_PARAM_NAME_MAPPINGÚ__getitem__r  rÞ  r  r#  rÄ  r?  r‡   r   r   r   r   Ú<module>   sd   	


	
	
,
t$
;
	
.I-7





[


	(>
5

 



		0

LH R H    k:
