a
    ze                    @   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ej D ]\ZZeede < qd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, Z0d-d. Z1d/d0 Z2d1d2 Z3d3d4 Z4d5d6 Z5dd7d8Z6ed9d:Z7d;d< Z8d=d> Z9dd?d@dAZ:dBdC Z;dDdE Z<dFdG Z=dHdI Z>dJdK Z?dLdM Z@dNdO ZAdPdQ ZBddRdSZCi ZDi ZEddTdUZFG dVdW dWeGZHG dXdY dYejIZJdZd[ ZKd\d] ZLG d^d_ d_eGZMG d`da daZNdbdc ZOddde ZPdfdg ZQdhdi ZRddkdlZSedmdnZTdodp ZUedqdrZVdsdt ZWedudvZXdwdx ZYedydzZZd{d| Z[dd}d~Z\dd Z]ddddi i e^dd dd dd dd e\fddZ_e^dd dd dd fddZ`dd Zadd Zbdd ZceddZddd ZeeddZfdddZgdd Zheddefji ZjdddZkdddZldd ZmdddZnd ddZoep Zqdd Zrdd Zsdd Ztdd Zudd ZveqfddZwdZxdZydZzdZ{dd Z|dd Z}dZ~dZdZdZddĄ ZddƄ ZeejZeejZeejd ZeeeejfZddɄ Zddd˄Zdd̈́ Zddτ Zddф Zddӄ ZddՄ Zddd؄ZdddڄZddd܄Zdddݜdd߄ZG dd dZG dd dZG dd dejZejZejZejZejZejZededededediZG dd dZG dd dZG dd dZddddZdd Zedkre  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   /usr/lib/python3.9/inspect.pyismodule@   s    r   c                 C   s
   t | tS r   )r   typer	   r   r   r   isclassI   s    r   c                 C   s   t | tjS r   )r   r   
MethodTyper	   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p6t|dS )NFr   
__delete__r   r   r   r   r   isdatadescriptoro   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yz   Y n0 |D ]|}	zt| |	}
|	|v rtW n8 ty   |D ]}|	|jv r|j|	 }
 qqY qY n0 |r||
r|
|	|
f ||	 q|jdd d |S )Nr   c                 S   s   | d S )Nr   r   )Zpairr   r   r   <lambda>o      zgetmembers.<locals>.<lambda>key)r   getmrosetdirrM   rJ   rK   r   r   DynamicClassAttributeappendAttributeErrorrL   addsort)r
   	predicatemroresults	processednamesrP   kvrU   rO   r   r   r   
getmembersF  s:    




re   	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 }||
vrzz|dkrtdt| |}W n$ ty } zW Y d }~nd }~0 0 t|d|}||vrzd }d }|D ] }t||d }||u r|}q|D ]@}z|| |}W n tyX   Y q*Y n0 ||u r*|}q*|d urz|}|D ]0}||jv r~|j| }||vr|} qq~|d u rq|d ur|n|}t|ttjfrd}|}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vr|V  qd S r   )r   r
   ).0clsr   r   r   	<genexpr>  rS   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ClassMethodDescriptorTyperk   rC   rf   r\   )rh   r_   ZmetamroZclass_basesZ	all_basesrb   rP   rc   rd   resultra   rN   ZhomeclsZget_objZdict_objexcZlast_clsZsrch_clsZsrch_objr,   kindr   r   r   classify_class_attrst  s    












rx   c                 C   s   | j S r   )__mro__)rh   r   r   r   rV     s    rV   stopc                   s|    d u rdd }n fdd}| }t ||i}t }|| rx| j} t | }||v 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   rz   r   r   r     s    z!wrapper loop when unwrapping {!r})idsysgetrecursionlimitr}   len
ValueErrorformat)funcr{   r   r(   memoZrecursion_limitZid_funcr   rz   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 u rd S | jdd d D ]}t||}q.t|sJd S |S )N.)r   modulesget
__module____qualname__splitrL   r   )r   rh   rN   r   r   r   
_findclass  s    r   c              	   C   s  t | rR| jD ]>}|turz
|j}W n ty:   Y qY n0 |d ur|  S qd S t| r| jj}| j}t |rt	t	||d d| ju r|}n|j
}n$t| r| j}t| }|d u st	||| urd S nt| r| j}| j}t |r|jd | | jkr|}n|j
}nt| trN| j}|j}t|}|d u sHt	||| urd S nnt| sbt| r| j}| j}t	||| urd S t| rt	|dd }t|tr||v r|| S nd S |jD ]D}zt	||j}W n ty   Y qY n0 |d ur|  S qd S )Nr"   r   	__slots__)r   ry   r
   __doc__r[   r   r"   __name____self__rL   	__class__r   r   rB   r   r   rk   fgetr   r   rj   r   dict)r,   rP   docrN   selfrh   r   slotsr   r   r   _finddoc!  sn    










r   c              	   C   sd   z
| j }W n ty   Y d S 0 |d u rNzt| }W n ttfyL   Y d S 0 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y&   Y d S 0 tj}|dd  D ]*}t| }|r:t|| }t||}q:|rz|d  |d< |tjk rtdt|D ]}|| |d  ||< q|r|d s|	  q|r|d s|	d qd
|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   r  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   )rg   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 ur S  tjv r S d S )Nc                 3   s   | ]}  |V  qd S r   r   rg   sfilenamer   r   ri     rS   z getsourcefile.<locals>.<genexpr>r   c                 3   s   | ]}  |V  qd S r   r   r   r   r   r   ri     rS   
__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 u 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 urD|tv rDtjt| S zt| |}W n tt	fyj   Y d S 0 |tv rtjt| S tj
  D ]\\}}t |rt|dr|j}|t|d krq|t|< t|}|j t|< ttj|< q|tv r
tjt| S tjd }t| ds$d S t|| jrLt|| j}|| u rL|S tjd }t|| jr~t|| j}	|	| u r~|S d S )Nr   r   __main__r   builtins)r   r   r   r   r   r   modulesbyfiler   r   FileNotFoundErrorcopyrK   r   _filesbymodnamer   r   r   realpathrL   )
r
   r   filemodnamer   r(   mainZ
mainobjectZbuiltinZbuiltinobjectr   r   r   r     sJ    







r   c                   @   s   e Zd ZdS )ClassFoundExceptionNr   r   r   r   r   r   r   r     s   r   c                   @   s(   e Zd Zdd Zdd ZeZdd ZdS )_ClassFinderc                 C   s   g | _ || _d S r   )stackqualname)r   r   r   r   r   __init__  s    z_ClassFinder.__init__c                 C   s<   | j |j | j d | | | j   | j   d S )Nz<locals>)r   rZ   rN   generic_visitr   r   noder   r   r   visit_FunctionDef  s
    

z_ClassFinder.visit_FunctionDefc                 C   sb   | j |j | jd| j krJ|jr4|jd j}n|j}|d8 }t|| | | j 	  d S )Nr   r   r   )
r   rZ   rN   r   r   decorator_listlinenor   r   r   )r   r   line_numberr   r   r   visit_ClassDef  s    
z_ClassFinder.visit_ClassDefN)r   r   r   r   r   Zvisit_AsyncFunctionDefr   r   r   r   r   r   
  s   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}d|}t|}t|}z|| W n6 ty } z|jd }	||	fW  Y d }~S d }~0 0 tdt| r
| j} t| r| j} t| r*| j} t| r:| j} t| rt| dsXtd	| jd
 }
t d}|
dkrz||
 }W n t!y   tdY n0 |"|rq|
d
 }
ql||
fS tdd S )N<>zsource code not availablezcould not get source coder    zcould not find class definitionco_firstlinenoz"could not find function definitionr   z>^(\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   r   astparser   visitr   argsr   r"   r   r&   r<   r   r>   r   r@   r   r   recompile
IndexErrormatch)r
   r   r   r   r   sourceZtreeZclass_finderer   lnumpatr   r   r   r   
findsource)  s`    













r  c              	   C   s,  zt | \}}W n ttfy(   Y d S 0 t| rd}|rR|d d d dkrRd}|t|k rx||  dv rx|d }qR|t|k r|| d d dkrg }|}|t|k r|| d d dkr|||   |d }qd|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rt	|| |kr|g|d d< |d }|dk rq||  
 }qr|r|d  dkrg |d d< q|r|d  dkrg |dd < qd|S d S )	Nr      z#!r   )r   #r  r   r   )r  r   r   r   r   striprZ   r   r   r   r   )r
   r   r   startZcommentsendr   Zcommentr   r   r   getcommentsm  sH    
  

$
$r  c                   @   s   e Zd ZdS )
EndOfBlockNr   r   r   r   r   r	    rS   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   r     s    zBlockFinder.__init__c                 C   sr  | j sB| jsB|dkrd| _n|dv r8|dkr2d| _d| _ d| _n,|dkrZ| jrVd| _n|dkrv| jrtd| _d| _n|tjkrd| _|d | _| jrt| jr| jsd| _n| jrn|tj	kr| j
d u 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 urn|d	 | j
krn|d | _n"| jdkrn|tjtjfv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   sT   t  }z(tt| j}|D ]}|j|  qW n ttfyD   Y n0 | 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 ||v r|t|| || q|S )Nr   r   rT   )r]   r   rZ   rM   walktree)classeschildrenparentr`   cr   r   r   r+    s    r+  Fc                 C   s   i }g }| D ]d}|j r^|j D ]>}||vr0g ||< ||| vrJ|| | |r|| v r qpqq||vr|| q|D ]}|| vrv|| qvt||d S r   )rM   rZ   r+  )r,  uniquer-  rootsr/  r.  r   r   r   getclasstree  s     	
r2  	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_VARKEYWORDSr3  )	corb   nargsZnkwargsr   
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   rA  )r   r   r>  r?  defaultsr<  kwonlydefaultsannr   r   r   
getargspecH  s    rK  FullArgSpeczGargs, varargs, varkw, defaults, kwonlyargs, kwonlydefaults, annotationsc              
   C   sz  zt | ddtd}W n. tyB } ztd|W Y d }~n
d }~0 0 g }d }d }g }g }i }d}	i }
|j|jurz|j|d< |j D ]}|j}|j	}|t
u r|| |j|jur|	|jf7 }	nv|tu r|| |j|jur|	|jf7 }	nJ|tu r|}n<|tu r(|| |j|jur6|j|
|< n|tu r6|}|j|jur|j||< q|
sXd }
|	sbd }	t|| |||	||
|S )NFfollow_wrapper_chainsskip_bound_argsigclszunsupported callabler   return)_signature_from_callable	Signaturero   r   return_annotationempty
parametersvaluesrw   rN   _POSITIONAL_ONLYrZ   default_POSITIONAL_OR_KEYWORD_VAR_POSITIONAL_KEYWORD_ONLY_VAR_KEYWORD
annotationrL  )r   sigexr   r>  r?  posonlyargsr<  annotationsrH  
kwdefaultsparamrw   rN   r   r   r   rG  i  s\    
 





rG  ArgInfozargs varargs keywords localsc                 C   s    t | j\}}}t|||| jS r   )r@  r   re  f_locals)framer   r>  r?  r   r   r   getargvalues  s    rh  c                 C   sj   t | dd dkr t| ddS t| tjr4t| S t| trb| jd|fv rR| j	S | jd | j	 S t| S )Nr   typingztyping.r   r   r   )
rL   reprreplacer   r   GenericAliasr   r   r   r   )r^  Zbase_moduler   r   r   formatannotation  s    
rm  c                    s   t | dd   fdd}|S )Nr   c                    s
   t |  S r   )rm  )r^  r   r   r   _formatannotation  s    z5formatannotationrelativeto.<locals>._formatannotation)rL   )r
   ro  r   rn  r   formatannotationrelativeto  s    rp  r   c                 C   s   d|  S N*r   rN   r   r   r   rR     rS   rR   c                 C   s   d|  S N**r   rs  r   r   r   rR     rS   c                 C   s   dt |  S N=rj  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 ur|||| n|r|d |r|D ]2}||}|r||v r||
|| 7 }|| q|d ur||	|| d	d
| d }d v r8|| d 7 }|S )Nr   )rE  zc`formatargspec` is deprecated since Python 3.5. Use `signature` and the `Signature` object directlyr  rB  c                    s(   | }|  v r$|d |   7 }|S )Nz: r   )argru   rb  rm  	formatargr   r   formatargandannotation  s    z-formatargspec.<locals>.formatargandannotationrr  r  , r  rQ  )rD  rE  rF  r   	enumeraterZ   r   )r   r>  r?  rH  r<  rI  rb  r}  formatvarargsformatvarkwformatvalueZformatreturnsrm  rE  r~  specsZfirstdefaultr   r{  specZ	kwonlyargru   r   r|  r   formatargspec  s<    


r  c                 C   s   d|  S rq  r   rs  r   r   r   rR     rS   c                 C   s   d|  S rt  r   rs  r   r   r   rR     rS   c                 C   s   dt |  S rv  rx  ry  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   localsr}  r  r   r   r   convert'  s    z formatargvalues.<locals>.convertr  r  r  )r   r   rZ   r   )r   r>  r?  r  r}  r  r  r  r  r  r   r   r   r   formatargvalues  s    
r  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rdnd|f d S )Nc                    s   g | ]}| vrt |qS r   rx  )rg   rN   rW  r   r   r   4  rS   z&_missing_arguments.<locals>.<listcomp>r   r   r  z	{} and {}z, {} and {}r  z*%s() missing %i required %s argument%s: %s
positionalkeyword-onlyr   r   )r   r   r   r   )f_nameZargnamesposrW  rb   missingr   tailr   r  r   _missing_arguments3  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}|rd}||dkrd	nd||dkrd	ndf }td
| |
|	rd	nd|||dkr|sdndf d S )Nc                    s   g | ]}| v r|qS r   r   )rg   r{  r  r   r   r   E  rS   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   )r  r   Zkwonlyr>  ZdefcountZgivenrW  ZatleastZkwonly_givenpluralr_  Z
kwonly_sigmsgr   r  r   	_too_manyC  s*    r  c                O   s  t | }|\}}}}}}	}
| j}i }t| rB| jd urB| jf| }t|}t|}|r^t|nd}t||}t|D ]}|| ||| < qt|rt||d  ||< t|| }|ri ||< |	 D ]T\}}||vr|st
d||f ||| |< q||v rt
d||f |||< q||kr<|s<t||||||| ||k r|d ||  }|D ]}||vrZt||d| qZt||| d  D ] \}}||vr|| ||< qd}|D ]6}||vr|	r||	v 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)rG  r   r   r   r   r   r   rn   rW   rK   r   r  r  r  )r   r  namedr  r   r>  r?  rH  r<  rI  rJ  r  Z	arg2valueZnum_posZnum_argsZnum_defaultsnr   Zpossible_kwargskwrO   Zreqr{  r  kwargr   r   r   getcallargsX  sf    






r  ClosureVarsz"nonlocals globals builtins unboundc           	      C   s   t | r| j} t| s$td| | j}| jd u r:i }ndd t|j| jD }| j	}|
dtj}t|rt|j}i }i }t }|jD ]`}|dv rqz|| ||< W q ty   z|| ||< W n ty   || Y n0 Y q0 qt||||S )N{!r} is not a Python functionc                 S   s   i | ]\}}||j qS r   )cell_contents)rg   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   getclosurevars  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
y   d  }}Y q0 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'  )rg  contextr   r   r  r   r   indexr   r   r   getframeinfo  s$    r  c                 C   s   | j S r   )r  rg  r   r   r   	getlineno  s    r  	FrameInfor  c                 C   s2   g }| r.| ft | | }|t|  | j} q|S r   )r  rZ   r  f_back)rg  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   r     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 )Nry   )r   rJ   r   )klassr   r   r   _static_getmro  s    r  c                 C   s6   i }zt | d}W n ty&   Y n0 t||tS NrJ   )r
   __getattribute__r[   r   r   	_sentinel)r,   attrZinstance_dictr   r   r   _check_instance   s    r  c              	   C   sF   t | D ]8}tt|tu rz|j| W   S  ty>   Y q0 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y    Y dS 0 dS NFT)r  r   r+   r   r   r   _is_type2  s
    r  c              	   C   sl   t jd }t| D ]T}z||d }W n ty:   Y q0 t |tju r^|jdkr^|j|u s|  S qt	S r  )
r   rJ   r  r   r  r   r   r   rj   r  )r  	dict_attrr  Z
class_dictr   r   r   r  9  s    

r  c              	   C   s  t }t| s>t| }t|}|t u s2t|tju rBt| |}n| }t||}|t ur|t urtt|dt urtt|dt ur|S |t ur|S |t ur|S | |u rtt|D ]8}tt|t u rz|j	| W   S  t
y   Y q0 q|t ur|S t|d S )Nr   r   )r  r  r   r  r   r   r  r  r  rJ   r  r[   )r,   r  rY  Zinstance_resultr  r  Zklass_resultr  r   r   r   getattr_staticG  s:    
r  GEN_CREATEDGEN_RUNNINGGEN_SUSPENDED
GEN_CLOSEDc                 C   s,   | j r
tS | jd u 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 ur2| jjS i S d S )Nz{!r} is not a Python generatorr  )r3   r   r   rL   r  rf  )r  rg  r   r   r   getgeneratorlocals  s    r  CORO_CREATEDCORO_RUNNINGCORO_SUSPENDEDCORO_CLOSEDc                 C   s,   | j r
tS | jd u 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 ur|jS i S d S )Nr  )rL   rf  )r  rg  r   r   r   getcoroutinelocals  s    r  
from_bytesc                 C   s6   zt | |}W n ty"   Y d S 0 t|ts2|S d S r   )rL   r[   r   _NonUserDefinedCallables)rh   Zmethod_namemethr   r   r   "_signature_get_user_defined_method  s    
r  c              
   C   s  | j }t| }|jpd}|jp$i }|r2|| }z| j|i |}W n8 ty~ } z d|}	t|	|W Y d }~n
d }~0 0 d}
| D ]\}}z|j	| }W n t
y   Y nl0 |jtu r|| q|jtu r||v rd}
|j|d||< n||j q|jtu r |j|d||< |
r|jtu rT|| jtd}|||< || q|jttfv rp|| q|jtu r||j q| j| dS )Nr   z+partial object {!r} has incorrect argumentsFT)rY  rw   rV  )rV  r   rK   r   keywordsbind_partialr   r   r   	argumentsr  rw   rX  r   rZ  rk  rN   r\  move_to_endr]  r[  rW  )wrapped_sigpartial
extra_argsZ
old_params
new_paramsZpartial_argsZpartial_keywordsZbar`  r  Ztransform_to_kwonly
param_namerd  Z	arg_valueZ	new_paramr   r   r   _signature_get_partial  sL    


 


r  c                 C   sl   t | j }|r$|d jttfv r,td|d j}|ttfv rP|dd  }n|t	ur`td| j
|dS )Nr   zinvalid method signaturer   zinvalid argument typer  )rn   rV  rW  rw   r]  r\  r   rZ  rX  r[  rk  )r_  paramsrw   r   r   r   _signature_bound_method0  s    
r  c                 C   s&   t | p$t| p$t| tp$| ttfv S r   )rB   r   r   r  r   r
   r+   r   r   r   _signature_is_builtinJ  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ot|to|d u sxt|to|d u st|t	ot|t	S )NFr   r&   __defaults____kwdefaults____annotations__)
callabler   rL   _voidr   r   r?   r   rn   r   )r,   rN   r  rH  rc  rb  r   r   r   _signature_is_functionlikeV  s     r  c                 C   s<   |  d}|dkr|  d}|  d}|  d}| d| S )N,r   r  :rw  r  )find)r  r  Zcposr   r   r   _signature_get_bound_paramo  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|rd}qld}|
d7 }
ql|d	krd}|
d }ql||kr|d
kr|
}ql|rd}||kr|dks|	d |	| |dkrl|	d qld|}|||fS )Nc                 S   s   g | ]}| d qS )ascii)encode)rg   lr   r   r   r     rS   z6_signature_strip_non_python_syntax.<locals>.<listcomp>r   Fr   r  Tr   /$r  r   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_commarz  r\   Zcurrent_parameterr  r  tr   r
  clean_signaturer   r   r   "_signature_strip_non_python_syntax  sP    




r  Tc              	      s^  dd l | j t|\}}}d| d }z|}W n tyL   d }Y n0 t|jshtd||j	d }	g  j
t d }i t|dd }
|
rt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 urH 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 urPt|dd }|d u}t$|}|r6|s*|r6%d nd j& jd}|d< | | j
dS )Nr   zdef fooz: passz"{!r} builtin has invalid signaturer   c                    s   | j d urtd| jS )Nz'Annotations are not currently supported)r^  r   r{  )r   )r   r   r   
parse_name  s    
z&_signature_fromstr.<locals>.parse_namec                    sx   zt | }W n: tyH   zt | }W n tyB   t Y n0 Y n0 t|tttttt	d frn 
|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   rf   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   ctxZLoadr   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   | }|u rd S |rn|t urnz |}|}W n tyP   }Y n0 |u r^d S |urj|n|} ||d d S NrY  r^  )_emptyr   Zliteral_evalr   rZ   )Z	name_nodeZdefault_noderY  rN   o)	Parameterr"  r   rU  invalidrw   rV  r  r   r   p  s    
z_signature_fromstr.<locals>.p)	fillvaluer   r  rT  )'r   _parameter_clsr  r   SyntaxErrorr   ZModuler   r   bodyrU  r
   rL   r   r   r   rJ   r   ZNodeTransformerr  r   rH  	itertoolszip_longestPOSITIONAL_ONLYPOSITIONAL_OR_KEYWORDr  r7  varargVAR_POSITIONALKEYWORD_ONLYr  r<  kw_defaultsr  VAR_KEYWORDr   r   rk  )rh   r,   r   rO  r  r  r  Zprogramr   r(   module_namer)  r   rH  r"  r   rN   rY  Z_selfZself_isboundZself_ismoduler   )r'  r"  r   rU  r(  rw   r  rV  r  r  r  r   _signature_fromstr  sn    









r9  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   r9  )rh   r   rO  r   r   r   r   _signature_from_builtinX  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}|rt|}nd}g }|| }|	}|
d | D ]<}|rtnt}||t}|||||d |r|d8 }qt|
|d  D ]L\}}|r&tnt}||t}||||||| d |r|d8 }q|jt@ r|||  }||t}||||td |D ]B}t}|d ur||t}||t}||||t|d q|jt@ r2|| }|jt@ r
|d7 }|| }||t}||||td | ||d	t|d
S )NFTr  r:  r   )r^  rw   r   )r^  rw   rY  rQ  rT  __validate_parameters__)r   r  r   r   rL   r9  r,  r&   r5  r4  co_posonlyargcountr6  r  r  r  r   rX  rZ  r   r%  rZ   r  r'   r8  r[  r\  r9  r]  )rh   r   rO  Zis_duck_functionr   r'  Z	func_code	pos_count	arg_namesZposonly_countr  Zkeyword_only_countZkeyword_onlyrb  rH  rc  Zpos_default_countrV  Znon_default_countZposonly_leftrN   rw   r^  offsetrY  r  r   r   r   _signature_from_functionh  s    








rB  )rN  rO  c             
   C   s  t jt|||d}t| s(td| t| tjrN|| j	}|rJt
|S |S |rvt| dd d} t| tjrv|| S z
| j}W n ty   Y n&0 |d urt|tstd||S z
| j}W n ty   Y nn0 t|t jrB||j}t||d}t|j d }|jtju r|S t|j }	|f|	 }
|j|
d	S t| sVt| rdt|| |d
S t| r|t|| |d
S t| t jr|| j}t|| S d }t| trt t| d}|d ur||}nld }t | d}t | d}d| j!v r|}n0d| j!v r|}n|d ur|}n|d ur*|}|d ur<||}|d u r@| j"d d D ]<}z
|j#}W n tyv   Y n0 |rTt$|||  S qTt| j"vr@| j%t&j%u r| j't&j'u r|(t&S t)d| nlt| t*s@t t| d}|d ur@z||}W n: t)y> } z d| }t)||W Y d }~n
d }~0 0 |d ur\|rXt
|S |S t| tj+r|d| }t)|t)d| d S )NrM  z{!r} is not a callable objectc                 S   s
   t | dS )N__signature__r~   r   r   r   r   rR     rS   z*_signature_from_callable.<locals>.<lambda>rz   z1unexpected object {!r} in __signature__ attributer   r   r  )rO  __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  rR  r  r   r   r   r   r   r"   r  r   rC  r[   rS  _partialmethodpartialmethodr   r  rn   rV  rW  rw   r'  r4  rk  r   r  rB  r  r;  r   r  rJ   ry   r:  r9  r   r
   rE  from_callabler   r  rA   )r,   rN  rO  rP  Z_get_signature_ofr_  rG  r  Zfirst_wrapped_paramZ
sig_paramsr  callZfactory_methodnewinitrP   Ztext_sigr`  r  r   r   r   rR    s    	





















 

rR  c                   @   s   e Zd ZdS )r  Nr   r   r   r   r   r  }	  s   r  c                   @   s   e Zd ZdS )r%  Nr   r   r   r   r   r%  	  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   r1  r2  r4  r5  r7  rP  rk   rR  r   r   r   r   rL  	  s   rL  zpositional-onlyzpositional or keywordzvariadic positionalr  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y0   td|dY n0 |turb| jttfv rbd}|| jj}t||| _|| _	|tu r~tdt
|tsdt|j}t||d dkr|dd   r| jtkrd	}|| 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)rL  rT  r   r%  r[  r]  r   rR  rU  rV  r   r   r   r   r   isdigitrZ  rX  isidentifierrS  )r   rN   rw   rY  r^  r  r   r   r   r   	  s6    


zParameter.__init__c                 C   s    t | | j| jf| j| jdfS )NrU  rV  )r   rS  rT  rU  rV  r  r   r   r   
__reduce__	  s    
zParameter.__reduce__c                 C   s   |d | _ |d | _d S )NrU  rV  rY  r   stater   r   r   __setstate__	  s    
zParameter.__setstate__c                 C   s   | j S r   )rS  r  r   r   r   rN   	  s    zParameter.namec                 C   s   | j S r   )rU  r  r   r   r   rY  	  s    zParameter.defaultc                 C   s   | j S r   )rV  r  r   r   r   r^  	  s    zParameter.annotationc                 C   s   | j S r   )rT  r  r   r   r   rw    
  s    zParameter.kind)rN   rw   r^  rY  c                C   sL   |t u r| j}|t u r| j}|t u r*| j}|t u r8| j}t| ||||dS r#  )r  rS  rT  rV  rU  r   )r   rN   rw   r^  rY  r   r   r   rk  
  s    zParameter.replacec                 C   s   | j }| j}| jtur(d|t| j}| jturb| jturPd|t| j}nd|t| j}|tkrtd| }n|t	krd| }|S )Nz{}: {}z{} = {}z{}={}rr  ru  )
rw   rS  rV  r%  r   rm  rU  rj  r[  r]  )r   rw   	formattedr   r   r   rP  
  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   rw   r^  rY  r  r   r   r   __hash__/
  s    zParameter.__hash__c                 C   sJ   | |u 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'  NotImplementedrS  rT  rU  rV  r   otherr   r   r   __eq__2
  s    



zParameter.__eq__N)r   r   r   r   rX  r1  rZ  r2  r[  r4  r\  r5  r]  r7  r%  rU  r   rZ  r]  rk   rN   rY  r^  rw   r  rk  rP  r`  rb  rg  r   r   r   r   r'  	  s2   (



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  ri  )r   r  r  r   r   r   r   P
  s    zBoundArguments.__init__c                 C   s   | j S r   )ri  r  r   r   r   r  T
  s    zBoundArguments.signaturec              	   C   s|   g }| j j D ]b\}}|jttfv r* qtz| j| }W n tyP   Y  qtY q0 |jtkrh|	| q|
| qt|S r   )ri  rV  rK   rw   r]  r\  r  r  r[  extendrZ   rn   )r   r   r  rd  r{  r   r   r   r   X
  s    
zBoundArguments.argsc              	   C   s   i }d}| j j D ]v\}}|sD|jttfv r4d}n|| jvrDd}q|sJqz| j| }W n tyj   Y q0 |jtkr|| q|||< q|S r  )	ri  rV  rK   rw   r]  r\  r  r  update)r   kwargsZkwargs_startedr  rd  r{  r   r   r   rm  o
  s&    


zBoundArguments.kwargsc              	   C   s   | j }g }| jj D ]v\}}z|||| f W q ty   |jturT|j}n$|jt	u rdd}n|jt
u rti }nY q|||f Y q0 qt|| _ d S )Nr   )r  ri  rV  rK   rZ   r  rY  r%  rw   r[  r]  r   )r   r  Znew_argumentsrN   rd  valr   r   r   apply_defaults
  s    	


zBoundArguments.apply_defaultsc                 C   s2   | |u rdS t |tstS | j|jko0| j|jkS rc  )r   rh  rd  r  r  re  r   r   r   rg  
  s    

zBoundArguments.__eq__c                 C   s   |d | _ |d | _d S )Nri  r  ri  r  r[  r   r   r   r]  
  s    
zBoundArguments.__setstate__c                 C   s   | j | jdS )Nrp  rp  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	<{} ({})>r  )r  rK   rZ   r   r   r   r   )r   r   r{  rO   r   r   r   r`  
  s    zBoundArguments.__repr__N)r   r   r   r   r   rk   r  r   rm  ro  rg  r]  rq  r`  r   r   r   r   rh  =
  s   


rh  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 ),rS  )_return_annotation_parametersNTr<  c                C   s   |d u rt  }n|rt  }t}d}|D ]}|j}|j}	||k r\d}
|
|j|j}
t|
n||krld}|}|ttfv r|jt	u r|rd}
t|
nd}|	|v rd|	}
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   rs  rg   rd  r   r   r   ri     rS   z%Signature.__init__.<locals>.<genexpr>)r   rX  rw   rN   r   rR  r   rZ  rY  r%  r   MappingProxyTypers  rr  )r   rV  rT  r=  r  Ztop_kindZkind_defaultsrd  rw   rN   r  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  rB  )rD  rE  rF  rB  rh   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  rB  )rD  rE  rF  r;  rv  r   r   r   from_builtin  s    zSignature.from_builtinfollow_wrappedc                C   s   t || |dS )N)rP  rN  )rR  )rh   r,   rz  r   r   r   rH  +  s    zSignature.from_callablec                 C   s   | j S r   )rs  r  r   r   r   rV  1  s    zSignature.parametersc                 C   s   | j S r   rr  r  r   r   r   rT  5  s    zSignature.return_annotation)rV  rT  c                C   s0   |t u r| j }|t u r | j}t| ||dS )Nr+  )r  rV  rW  rr  r   )r   rV  rT  r   r   r   rk  9  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   )rw   r\  rt  r   r   r   ri   I  s   
z(Signature._hash_basis.<locals>.<genexpr>c                 S   s   i | ]}|j tkr|j|qS r   )rw   r\  rN   rt  r   r   r   r  L  s   
z)Signature._hash_basis.<locals>.<dictcomp>)rn   rV  rW  rT  )r   r  
kwo_paramsr   r   r   _hash_basisH  s    zSignature._hash_basisc                 C   s(   |   \}}}t| }t|||fS r   )r}  	frozensetrW  ra  )r   r  r|  rT  r   r   r   rb  Q  s    zSignature.__hash__c                 C   s*   | |u rdS t |tstS |  | kS rc  )r   rS  rd  r}  re  r   r   r   rg  V  s
    
zSignature.__eq__Fr  c                C   s  i }t | j }d}t |}zt|}W n ty   zt|}	W n ty`   Y Y qY n0 |	jtkrtY qn|	j|v r|	jtkrd}
|
j	|	jd}
t
|
d |	f}Y qnP|	jtks|	jtur|	f}Y qn.|r|	f}Y qnd}
|
j	|	jd}
t
|
d Y q0 zt|}	W n ty2   t
dd Y q0 |	jttfv rNt
dd |	jtkr||g}|| t|||	j< q|	j|v r|	jtkrt
dj	|	jdd |||	j< qd }t||D ]}	|	jtkr|	}q|	jtkrq|	j}z||}W nD tyD   |s@|	jtkr@|	jtu r@t
dj	|dd Y n(0 |	jtkrdt
dj	|	jd|||< q|r|d ur|||j< nt
dj	tt |d| | |S )Nr   zA{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"  rV  rW  r	  StopIterationrw   r[  rN   rX  r   r   r]  rY  r%  r\  rk  rn   r/  chainr   r  _bound_arguments_cls)r   r   rm  r  r  rV  Zparameters_exZarg_valsZarg_valrd  r  rW  Zkwargs_paramr  r   r   r   _bind]  s    







zSignature._bindc                O   s   |  ||S r   r  r   r   rm  r   r   r   bind  s    zSignature.bindc                O   s   | j ||ddS )NTr  r  r  r   r   r   r    s    zSignature.bind_partialc                 C   s    t | t| j fd| jifS Nrr  )r   rn   rs  rW  rr  r  r   r   r   rZ    s    zSignature.__reduce__c                 C   s   |d | _ d S r  r{  r[  r   r   r   r]    s    zSignature.__setstate__c                 C   s   d | jj| S )Nz<{} {}>r_  r  r   r   r   r`    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urt| j
}|d|7 }|S )NFTr  rr  z({})r  z -> {})rV  rW  r   rw   rX  rZ   r[  r\  r   r   rT  r%  rm  )	r   ru   Zrender_pos_only_separatorZrender_kw_only_separatorrd  r^  rw   ZrenderedZannor   r   r   rP    s0    




zSignature.__str__)N)r   r   r   r   r'  r,  rh  r  r%  rU  r   rs   rw  rx  rH  rk   rV  rT  r  rk  r}  rb  rg  r  r  r  rZ  r]  r`  rP  r   r   r   r   rS  
  s:   6



	 rS  ry  c                C   s   t j| |dS )Nry  )rS  rH  )r,   rz  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 nP ty }
 z8d	|t
|
j|
}t|tjd td W Y d }
~
n
d }
~
0 0 |r|d}|	}|D ]}t||}q|	jtjv rtdtjd td |jrtd	| td	t|	 td	|	j ||	u rztd	t|	j t|	drtd	|	j n4zt|\}}W n ty   Y n0 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)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_modulero   r   r   r   printr   stderrexitr   rL   builtin_module_namesZdetailsr   
__cached__rj  r   r   r  r  r*  )r  r   parserr   targetZmod_nameZ	has_attrsattrsr,   r   rv   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   r   discollections.abcr7   enumZimportlib.machineryr   r/  r   r   r   r   r  r  r   rD  r#   r   operatorr   r   r   globalsZmod_dictZCOMPILER_FLAG_NAMESrK   rc   rd   rG   r   r   r   r   r   r   r   r    r   r*   r-   r.   r/   r1   r3   r5   r:   r<   r>   r@   rB   rC   rQ   re   rf   rx   rV   r   r   r   r   r   r   r   r   r   r   r   r   r   ro   r   ZNodeVisitorr   r  r  r	  r
  r&  r)  r*  r+  r2  r3  r@  rA  rK  rL  rG  re  rh  rm  rp  r   r  r  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   rD  Z_WrapperDescriptorallZ_MethodWrapperr  rJ   Z_ClassMethodWrapperrA   r  r  r  r  r  r  r   r  r9  r;  rB  rR  r  r%  IntEnumrL  r1  rX  r2  rZ  r4  r[  r5  r\  r7  r]  rQ  r'  rh  rS  r  r  r   r   r   r   r   <module>   sp  	



	
,
t$
>
	
/D->




\



;
<
5

 


		0

LH _ 8	    j:
