
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,aÏ ã                   @   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mZ ddlmZmZ eƒ Zej ¡ D ]\ZZeede < q°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ƒ�r&d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,„ 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„ ZQedmdnƒZRdodp„ ZSedqdrƒZTdsdt„ ZUedudvƒZVdwdx„ ZWd÷dydz„ZXd{d|„ ZYdddd}i i eZd~d„ d€d„ d�d„ d‚d„ eXfdƒd„„Z[eZd…d„ d†d„ d‡d„ fdˆd‰„Z\dŠd‹„ Z]dŒd�„ Z^dŽd�„ Z_ed�d‘ƒZ`d’d“„ Zaed”d•ƒZbdød—d˜„Zcd™dš„ Zded›dœebje ƒZfdùd�dž„ZgdúdŸd „Zhd¡d¢„ Zidûd£d¤„Zjdüd¥d¦„Zkelƒ Zmd§d¨„ Znd©dª„ Zod«d¬„ Zpd­d®„ Zqd¯d°„ Zremfd±d²„Zsd³Ztd´ZudµZvd¶Zwd·d¸„ Zxd¹dº„ Zyd»Zzd¼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Šdý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×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£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 (  )zKa-Ping Yee <ping@lfw.org>z'Yury Selivanov <yselivanov@sprymix.com>é    N)Ú
attrgetter)Ú
namedtupleÚOrderedDictZCO_i   c                 C   s   t | tjƒS ©N)Ú
isinstanceÚtypesÚ
ModuleType©Úobject© r   ú,/opt/alt/python38/lib64/python3.8/inspect.pyÚismodule?   s    r   c                 C   s
   t | tƒS r   )r   Útyper	   r   r   r   ÚisclassH   s    r   c                 C   s   t | tjƒS r   )r   r   Ú
MethodTyper	   r   r   r   ÚismethodP   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   ÚismethoddescriptorZ   s    r   c                 C   s8   t | ƒst| ƒst| ƒrdS t| ƒ}t|dƒp6t|dƒS )NFr   Ú
__delete__r   r   r   r   r   Úisdatadescriptorn   s    r   ÚMemberDescriptorTypec                 C   s   t | tjƒS r   )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 r   )r   r   r   r	   r   r   r   Úisgetsetdescriptor�   s    r    c                 C   s   dS r   r   r	   r   r   r   r    —   s    c                 C   s   t | tjƒS r   )r   r   ÚFunctionTyper	   r   r   r   r   ž   s    r   c                 C   s6   t | ƒr| j} q t | ¡} t| ƒs&dS t| jj|@ ƒS r   )r   Ú__func__Ú	functoolsÚ_unwrap_partialr   ÚboolÚ__code__Úco_flags)ÚfÚflagr   r   r   Ú_has_code_flag«   s    
r*   c                 C   s
   t | tƒS r   )r*   ZCO_GENERATOR©Úobjr   r   r   Úisgeneratorfunction¶   s    r-   c                 C   s
   t | tƒS r   )r*   ZCO_COROUTINEr+   r   r   r   Úiscoroutinefunction½   s    r.   c                 C   s
   t | tƒS r   )r*   ZCO_ASYNC_GENERATORr+   r   r   r   ÚisasyncgenfunctionÄ   s    r/   c                 C   s   t | tjƒS r   )r   r   ÚAsyncGeneratorTyper	   r   r   r   Ú
isasyncgenÌ   s    r1   c                 C   s   t | tjƒS r   )r   r   ÚGeneratorTyper	   r   r   r   ÚisgeneratorÐ   s    r3   c                 C   s   t | tjƒS r   )r   r   ÚCoroutineTyper	   r   r   r   Úiscoroutineá   s    r5   c                 C   s6   t | tjƒp4t | tjƒr(t| jjt@ ƒp4t | tj	j
ƒS r   )r   r   r4   r2   r%   Úgi_coder'   ZCO_ITERABLE_COROUTINEÚcollectionsÚabcÚ	Awaitabler	   r   r   r   Úisawaitableå   s    þýr:   c                 C   s   t | tjƒS r   )r   r   ÚTracebackTyper	   r   r   r   Úistracebackì   s    r<   c                 C   s   t | tjƒS r   )r   r   Ú	FrameTyper	   r   r   r   Úisframeö   s    r>   c                 C   s   t | tjƒS r   )r   r   ÚCodeTyper	   r   r   r   Úiscode  s    r@   c                 C   s   t | tjƒS r   )r   r   ÚBuiltinFunctionTyper	   r   r   r   Ú	isbuiltin  s    rB   c                 C   s    t | ƒpt| ƒpt| ƒpt| ƒS r   )rB   r   r   r   r	   r   r   r   Ú	isroutine&  s    ÿþýrC   c                 C   s¦   t | tƒsdS | jt@ rdS tt| ƒtjƒs0dS t| dƒr>dS | j 	¡ D ]\}}t
|ddƒrH dS qH| jD ]6}t
|ddƒD ]$}t
| |d ƒ}t
|ddƒrz  dS qzqjdS )NFTÚ__abstractmethods__Ú__isabstractmethod__r   )r   r   Ú	__flags__ÚTPFLAGS_IS_ABSTRACTÚ
issubclassr8   ÚABCMetar   Ú__dict__ÚitemsÚgetattrÚ	__bases__)r
   ÚnameÚvalueÚbaser   r   r   Ú
isabstract-  s"    



rQ   c              	   C   s  t | ƒr| ft| ƒ }nd}g }tƒ }t| ƒ}z:| jD ].}|j ¡ D ]\}}t|tj	ƒrD| 
|¡ qDq6W n tk
r|   Y nX |D ]~}	zt| |	ƒ}
|	|kržt‚W n: tk
rÚ   |D ]}|	|jkr´|j|	 }
 qÖq´Y q‚Y nX |rè||
ƒrö| 
|	|
f¡ | |	¡ q‚|jdd„ d� |S )Nr   c                 S   s   | d S )Nr   r   )Zpairr   r   r   Ú<lambda>n  ó    zgetmembers.<locals>.<lambda>©Úkey)r   ÚgetmroÚsetÚdirrM   rJ   rK   r   r   ÚDynamicClassAttributeÚappendÚAttributeErrorrL   ÚaddÚsort)r
   Z	predicateÚmroÚresultsÚ	processedÚnamesrP   ÚkÚvrU   rO   r   r   r   Ú
getmembersE  s:    




rd   Ú	Attributezname kind defining_class objectc                 C   sT  t | ƒ}t t| ƒƒ}tdd„ |D ƒƒ}| f| }|| }t| ƒ}|D ].}|j ¡ D ]\}}t|tjƒrR| 	|¡ qRqDg }	t
ƒ }
|D �]Ê}d }d }d }||
k�rzz|dkr°tdƒ‚t| |ƒ}W n" tk
rÞ } zW 5 d }~X Y nœX t|d|ƒ}||k�rzd }d }|D ] }t||d ƒ}||k�r|}�q|D ]B}z| | |¡}W n tk
�rX   Y �q(Y nX ||k�r(|}�q(|d k	�rz|}|D ]0}||jk�r~|j| }||k�r¦|} �q°�q~|d k�r¼q‚|d k	�rÊ|n|}t|ttjfƒ�rêd}|}nFt|ttjfƒ�rd}|}n*t|tƒ�rd}|}nt|ƒ�r,d	}nd
}|	 	t||||ƒ¡ |
 |¡ q‚|	S )Nc                 s   s   | ]}|t tfkr|V  qd S r   )r   r
   )Ú.0Úclsr   r   r   Ú	<genexpr>�  s      z'classify_class_attrs.<locals>.<genexpr>rJ   z)__dict__ is special, don't want the proxyÚ__objclass__zstatic methodzclass methodÚpropertyÚmethodÚdata)rV   r   ÚtuplerX   rJ   rK   r   r   rY   rZ   rW   Ú	ExceptionrL   Ú__getattr__r[   ÚstaticmethodÚBuiltinMethodTypeÚclassmethodÚClassMethodDescriptorTyperj   rC   re   r\   )rg   r^   ZmetamroZclass_basesZ	all_basesra   rP   rb   rc   Úresultr`   rN   ZhomeclsZget_objZdict_objÚexcZlast_clsZsrch_clsZsrch_objr,   Úkindr   r   r   Úclassify_class_attrss  s€    












rw   c                 C   s   | j S r   )Ú__mro__)rg   r   r   r   rV   ç  s    rV   ©Ústopc                   s|   ˆ d krdd„ }n‡ fdd„}| }t |ƒ|i}t ¡ }|| ƒrx| j} t | ƒ}||ks`t|ƒ|krntd |¡ƒ‚| ||< q6| S )Nc                 S   s
   t | dƒS ©NÚ__wrapped__©r   ©r(   r   r   r   Ú_is_wrapperþ  s    zunwrap.<locals>._is_wrapperc                    s   t | dƒoˆ | ƒ S r{   r}   r~   ry   r   r   r     s    z!wrapper loop when unwrapping {!r})ÚidÚsysÚgetrecursionlimitr|   ÚlenÚ
ValueErrorÚformat)Úfuncrz   r   r(   ZmemoZrecursion_limitZid_funcr   ry   r   Úunwrapí  s    

r‡   c                 C   s   |   ¡ }t|ƒt| ¡ ƒ S r   )Ú
expandtabsrƒ   Úlstrip)ÚlineZexpliner   r   r   Ú
indentsize  s    r‹   c                 C   sN   t j | j¡}|d krd S | j d¡d d… D ]}t||ƒ}q.t|ƒsJd S |S )NÚ.éÿÿÿÿ)r�   ÚmodulesÚgetÚ
__module__Ú__qualname__ÚsplitrL   r   )r†   rg   rN   r   r   r   Ú
_findclass  s    r“   c              	   C   s  t | ƒrT| jD ]@}|tk	rz
|j}W n tk
r<   Y qY nX |d k	r|  S q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 |ƒ�r|jd | | jk�r|}n|j
}n®t| tƒ�rP| j}|j}t|ƒ}|d k�sJt	||ƒ| k	�r¾d S nnt| ƒ�sdt| ƒ�rº| j}| j}t	||ƒ| k	�r„d S t| ƒ�r¾t	|dd ƒ}t|tƒ�r¾||k�r¾|| S nd S |jD ]F}zt	||ƒj}W n tk
�rô   Y �qÄY nX |d k	�rÄ|  S �qÄd S )Nr"   rŒ   Ú	__slots__)r   rx   r
   Ú__doc__r[   r   r"   Ú__name__Ú__self__rL   Ú	__class__r   r“   rB   r‘   r   rj   Úfgetr   r   ri   r   Údict)r,   rP   ÚdocrN   Úselfrg   r†   Úslotsr   r   r   Ú_finddoc   sn    



ÿ


ÿ



rž   c              	   C   sh   z
| j }W n tk
r    Y d S X |d krRzt| ƒ}W n ttfk
rP   Y d S X t|tƒs`d S t|ƒS r   )r•   r[   rž   Ú	TypeErrorr   ÚstrÚcleandoc)r
   r›   r   r   r   Úgetdoc^  s    

r¢   c                 C   sê   z|   ¡  d¡}W n tk
r(   Y d S X tj}|dd … D ]*}t| ¡ ƒ}|r<t|ƒ| }t||ƒ}q<|r||d  ¡ |d< |tjk r®tdt|ƒƒD ]}|| |d … ||< q”|rÄ|d sÄ| 	¡  q®|rÜ|d sÜ| 	d¡ qÄd 
|¡S d S )NÚ
é   r   r�   )rˆ   r’   ÚUnicodeErrorr�   Úmaxsizerƒ   r‰   ÚminÚrangeÚpopÚjoin)r›   ÚlinesZmarginrŠ   ZcontentÚindentÚir   r   r   r¡   q  s(    
 
r¡   c                 C   sÆ   t | ƒr(t| dd ƒr| jS td | ¡ƒ‚t| ƒrht| dƒrZtj 	| j
¡}t|dd ƒrZ|jS td | ¡ƒ‚t| ƒrv| j} t| ƒr„| j} t| ƒr’| j} t| ƒr | j} t| ƒr®| jS td t| ƒj¡ƒ‚d S )NÚ__file__z{!r} is a built-in moduler�   z{!r} is a built-in classzVmodule, class, method, function, traceback, frame, or code object was expected, got {})r   rL   r®   rŸ   r…   r   r   r�   rŽ   r�   r�   r   r"   r   r&   r<   Útb_framer>   Úf_coder@   Úco_filenamer   r–   )r
   Úmoduler   r   r   ÚgetfileŽ  s.    
þr³   c                 C   sT   t j | ¡}dd„ tj ¡ D ƒ}| ¡  |D ]"\}}| |¡r,|d |…   S q,d S )Nc                 S   s   g | ]}t |ƒ |f‘qS r   )rƒ   )rf   Úsuffixr   r   r   Ú
<listcomp>¬  s   ÿz!getmodulename.<locals>.<listcomp>)ÚosÚpathÚbasenameÚ	importlibÚ	machineryÚall_suffixesr]   Ú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 ˆ ¡d tjj	d  ‰ nt‡ fdd„tjj
D ƒƒr~d S tj ˆ ¡rŽˆ S tt| ˆ ƒdd ƒd k	r¨ˆ S ˆ tjkr¶ˆ S d S )Nc                 3   s   | ]}ˆ   |¡V  qd S r   ©r¼   ©rf   Ús©Úfilenamer   r   rh   »  s     z getsourcefile.<locals>.<genexpr>r   c                 3   s   | ]}ˆ   |¡V  qd S r   r¿   rÀ   rÂ   r   r   rh   ¾  s     Ú
__loader__)r³   r¹   rº   ÚDEBUG_BYTECODE_SUFFIXESÚOPTIMIZED_BYTECODE_SUFFIXESÚanyr¶   r·   ÚsplitextÚSOURCE_SUFFIXESÚEXTENSION_SUFFIXESÚexistsrL   Ú	getmoduleÚ	linecacheÚcache)r
   Zall_bytecode_suffixesr   rÂ   r   Úgetsourcefile´  s"    
ÿÿ
rÏ   c                 C   s,   |d krt | ƒpt| ƒ}tj tj |¡¡S r   )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¡S |d k	rD|tkrDtj t| ¡S zt| |ƒ}W n tk
rh   Y d S X |tkr‚tj t| ¡S tj 	¡  
¡ D ]\\}}t |ƒr�t|dƒr�|j}|t |d ¡krÂq�|t|< t|ƒ}|j t|< ttj |¡< q�|tk�rtj t| ¡S tjd }t| dƒ�s"d S t|| jƒ�rJt|| jƒ}|| k�rJ|S tjd }t|| jƒ�r|t|| jƒ}	|	| k�r||S d S )Nr�   r®   Ú__main__r–   Úbuiltins)r   r   r�   rŽ   r�   r�   ÚmodulesbyfilerÓ   rŸ   ÚcopyrK   r®   Ú_filesbymodnamer–   r¶   r·   ÚrealpathrL   )
r
   rÒ   ÚfileÚmodnamer²   r(   ÚmainZ
mainobjectZbuiltinZbuiltinobjectr   r   r   rÌ   Ö  sJ    
ÿ

ÿ




rÌ   c                 C   sø  t | ƒ}|rt |¡ n$t| ƒ}| d¡r4| d¡s<tdƒ‚t| |ƒ}|rZt ||j	¡}n
t |¡}|sptdƒ‚t
| ƒr€|dfS t| ƒ�r | j}t d| d ¡}g }tt|ƒƒD ]F}| || ¡}|r²|| d dkrä||f  S | | d	¡|f¡ q²|�r| ¡  ||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 d¡}|	dk�räz||	 }
W n t k
�rÆ   tdƒ‚Y nX | |
¡�rØ�qä|	d	 }	�q’||	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lineno is out of boundszcould not find code object)!rÏ   rÍ   Ú
checkcacher³   Ú
startswithr¼   ÚOSErrorrÌ   ÚgetlinesrJ   r   r   r–   ÚreÚcompiler¨   rƒ   ÚmatchrZ   Úgroupr]   r   r"   r   r&   r<   r¯   r>   r°   r@   r   rà   Ú
IndexError)r
   rÚ   r²   r«   rN   ZpatZ
candidatesr­   rç   ÚlnumrŠ   r   r   r   Ú
findsource  sf    










rë   c              	   C   s.  zt | ƒ\}}W n ttfk
r*   Y d S X t| ƒrìd}|rT|d d d… dkrTd}|t|ƒk rz||  ¡ dkrz|d }qT|t|ƒk rè|| d d… dkrèg }|}|t|ƒk rÞ|| d d… dkrÞ| ||  ¡ ¡ |d }q¢d |¡S �n>|dk�r*t	|| ƒ}|d }|dk�r*||  
¡ d d… dk�r*t	|| ƒ|k�r*||  ¡  
¡ g}|dk�rÐ|d }||  ¡  
¡ }|d d… dk�rÐt	|| ƒ|k�rÐ|g|d d…< |d }|dk �r¼�qÐ||  ¡  
¡ }�qt|�rø|d  ¡ dk�røg |d d…< �qÐ|�r |d  ¡ dk�r g |dd …< �qød |¡S d S )	Nr   é   z#!r¤   )Ú ú#rî   rí   r�   )rë   rã   rŸ   r   rƒ   ÚstriprZ   rˆ   rª   r‹   r‰   )r
   r«   rê   ÚstartZcommentsÚendr¬   Zcommentr   r   r   ÚgetcommentsR  sL     
  

$ÿ
$
 rò   c                   @   s   e Zd ZdS )Ú
EndOfBlockN©r–   r�   r‘   r   r   r   r   ró     s    ró   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚBlockFinderc                 C   s4   d| _ d| _d| _d| _d| _d| _d| _d | _d S )Nr   Fr¤   )r¬   ÚislambdaÚstartedÚpasslineÚindecoratorÚdecoratorhasargsÚlastÚ	body_col0©rœ   r   r   r   Ú__init__ƒ  s    zBlockFinder.__init__c                 C   sr  | j sB| jsB|dkrd| _n|dkr8|dkr2d| _d| _ d| _�n,|dkrZ| jrVd| _�n|dkrv| jrtd| _d| _nø|tjkr®d| _|d | _| jršt‚| jr¬| js¬d| _nÀ| jr¶n¸|tj	krî| j
d krÚ| j rÚ|d	 | _
| jd	 | _d| _n€|tjk�r| jd	 | _| jdk�rnt‚nV|tjk�rL| j
d k	�rn|d	 | j
k�rn|d | _n"| jdk�rn|tjtjfk�rnt‚d S )
Nú@T)ÚdefÚclassÚlambdar  ú(ú)Fr   r¤   )r÷   rù   rö   rø   rú   ÚtokenizeÚNEWLINErû   ró   ÚINDENTrü   r¬   ÚDEDENTÚCOMMENTÚNL)rœ   r   ÚtokenZsrowcolZerowcolrŠ   r   r   r   Ú
tokeneater�  sL    





zBlockFinder.tokeneaterN)r–   r�   r‘   rþ   r  r   r   r   r   rõ   �  s   
rõ   c              	   C   sV   t ƒ }z(t t| ƒj¡}|D ]}|j|Ž  qW n ttfk
rF   Y nX | d |j… S r   )	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¤   )	r‡   rë   r<   r¯   r   r>   r°   Úco_namer  ©r
   r«   rê   r   r   r   ÚgetsourcelinesÊ  s    ÿ
ÿr  c                 C   s   t | ƒ\}}d |¡S )Nrí   )r  rª   r  r   r   r   Ú	getsourceß  s    r  c                 C   sR   g }| j tddƒd� | D ]2}| ||jf¡ ||kr| t|| ||ƒ¡ q|S )Nr�   r–   rT   )r]   r   rZ   rM   Úwalktree)ÚclassesÚchildrenÚparentr_   rß   r   r   r   r  é  s    r  Fc                 C   sš   i }g }| D ]d}|j r^|j D ]>}||kr0g ||< ||| krJ||  |¡ |r|| kr qpqq||kr| |¡ q|D ]}|| krv| |¡ qvt||d ƒS r   )rM   rZ   r  )r  Úuniquer  Úrootsrß   r  r   r   r   Úgetclasstreeó  s"    	
 r  Ú	Argumentszargs, varargs, varkwc           	      C   s    t | ƒstd | ¡ƒ‚| j}| j}| j}t|d |… ƒ}t|||| … ƒ}d}||7 }d }| jt@ rx| j| }|d }d }| jt	@ r�| j| }t
|| ||ƒS )Nz{!r} is not a code objectr   r¤   )r@   rŸ   r…   Úco_varnamesÚco_argcountÚco_kwonlyargcountÚlistr'   Ú
CO_VARARGSÚCO_VARKEYWORDSr  )	Úcora   ÚnargsZnkwargsÚargsÚ
kwonlyargsÚstepÚvarargsÚvarkwr   r   r   Úgetargs  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ì   ©Ú
stacklevelzgFunction has keyword-only parameters or annotations, use inspect.signature() API which can support them)ÚwarningsÚwarnÚDeprecationWarningÚgetfullargspecr„   r-  )r†   r'  r*  r+  Údefaultsr(  ÚkwonlydefaultsÚannr   r   r   Ú
getargspec-  s     þÿr7  ÚFullArgSpeczGargs, varargs, varkw, defaults, kwonlyargs, kwonlydefaults, annotationsc              
   C   s|  zt | ddtd�}W n, tk
r@ } ztdƒ|‚W 5 d }~X Y nX g }d }d }g }g }d}i }	d}i }
|j|jk	r||j|	d< |j ¡ D ]È}|j}|j	}|t
krÂ| |¡ |j|jk	rÀ||jf7 }nv|tkrî| |¡ |j|jk	rì||jf7 }nJ|tkrü|}n<|tk�r*| |¡ |j|jk	�r8|j|
|< n|tk�r8|}|j|jk	r†|j|	|< q†|
�sZd }
|�sdd }t|| |||||
|	ƒS )NF©Úfollow_wrapper_chainsÚskip_bound_argÚsigclszunsupported callabler   Úreturn)Ú_signature_from_callableÚ	Signaturern   rŸ   Úreturn_annotationÚemptyÚ
parametersÚvaluesrv   rN   Ú_POSITIONAL_ONLYrZ   ÚdefaultÚ_POSITIONAL_OR_KEYWORDÚ_VAR_POSITIONALÚ_KEYWORD_ONLYÚ_VAR_KEYWORDÚ
annotationr8  )r†   ÚsigÚexr'  r*  r+  Zposonlyargsr(  r4  ÚannotationsÚ
kwdefaultsÚparamrv   rN   r   r   r   r3  N  sb    ý






  ÿr3  ÚArgInfozargs varargs keywords localsc                 C   s    t | jƒ\}}}t|||| jƒS r   )r,  r°   rP  Úf_locals)Úframer'  r*  r+  r   r   r   Úgetargvalues­  s    rS  c                 C   sV   t | dd ƒdkr t| ƒ dd¡S t| tƒrN| jd|fkr>| jS | jd | j S t| ƒS )Nr�   Útypingztyping.rí   rÕ   rŒ   )rL   ÚreprÚreplacer   r   r�   r‘   )rJ  Zbase_moduler   r   r   Úformatannotation·  s    
rW  c                    s   t | dd ƒ‰ ‡ fdd„}|S )Nr�   c                    s
   t | ˆ ƒS r   )rW  )rJ  ©r²   r   r   Ú_formatannotationÂ  s    z5formatannotationrelativeto.<locals>._formatannotation)rL   )r
   rY  r   rX  r   ÚformatannotationrelativetoÀ  s    rZ  r   c                 C   s   d|  S ©NÚ*r   ©rN   r   r   r   rR   É  rS   rR   c                 C   s   d|  S ©Nú**r   r]  r   r   r   rR   Ê  rS   c                 C   s   dt | ƒ S ©Nú=©rU  ©rO   r   r   r   rR   Ë  rS   c                 C   s   d|  S )Nz -> r   )Útextr   r   r   rR   Ì  rS   c                    s<  ddl m} |dtdd� ‡ ‡‡fdd„}g }|rBt| ƒt|ƒ }t| ƒD ]:\}}||ƒ}|rz||krz||
|||  ƒ }| |¡ qJ|d k	r¢| |||ƒƒ¡ n|r°| d¡ |rì|D ]2}||ƒ}|rà||krà||
|| ƒ7 }| |¡ q¸|d k	�r| |	||ƒƒ¡ d	d
 |¡ d }dˆ k�r8||ˆˆ d ƒƒ7 }|S )Nr   )r1  zc`formatargspec` is deprecated since Python 3.5. Use `signature` and the `Signature` object directlyrì   r.  c                    s(   ˆ| ƒ}| ˆ kr$|dˆˆ |  ƒ 7 }|S )Nz: r   )Úargrt   ©rM  rW  Ú	formatargr   r   Úformatargandannotationá  s    z-formatargspec.<locals>.formatargandannotationr\  r  ú, r  r=  )r0  r1  r2  rƒ   Ú	enumeraterZ   rª   )r'  r*  r+  r4  r(  r5  rM  rg  ÚformatvarargsÚformatvarkwÚformatvalueZformatreturnsrW  r1  rh  ÚspecsZfirstdefaultr­   re  ÚspecZ	kwonlyargrt   r   rf  r   ÚformatargspecÆ  s<    ý


rp  c                 C   s   d|  S r[  r   r]  r   r   r   rR     rS   c                 C   s   d|  S r^  r   r]  r   r   r   rR     rS   c                 C   s   dt | ƒ S r`  rb  rc  r   r   r   rR     rS   c                 C   s†   |||fdd„}g }	t t| ƒƒD ]}
|	 || |
 ƒ¡ q |rV|	 ||ƒ||| ƒ ¡ |rt|	 ||ƒ||| ƒ ¡ dd |	¡ d S )Nc                 S   s   || ƒ|||  ƒ S r   r   )rN   Úlocalsrg  rm  r   r   r   Úconvert  s    z formatargvalues.<locals>.convertr  ri  r  )r¨   rƒ   rZ   rª   )r'  r*  r+  rq  rg  rk  rl  rm  rr  rn  r­   r   r   r   Úformatargvalues   s     ÿ
rs  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	 |¡| }td
| ||rzdnd|dkrˆdnd|f ƒ‚d S )Nc                    s   g | ]}|ˆ krt |ƒ‘qS r   rb  )rf   rN   ©rC  r   r   rµ     s      z&_missing_arguments.<locals>.<listcomp>r¤   r   rì   z	{} and {}z, {} and {}éþÿÿÿri  z*%s() missing %i required %s argument%s: %sÚ
positionalúkeyword-onlyrí   rÁ   )rƒ   r…   rª   rŸ   )Úf_nameZargnamesÚposrC  ra   ÚmissingrÁ   Útailr   rt  r   Ú_missing_arguments  s     


 þÿr|  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Ä|sÄdndf ƒ‚d S )Nc                    s   g | ]}|ˆ kr|‘qS r   r   )rf   re  rt  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)rƒ   r    rŸ   )rx  r'  Zkwonlyr*  ZdefcountZgivenrC  ZatleastZkwonly_givenZpluralrK  Z
kwonly_sigÚmsgr   rt  r   Ú	_too_many'  s*    ÿÿÿr~  c                O   s  t | ƒ}|\}}}}}}	}
| j}i }t| ƒrB| jd k	rB| jf| }t|ƒ}t|ƒ}|r^t|ƒnd}t||ƒ}t|ƒD ]}|| ||| < qt|r¢t||d … ƒ||< t|| ƒ}|rºi ||< | 	¡ D ]T\}}||krô|sæt
d||f ƒ‚||| |< qÂ||k�rt
d||f ƒ‚|||< qÂ||k�r<|�s<t|||||||ƒ ||k �r°|d || … }|D ]}||k�rZt||d|ƒ �qZt||| d … ƒD ] \}}||k�rŽ|| ||< �qŽd}|D ]6}||k�r¸|	�rä||	k�rä|	| ||< n|d7 }�q¸|�rt||d|ƒ |S )Nr   z*%s() got an unexpected keyword argument %rz(%s() got multiple values for argument %rTr¤   F)r3  r–   r   r—   rƒ   r§   r¨   rm   rW   rK   rŸ   r~  r|  rj  )r†   rv  Znamedro  r'  r*  r+  r4  r(  r5  r6  rx  Z	arg2valueZnum_posZnum_argsZnum_defaultsÚnr­   Zpossible_kwargsÚkwrO   Zreqre  rz  Úkwargr   r   r   Úgetcallargs<  sh    
ÿ
ÿ
 ÿ



r‚  ÚClosureVarsz"nonlocals globals builtins unboundc           	      C   sü   t | ƒr| j} t| ƒs$td | ¡ƒ‚| j}| jd kr:i }ndd„ t|j| jƒD ƒ}| j	}| 
dtj¡}t|ƒrt|j}i }i }tƒ }|jD ]d}|dkr–qˆz|| ||< W qˆ tk
rê   z|| ||< W n tk
rä   | |¡ Y nX Y qˆX qˆt||||ƒS )Nú{!r} is not a Python functionc                 S   s   i | ]\}}||j “qS r   )Úcell_contents)rf   ÚvarZcellr   r   r   Ú
<dictcomp>�  s   ÿ z"getclosurevars.<locals>.<dictcomp>Ú__builtins__)ÚNoneÚTrueÚFalse)r   r"   r   rŸ   r…   r&   Ú__closure__ÚzipÚco_freevarsÚ__globals__r�   rÕ   rJ   r   rW   Úco_namesÚKeyErrorr\   rƒ  )	r†   ÚcodeZnonlocal_varsZ	global_nsZ
builtin_nsZglobal_varsZbuiltin_varsZunbound_namesrN   r   r   r   Úgetclosurevarsz  s>    	
þ
 ÿr“  Ú	Tracebackz+filename lineno function code_context indexr¤   c                 C   sÚ   t | ƒr| j}| j} n| j}t| ƒs2td | ¡ƒ‚t| ƒp@t| ƒ}|dkr¾|d |d  }z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ì   )r<   Ú	tb_linenor¯   Úf_linenor>   rŸ   r…   rÏ   r³   rë   rã   Úmaxr§   rƒ   r”  r°   r  )rR  ÚcontextÚlinenorÃ   rð   r«   rê   Úindexr   r   r   Úgetframeinfo±  s$    r›  c                 C   s   | j S r   )r–  ©rR  r   r   r   Ú	getlinenoÑ  s    r�  Ú	FrameInforœ  c                 C   s2   g }| r.| ft | |ƒ }| t|Ž ¡ | j} q|S r   )r›  rZ   rž  Úf_back)rR  r˜  Ú	framelistÚ	frameinfor   r   r   ÚgetouterframesØ  s    r¢  c                 C   s4   g }| r0| j ft| |ƒ }| t|Ž ¡ | j} q|S r   )r¯   r›  rZ   rž  Útb_next)Útbr˜  r   r¡  r   r   r   Úgetinnerframesä  s    r¥  c                   C   s   t tdƒrt d¡S d S )NÚ	_getframer¤   )r   r�   r¦  r   r   r   r   Úcurrentframeð  s    r§  c                 C   s   t t d¡| ƒS )Nr¤   )r¢  r�   r¦  ©r˜  r   r   r   Ústackô  s    r©  c                 C   s   t t ¡ d | ƒS )Nrì   )r¥  r�   Úexc_infor¨  r   r   r   Útraceø  s    r«  c                 C   s   t jd  | ¡S )Nrx   )r   rJ   r   )Úklassr   r   r   Ú_static_getmro  s    r­  c                 C   s8   i }zt  | d¡}W n tk
r(   Y nX t ||t¡S ©NrJ   )r
   Ú__getattribute__r[   rš   r�   Ú	_sentinel)r,   ÚattrZinstance_dictr   r   r   Ú_check_instance  s    r²  c              	   C   sH   t | ƒD ]:}tt|ƒƒtkrz|j| W   S  tk
r@   Y qX qtS r   )r­  Ú_shadowed_dictr   r°  rJ   r‘  )r¬  r±  Úentryr   r   r   Ú_check_class  s    rµ  c                 C   s(   zt | ƒ W n tk
r"   Y dS X dS ©NFT)r­  rŸ   r+   r   r   r   Ú_is_type  s
    r·  c              	   C   sn   t jd }t| ƒD ]V}z| |¡d }W n tk
r<   Y qX t |ƒtjkr`|jdkr`|j|ks|  S qt	S r®  )
r   rJ   r­  r   r‘  r   r   r–   ri   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ìtt|ƒƒD ]:}tt|ƒƒt kr°z|j	| W   S  t
k
rè   Y q°X q°|t k	rø|S t|ƒ‚d S )Nr   r   )r°  r·  r   r³  r   r   r²  rµ  r­  rJ   r‘  r[   )r,   r±  rE  Zinstance_resultr¬  r¸  Zklass_resultr´  r   r   r   Úgetattr_static+  s:    ÿ
ÿ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�   )Ú
gi_runningr»  Úgi_framer½  Úf_lastirº  r¼  )Ú	generatorr   r   r   Úgetgeneratorstate`  s    	
rÃ  c                 C   s:   t | ƒstd | ¡ƒ‚t| dd ƒ}|d k	r2| jjS i S d S )Nz{!r} is not a Python generatorrÀ  )r3   rŸ   r…   rL   rÀ  rQ  )rÂ  rR  r   r   r   Úgetgeneratorlocalsr  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 r¾  )Ú
cr_runningrÆ  Úcr_framerÈ  rÁ  rÅ  rÇ  )Ú	coroutiner   r   r   ÚgetcoroutinestateŠ  s    	
rÌ  c                 C   s"   t | dd ƒ}|d k	r|jS i S d S )NrÊ  )rL   rQ  )rË  rR  r   r   r   Úgetcoroutinelocalsœ  s    rÍ  Ú
from_bytesc                 C   s8   zt | |ƒ}W n tk
r$   Y d S X t|tƒs4|S d S r   )rL   r[   r   Ú_NonUserDefinedCallables)rg   Zmethod_nameZmethr   r   r   Ú"_signature_get_user_defined_method¸  s    
rÐ  c              
   C   s’  | j }t| ¡ ƒ}|jpd}|jp$i }|r2|| }z| j||Ž}W n6 tk
rx } zd |¡}	t|	ƒ|‚W 5 d }~X Y nX d}
| ¡ D ]ú\}}z|j	| }W n t
k
r°   Y njX |jtkrÈ| |¡ q†|jtkrþ||krðd}
|j|d�||< n| |j¡ q†|jtk�r|j|d�||< |
r†|jtk�rN|| jtd�}|||< | |¡ q†|jttfk�rj| |¡ q†|jtkr†| |j¡ q†| j| ¡ d�S )Nr   z+partial object {!r} has incorrect argumentsFT)rE  ©rv   ©rB  )rB  r   rK   r'  ÚkeywordsÚbind_partialrŸ   r…   r„   Ú	argumentsr‘  rv   rD  r©   rF  rV  rN   rH  Úmove_to_endrI  rG  rC  )Úwrapped_sigÚpartialZ
extra_argsZ
old_paramsÚ
new_paramsZpartial_argsZpartial_keywordsZbarL  r}  Ztransform_to_kwonlyÚ
param_namerO  Z	arg_valueZ	new_paramr   r   r   Ú_signature_get_partialÈ  sL    






rÛ  c                 C   sl   t | j ¡ ƒ}|r$|d jttfkr,tdƒ‚|d j}|ttfkrP|dd … }n|t	k	r`tdƒ‚| j
|d�S )Nr   zinvalid method signaturer¤   zinvalid argument typerÒ  )rm   rB  rC  rv   rI  rH  r„   rF  rD  rG  rV  )rK  Úparamsrv   r   r   r   Ú_signature_bound_method  s    
rÝ  c                 C   s&   t | ƒp$t| ƒp$t| tƒp$| ttfkS r   )rB   r   r   rÏ  r   r
   r+   r   r   r   Ú_signature_is_builtin.  s    ÿþ
ûrÞ  c                 C   s”   t | ƒr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sxt|tƒo’|d ksŠt|t	ƒo’t|t	ƒS )NFr–   r&   Ú__defaults__Ú__kwdefaults__Ú__annotations__)
Úcallabler   rL   Ú_voidr   r   r?   r    rm   rš   )r,   rN   r’  r4  rN  rM  r   r   r   Ú_signature_is_functionlike:  s     ÿþýürä  c                 C   s<   |   d¡}|dkr|   d¡}|   d¡}|   d¡}| d|… S )Nú,r�   r  ú:ra  rì   )Úfind)ro  ry  Zcposr   r   r   Ú_signature_get_bound_paramS  s    




rè  c                 C   s   | s| d d fS d }d }dd„ |   d¡D ƒ}t|ƒj}t |¡}d}d}g }|j}	d}
tj}tj}t|ƒ}|D ]ž}|j	|j
 }}||kr¼|dkr¦|r˜d}qld}|
d7 }
ql|d	kr¼d}|
d }ql||krÒ|d
krÒ|
}ql|ròd}||krê|dksò|	dƒ |	|ƒ |dkrl|	dƒ qld |¡}|||fS )Nc                 S   s   g | ]}|  d ¡‘qS )Úascii)Úencode)rf   Úlr   r   r   rµ   }  s     z6_signature_strip_non_python_syntax.<locals>.<listcomp>r£   Fr   rå  Tr¤   ú/ú$r  ri  ú rí   )r’   r  r  r  rZ   r  ÚOPÚ
ERRORTOKENÚnextr   Ústringrª   )Ú	signatureÚself_parameterÚlast_positional_onlyr«   rÂ  Ztoken_streamZdelayed_commaZskip_next_commard  r\   Zcurrent_parameterrï  rð  Útr   rò  Úclean_signaturer   r   r   Ú"_signature_strip_non_python_syntaxj  sP    




rø  Tc              	      s`  dd l ‰| j‰ t|ƒ\}}}d| d }zˆ |¡}W n tk
rN   d }Y nX t|ˆjƒsjtd |¡ƒ‚|j	d }	g ‰ˆ j
‰tƒ ‰d }i ‰t|dd ƒ}
|
r´tj |
d ¡}|r´|j‰tj ¡ ‰	‡fdd„‰‡‡‡	fdd	„‰
G ‡‡
fd
d„dˆjƒ‰ˆf‡ ‡‡‡‡‡‡‡fdd„	}t|	jjƒ}t|	jjƒ}tj||d d�}|d k	�rJˆ j‰nˆ j‰ttt|ƒƒƒD ](\}\}}|||ƒ ||k�r`ˆ j‰�q`|	jj�r¨ˆ j‰||	jjˆƒ ˆ j‰t|	jj |	jj!ƒD ]\}}|||ƒ �qÀ|	jj"�rôˆ j#‰||	jj"ˆƒ |d k	�rRt|dd ƒ}|d k	}t$|ƒ}|�r8|�s,|�r8ˆ %d¡ nˆd j&ˆ jd�}|ˆd< | ˆ| j
d�S )Nr   zdef fooz: passz"{!r} builtin has invalid signaturer�   c                    s   | j d k	rtdƒ‚| jS )Nz'Annotations are not currently supported)rJ  r„   re  )Únode)Úastr   r   Ú
parse_nameØ  s    
z&_signature_fromstr.<locals>.parse_namec                    s|   zt | ˆƒ}W n> tk
rL   zt | ˆƒ}W n tk
rF   tƒ ‚Y nX Y nX t|tttttt	d ƒfƒrrˆ  
|¡S tƒ ‚d S r   )ÚevalÚ	NameErrorÚRuntimeErrorr   r    ÚintÚfloatÚbytesr%   r   ZConstant)rÁ   rO   )rú  Ú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 }|}t |ˆ jƒr(| |j¡ |j}qt |ˆ jƒs:tƒ ‚| |j¡ d t	|ƒ¡}ˆ|ƒS )NrŒ   )
r   re   rZ   r±  rO   ÚNamerþ  r€   rª   Úreversed)rœ   rù  Úar  rO   ©rú  r  r   r   Úvisit_Attributeì  s    z<_signature_fromstr.<locals>.RewriteSymbolics.visit_Attributec                    s   t |jˆ jƒstƒ ‚ˆ|jƒS r   )r   ZctxZLoadr„   r€   )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	rpzˆƒ  |¡}ˆ |¡}W n tk
rR   ˆ}Y nX |ˆkr`d S |ˆk	rl|n|}ˆ ˆ |ˆ|ˆd�¡ d S ©N©rE  rJ  )Ú_emptyZvisitZliteral_evalr„   rZ   )Z	name_nodeZdefault_noderE  rN   Úo)Ú	Parameterr  rú  rA  Úinvalidrv   rB  rû  r   r   Úpý  s    
z_signature_fromstr.<locals>.p)Ú	fillvaluer—   rÑ  ©r@  )'rú  Ú_parameter_clsrø  ÚparseÚSyntaxErrorr   ZModuler„   r…   ZbodyrA  r
   rL   r�   rŽ   r�   rJ   r×   ZNodeTransformerr  r'  r4  Ú	itertoolsÚzip_longestÚPOSITIONAL_ONLYÚPOSITIONAL_OR_KEYWORDrj  r"  ZvarargÚVAR_POSITIONALÚKEYWORD_ONLYr�  r(  Zkw_defaultsr�  ÚVAR_KEYWORDr   r©   rV  )rg   r,   rÁ   r;  r÷  rô  rõ  Zprogramr²   r(   Zmodule_namer  r'  r4  r  r­   rN   rE  Z_selfZself_isboundZself_ismoduler   )r  r  rú  rA  r  rv   r  rB  rû  r  r  r   Ú_signature_fromstr²  sn    ÿ









r  c                 C   sB   t |ƒstd |¡ƒ‚t|dd ƒ}|s4td |¡ƒ‚t| |||ƒS )Nz%{!r} is not a Python builtin functionÚ__text_signature__z#no signature found for builtin {!r})rÞ  rŸ   r…   rL   r„   r  )rg   r†   r;  rÁ   r   r   r   Ú_signature_from_builtin<  s    ÿr!  c              	   C   sH  d}t |ƒs(t|ƒrd}ntd |¡ƒ‚t|dd ƒ}|rFt| |||ƒS | j}|j}|j}|j	}|j
}	|d |… }
|j}|||| … }|j}|j}|j}|r¦t|ƒ}nd}g }|| }|	}|
d |… D ]<}|rÒtnt}| |t¡}| ||||d�¡ |rÆ|d8 }qÆt|
|d … ƒD ]L\}}|�r&tnt}| |t¡}| |||||| d�¡ |�r|d8 }�q|jt@ �rš|||  }| |t¡}| |||td�¡ |D ]B}t}|d k	�r¼| |t¡}| |t¡}| |||t|d�¡ �qž|jt@ �r2|| }|jt@ �r
|d7 }|| }| |t¡}| |||td�¡ | || d	t¡|d
�S )NFTr„  r   r   )rJ  rv   r¤   )rJ  rv   rE  r=  ©r@  Ú__validate_parameters__)r   rä  rŸ   r…   rL   r  r  r&   r   r  Úco_posonlyargcountr!  rá  rß  rà  rƒ   rD  rF  r�   r  rZ   rj  r'   r#  rG  rH  r$  rI  )rg   r†   r;  Zis_duck_functionrÁ   r  Z	func_codeZ	pos_countZ	arg_namesZposonly_countrv  Zkeyword_only_countZkeyword_onlyrM  r4  rN  Zpos_default_countrB  Znon_default_countZposonly_leftrN   rv   rJ  ÚoffsetrE  rš  r   r   r   Ú_signature_from_functionL  sŒ    

ÿ

þ
ÿ

þ
ÿ
þr&  )r:  r;  c             
   C   sŽ  t | ƒstd | ¡ƒ‚t| tjƒrDt| j|||d�}|r@t|ƒS |S |rtt	| dd„ d�} t| tjƒrtt| |||d�S z
| j
}W n tk
r’   Y n&X |d k	r¸t|tƒs´td |¡ƒ‚|S z
| j}W n tk
rÖ   Y nvX t|tjƒ�rLt|j|||d�}t||dƒ}t|j ¡ ƒd }|jtjk�r(|S t|j ¡ ƒ}|f| }	|j|	d	�S t| ƒ�s`t| ƒ�rnt|| |d
�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	�r4t||||d�}|d k�r@| j!d d… D ]>}z
|j"}W n tk
�rp   Y nX |�rLt#|| |ƒ  S �qLt| j!k�r@| j$t%j$k�r¾| j&t%j&k�r¾| 't%¡S t(d | ¡ƒ‚nrt| t)ƒ�s@t t| ƒdƒ}
|
d k	�r@zt|
|||d�}W n8 t(k
�r> } zd | ¡}t(|ƒ|‚W 5 d }~X Y nX |d k	�r\|�rXt|ƒS |S t| tj*ƒ�r|d | ¡}t(|ƒ‚t(d | ¡ƒ‚d S )Nz{!r} is not a callable objectr9  c                 S   s
   t | dƒS )NÚ__signature__r}   r~   r   r   r   rR   Æ  rS   z*_signature_from_callable.<locals>.<lambda>ry   z1unexpected object {!r} in __signature__ attributer   r   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)+râ  rŸ   r…   r   r   r   r>  r"   rÝ  r‡   r'  r[   r?  Ú_partialmethodr#   Úpartialmethodr†   rÛ  rm   rB  rC  rv   r  r  rV  r   rä  r&  rÞ  r!  rØ  r   rÐ  rx   r   r  rþ   r
   r)  Úfrom_callabler„   rÏ  rA   )r,   r:  r;  r<  rK  r+  r×  Zfirst_wrapped_paramZ
sig_paramsrÙ  ZcallÚnewZinitrP   Ztext_sigrL  r}  r   r   r   r>  ª  s   	üü

ÿÿ
ü
ÿ
ÿü

ü

ü

ü


ÿ
ÿ
ü



r>  c                   @   s   e Zd ZdS )rã  Nrô   r   r   r   r   rã  t	  s   rã  c                   @   s   e Zd ZdS )r  Nrô   r   r   r   r   r  x	  s   r  c                   @   s4   e Zd ZdZdZdZdZdZdd„ Ze	dd	„ ƒZ
d
S )Ú_ParameterKindr   r¤   rì   é   é   c                 C   s   | j S r   )Ú_name_rý   r   r   r   Ú__str__ƒ	  s    z_ParameterKind.__str__c                 C   s   t |  S r   )Ú_PARAM_NAME_MAPPINGrý   r   r   r   Údescription†	  s    z_ParameterKind.descriptionN)r–   r�   r‘   r  r  r  r  r  r2  rj   r4  r   r   r   r   r.  |	  s   r.  zpositional-onlyzpositional or keywordzvariadic positionalrw  z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Ú_annotationr  c                C   s  zt |ƒ| _W n$ tk
r2   td|›d�ƒ‚Y nX |tk	rd| jttfkrdd}| | jj¡}t|ƒ‚|| _|| _	|tkr€tdƒ‚t
|tƒs¢d t|ƒj¡}t|ƒ‚|d dkrú|dd …  ¡ rú| jtkrâd	}| | jj¡}t|ƒ‚t| _d
 |dd … ¡}| ¡ �std |¡ƒ‚|| _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.  r6  r„   r  rG  rI  r…   r4  r7  r8  r   r    r   r–   rŸ   ÚisdigitrF  rD  Úisidentifierr5  )rœ   rN   rv   rE  rJ  r}  r   r   r   rþ   ¹	  s6    

ÿ
zParameter.__init__c                 C   s    t | ƒ| j| jf| j| jdœfS )N©r7  r8  )r   r5  r6  r7  r8  rý   r   r   r   Ú
__reduce__á	  s    
ÿþzParameter.__reduce__c                 C   s   |d | _ |d | _d S )Nr7  r8  r;  ©rœ   Ústater   r   r   Ú__setstate__ç	  s    
zParameter.__setstate__c                 C   s   | j S r   )r5  rý   r   r   r   rN   ë	  s    zParameter.namec                 C   s   | j S r   )r7  rý   r   r   r   rE  ï	  s    zParameter.defaultc                 C   s   | j S r   )r8  rý   r   r   r   rJ  ó	  s    zParameter.annotationc                 C   s   | j S r   )r6  rý   r   r   r   rv   ÷	  s    zParameter.kind)rN   rv   rJ  rE  c                C   sL   |t kr| j}|t kr| j}|t kr*| j}|t kr8| j}t| ƒ||||d�S r  )rã  r5  r6  r8  r7  r   )rœ   rN   rv   rJ  rE  r   r   r   rV  û	  s    zParameter.replacec                 C   sˆ   | j }| j}| jtk	r(d |t| jƒ¡}| jtk	rb| jtk	rPd |t| jƒ¡}nd |t| jƒ¡}|tkrtd| }n|t	kr„d| }|S )Nz{}: {}z{} = {}z{}={}r\  r_  )
rv   r5  r8  r  r…   rW  r7  rU  rG  rI  )rœ   rv   Ú	formattedr   r   r   r2  
  s    
ÿ


zParameter.__str__c                 C   s   d  | jj| ¡S )Nz	<{} "{}">©r…   r˜   r–   rý   r   r   r   Ú__repr__#
  s    zParameter.__repr__c                 C   s   t | j| j| j| jfƒS r   )ÚhashrN   rv   rJ  rE  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  ÚNotImplementedr5  r6  r7  r8  ©rœ   Úotherr   r   r   Ú__eq__)
  s    

ÿ
þ
ýzParameter.__eq__N)r–   r�   r‘   r”   rD  r  rF  r  rG  r  rH  r  rI  r  r  rA  rþ   r<  r?  rj   rN   rE  rJ  rv   rã  rV  r2  rB  rD  rI  r   r   r   r   r  ™	  s4   (



 ÿ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 )ÚBoundArguments)rÕ  Ú
_signatureÚ__weakref__c                 C   s   || _ || _d S r   )rÕ  rK  )rœ   ró  rÕ  r   r   r   rþ   G
  s    zBoundArguments.__init__c                 C   s   | j S r   )rK  rý   r   r   r   ró  K
  s    zBoundArguments.signaturec              	   C   s~   g }| j j ¡ D ]d\}}|jttfkr* qvz| j| }W n tk
rR   Y  qvY qX |jtkrj| 	|¡ q| 
|¡ qt|ƒS r   )rK  rB  rK   rv   rI  rH  rÕ  r‘  rG  ÚextendrZ   rm   )rœ   r'  rÚ  rO  re  r   r   r   r'  O
  s    
zBoundArguments.argsc              	   C   s’   i }d}| j j ¡ D ]x\}}|sD|jttfkr4d}n|| jkrDd}q|sJqz| j| }W n tk
rl   Y qX |jtkr„| |¡ q|||< q|S r¶  )	rK  rB  rK   rv   rI  rH  rÕ  r‘  Úupdate)rœ   ÚkwargsZkwargs_startedrÚ  rO  re  r   r   r   rO  f
  s&    


zBoundArguments.kwargsc              	   C   sž   | j }g }| jj ¡ D ]x\}}z| ||| f¡ W q tk
rŒ   |jtk	rV|j}n$|jt	krfd}n|jt
krvi }nY q| ||f¡ Y qX qt|ƒ| _ d S )Nr   )rÕ  rK  rB  rK   rZ   r‘  rE  r  rv   rG  rI  r   )rœ   rÕ  Znew_argumentsrN   rO  Ú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 rE  )r   rJ  rF  ró  rÕ  rG  r   r   r   rI   
  s    

ÿzBoundArguments.__eq__c                 C   s   |d | _ |d | _d S )NrK  rÕ  ©rK  rÕ  r=  r   r   r   r?  ¨
  s    
zBoundArguments.__setstate__c                 C   s   | j | jdœS )NrR  rR  rý   r   r   r   Ú__getstate__¬
  s    zBoundArguments.__getstate__c                 C   s@   g }| j  ¡ D ]\}}| d ||¡¡ qd | jjd |¡¡S )Nz{}={!r}z	<{} ({})>ri  )rÕ  rK   rZ   r…   r˜   r–   rª   )rœ   r'  re  rO   r   r   r   rB  ¯
  s    zBoundArguments.__repr__N)r–   r�   r‘   r”   rþ   rj   ró  r'  rO  rQ  rI  r?  rS  rB  r   r   r   r   rJ  4
  s   


rJ  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Ú_parametersNTr"  c                C   sî   |d krt ƒ }nÈ|rÆt ƒ }t}d}t|ƒD ]˜\}}|j}	|j}
|	|k rdd}| |j|	j¡}t|ƒ‚n|	|krtd}|	}|	ttfkr |j	t
krœ|r d}t|ƒ‚nd}|
|krºd |
¡}t|ƒ‚|||
< q*nt dd„ |D ƒƒ}t |¡| _|| _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 r   r]  ©rf   rO  r   r   r   rh     s   ÿz%Signature.__init__.<locals>.<genexpr>)r   rD  rj  rv   rN   r…   r4  r„   rF  rE  r  r   ÚMappingProxyTyperU  rT  )rœ   rB  r@  r#  rÜ  Ztop_kindZkind_defaultsÚidxrO  rv   rN   r}  r   r   r   rþ   Ô
  sD    ÿÿ



ÿ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.  )r0  r1  r2  r&  ©rg   r†   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.  )r0  r1  r2  r!  rY  r   r   r   Úfrom_builtin  s
     þzSignature.from_builtin©Úfollow_wrappedc                C   s   t || |d�S )N)r<  r:  )r>  )rg   r,   r]  r   r   r   r,  #  s    ÿzSignature.from_callablec                 C   s   | j S r   )rU  rý   r   r   r   rB  )  s    zSignature.parametersc                 C   s   | j S r   ©rT  rý   r   r   r   r@  -  s    zSignature.return_annotation)rB  r@  c                C   s0   |t kr| j ¡ }|t kr | j}t| ƒ||d�S )Nr  )rã  rB  rC  rT  r   )rœ   rB  r@  r   r   r   rV  1  s    
ÿzSignature.replacec                 C   s8   t dd„ | j ¡ D ƒƒ}dd„ | j ¡ D ƒ}||| jfS )Nc                 s   s   | ]}|j tkr|V  qd S r   )rv   rH  rV  r   r   r   rh   A  s    
ÿz(Signature._hash_basis.<locals>.<genexpr>c                 S   s   i | ]}|j tkr|j|“qS r   )rv   rH  rN   rV  r   r   r   r‡  D  s    
ÿ z)Signature._hash_basis.<locals>.<dictcomp>)rm   rB  rC  r@  )rœ   rÜ  Ú
kwo_paramsr   r   r   Ú_hash_basis@  s    zSignature._hash_basisc                 C   s(   |   ¡ \}}}t| ¡ ƒ}t|||fƒS r   )r`  Ú	frozensetrC  rC  )rœ   rÜ  r_  r@  r   r   r   rD  I  s    zSignature.__hash__c                 C   s*   | |krdS t |tƒstS |  ¡ | ¡ kS rE  )r   r?  rF  r`  rG  r   r   r   rI  N  s
    
zSignature.__eq__F©rØ  c                C   sº  t ƒ }t| j ¡ ƒ}d}t|ƒ}zt|ƒ}W nà tk
�r   zt|ƒ}	W n tk
rf   Y Y �q¼Y n¢X |	jtkrzY �q¼nŽ|	j|kr¸|	jt	krªd}
|
j
|	jd�}
t|
ƒd ‚|	f}Y �q¼nP|	jtksÌ|	jtk	rÚ|	f}Y �q¼n.|rì|	f}Y �q¼nd}
|
j
|	jd�}
t|
ƒd ‚Y q X zt|ƒ}	W n  tk
�r:   tdƒd ‚Y q X |	jttfk�rVtdƒd ‚|	jtk�r„|g}| |¡ t|ƒ||	j< �q¼|	j|k�r°|	jt	k�r°tdj
|	jd�ƒd ‚|||	j< q d }t ||¡D ]¬}	|	jtk�rä|	}�qÌ|	jtk�rô�qÌ|	j}z| |¡}W nF tk
�rN   |�sJ|	jtk�rJ|	jtk�rJtdj
|d�ƒd ‚Y n(X |	jt	k�rntdj
|	jd�ƒ‚|||< �qÌ|�r®|d k	�r–|||j< ntdj
tt|ƒƒd�ƒ‚|  | |¡S )Nr   zA{arg!r} parameter is positional only, but was passed as a keyword)re  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  rB  rC  rñ  ÚStopIterationrv   rG  rN   rD  r…   rŸ   rI  rE  r  rH  rM  rm   r  Úchainr©   r‘  Ú_bound_arguments_cls)rœ   r'  rO  rØ  rÕ  rB  Zparameters_exZarg_valsZarg_valrO  r}  rC  Zkwargs_paramrÚ  r   r   r   Ú_bindU  s°    




ÿÿÿ
ÿÿþÿÿÿþ

ÿÿzSignature._bindc                O   s   |   ||¡S r   ©rf  ©rœ   r'  rO  r   r   r   ÚbindØ  s    zSignature.bindc                O   s   | j ||dd�S )NTrb  rg  rh  r   r   r   rÔ  ß  s    zSignature.bind_partialc                 C   s    t | ƒt| j ¡ ƒfd| jifS ©NrT  )r   rm   rU  rC  rT  rý   r   r   r   r<  æ  s    þzSignature.__reduce__c                 C   s   |d | _ d S rj  r^  r=  r   r   r   r?  ë  s    zSignature.__setstate__c                 C   s   d  | jj| ¡S )Nz<{} {}>rA  rý   r   r   r   rB  î  s    zSignature.__repr__c           	      C   sÀ   g }d}d}| j  ¡ D ]d}t|ƒ}|j}|tkr6d}n|rH| d¡ d}|tkrVd}n|tkrp|rp| d¡ d}| |¡ q|rŠ| d¡ d d 	|¡¡}| j
tk	r¼t| j
ƒ}|d |¡7 }|S )NFTrì  r\  z({})ri  z -> {})rB  rC  r    rv   rD  rZ   rG  rH  r…   rª   r@  r  rW  )	rœ   rt   Zrender_pos_only_separatorZrender_kw_only_separatorrO  r@  rv   ZrenderedZannor   r   r   r2  ñ  s0    




zSignature.__str__)N)r–   r�   r‘   r”   r  r  rJ  re  r  rA  rþ   rr   rZ  r[  r,  rj   rB  r@  rã  rV  r`  rD  rI  rf  ri  rÔ  r<  r?  rB  r2  r   r   r   r   r?  ¶
  s:   ÿ7



	 r?  r\  c                C   s   t j| |d�S )Nr\  )r?  r,  )r,   r]  r   r   r   ró    s    ró  c               
   C   sÈ  dd l } dd l}|  ¡ }|jddd� |jddddd	� | ¡ }|j}| d
¡\}}}z| |¡ }}	W nN tk
r¶ }
 z0d 	|t
|
ƒj|
¡}t|tjd� t d¡ W 5 d }
~
X Y nX |rÞ| d¡}|	}|D ]}t||ƒ}qÎ|	jtjk�rtdtjd� t d¡ |j�r¸td 	|¡ƒ td 	t|	ƒ¡ƒ td 	|	j¡ƒ ||	k�rxtd 	t|	jƒ¡ƒ t|	dƒ�r®td 	|	j¡ƒ n6zt|ƒ\}}W n tk
�rž   Y nX td 	|¡ƒ 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)Úactionrk  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_modulern   r…   r   r–   Úprintr�   ÚstderrÚexitr’   rL   Úbuiltin_module_namesZdetailsrÏ   Ú
__cached__rU  rÄ   r   rn  rë   r  )ro  r¹   Úparserr'  ÚtargetZmod_nameZ	has_attrsÚattrsr,   r²   ru   r}  ÚpartsÚpartÚ__r™  r   r   r   Ú_main$  s`    þ  þþ



r€  rÔ   )N)N)N)F)N)r¤   )r¤   )r¤   )r¤   )r¤   )r   )T)T)T)ªÚ
__author__r8   ÚdisZcollections.abcr7   ÚenumÚimportlib.machineryr¹   r  rÍ   r¶   rå   r�   r  r  r   r0  r#   rÕ   Úoperatorr   r   r   ÚglobalsZmod_dictZCOMPILER_FLAG_NAMESrK   rb   rc   rG   r   r   r   r   r   r   r   r    r   r*   r-   r.   r/   r1   r3   r5   r:   r<   r>   r@   rB   rC   rQ   rd   re   rw   rV   r‡   r‹   r“   rž   r¢   r¡   r³   r¾   rÏ   rÓ   rÖ   rØ   rÌ   rë   rò   rn   ró   rõ   r  r  r  r  r  r  r,  r-  r7  r8  r3  rP  rS  rW  rZ  r    rp  rs  r|  r~  r‚  rƒ  r“  r”  r›  r�  Ú_fieldsrž  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Í  r   r(  Z_WrapperDescriptorÚallZ_MethodWrapperrÿ  rJ   Z_ClassMethodWrapperrA   rÏ  rÐ  rÛ  rÝ  rÞ  rä  rè  rø  r  r!  r&  r>  rã  r  ÚIntEnumr.  r  rD  r  rF  r  rG  r  rH  r  rI  r3  r  rJ  r?  ró  r€  r–   r   r   r   r   Ú<module>   sx  	



	
,
t$
>
	
.N->




ÿ]


	  ù
;ü
<
5

 



		0

ý
LH
 
_þ K     û	    k:
