B
    u9ao                @   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x"ej D ]\ZZeede < qW 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 Z3dd5d6Z4ed7d8Z5d9d: Z6d;d< Z7dd=d>d?Z8d@dA Z9dBdC Z:dDdE Z;dFdG Z<dHdI Z=dJdK Z>dLdM Z?dNdO Z@ddPdQZAi ZBi ZCddRdSZDdTdU ZEdVdW ZFG dXdY dYeGZHG dZd[ d[ZId\d] ZJd^d_ ZKd`da ZLdbdc ZMddedfZNedgdhZOdidj ZPdkdl ZQedmdnZRdodp ZSedqdrZTdsdt ZUedudvZVdwdx ZWddydzZXd{d| ZYdddd}i i eZd~d dd dd dd eXfddZ[eZdd dd dd fddZ\dd Z]dd Z^dd Z_eddZ`dd ZaeddZbdddZcdd Zdeddebje ZfdddZgdddZhdd ZidddZjdddZkel Zmdd Zndd Zodd Zpdd Zqdd ZremfddZsdZtdZudZvdZwdd Zxdd ZydZzdZ{dZ|dZ}dd Z~dd ZeejZeejZeejd ZeeeejfZddń ZdddǄZddɄ Zdd˄ Zdd̈́ Zddτ Zddф ZdddԄZdddքZdd؄ ZdddٜddۄZG dd݄ d݃ZG dd߄ d߃ZG dd dejZejZejZejZejZejZededededediZejZG 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.7/inspect.pyismodule?   s    r   c             C   s
   t | tS )N)r   type)r   r	   r	   r
   isclassH   s    r   c             C   s   t | tjS )N)r   r   
MethodType)r   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o6t|dS )NFr   r   )r   r   r   r   r   )r   r   r	   r	   r
   isdatadescriptorn   s    r   MemberDescriptorTypec             C   s   t | tjS )N)r   r   r   )r   r	   r	   r
   ismemberdescriptor~   s    r   c             C   s   dS )NFr	   )r   r	   r	   r
   r      s    GetSetDescriptorTypec             C   s   t | tjS )N)r   r   r   )r   r	   r	   r
   isgetsetdescriptor   s    r   c             C   s   dS )NFr	   )r   r	   r	   r
   r      s    c             C   s   t | tjS )N)r   r   FunctionType)r   r	   r	   r
   r      s    r   c             C   s    t t| st| o| jjt@ S )N)boolr   r   __code__co_flagsZCO_GENERATOR)r   r	   r	   r
   isgeneratorfunction   s    r   c             C   s    t t| st| o| jjt@ S )N)r   r   r   r   r   ZCO_COROUTINE)r   r	   r	   r
   iscoroutinefunction   s    r    c             C   s    t t| st| o| jjt@ S )N)r   r   r   r   r   ZCO_ASYNC_GENERATOR)r   r	   r	   r
   isasyncgenfunction   s    r!   c             C   s   t | tjS )N)r   r   AsyncGeneratorType)r   r	   r	   r
   
isasyncgen   s    r#   c             C   s   t | tjS )N)r   r   GeneratorType)r   r	   r	   r
   isgenerator   s    r%   c             C   s   t | tjS )N)r   r   CoroutineType)r   r	   r	   r
   iscoroutine   s    r'   c             C   s6   t | tjp4t | tjr(t| jjt@ p4t | tj	j
S )N)r   r   r&   r$   r   gi_coder   ZCO_ITERABLE_COROUTINEcollectionsabc	Awaitable)r   r	   r	   r
   isawaitable   s    r,   c             C   s   t | tjS )N)r   r   TracebackType)r   r	   r	   r
   istraceback   s    r.   c             C   s   t | tjS )N)r   r   	FrameType)r   r	   r	   r
   isframe   s    r0   c             C   s   t | tjS )N)r   r   CodeType)r   r	   r	   r
   iscode   s    r2   c             C   s   t | tjS )N)r   r   BuiltinFunctionType)r   r	   r	   r
   	isbuiltin  s    r4   c             C   s    t | pt| pt| pt| S )N)r4   r   r   r   )r   r	   r	   r
   	isroutine  s    r5   c             C   s   t | tsdS | jt@ rdS tt| tjs0dS t| dr>dS x&| j	 D ]\}}t
|ddrJdS qJW x@| jD ]6}x0t
|ddD ] }t
| |d }t
|ddrdS qW qnW dS )NFT__abstractmethods____isabstractmethod__r	   )r   r   	__flags__TPFLAGS_IS_ABSTRACT
issubclassr*   ABCMetar   __dict__itemsgetattr	__bases__)r   namevaluebaser	   r	   r
   
isabstract$  s"    


rC   c          	   C   s$  t | r| ft|  }nd}g }t }t| }yBx<| jD ]2}x,|j D ]\}}t|tj	rH|
| qHW q8W W n tk
r   Y nX x|D ]}	yt| |	}
|	|krtW n: tk
r   x$|D ]}|	|jkr|j|	 }
P qW wY nX |r||
r|
|	|
f ||	 qW |jdd d |S )Nr	   c             S   s   | d S )Nr   r	   )Zpairr	   r	   r
   <lambda>e      zgetmembers.<locals>.<lambda>)key)r   getmrosetdirr?   r<   r=   r   r   DynamicClassAttributeappendAttributeErrorr>   addsort)r   Z	predicatemroresults	processednamesrB   kvrF   rA   r	   r	   r
   
getmembers<  s:    




rU   	Attributezname kind defining_class objectc             C   sh  t | }t t| }tdd |D }| f| }|| }t| }x:|D ]2}x,|j D ]\}}t|tjrV|	| qVW qFW g }	t
 }
x|D ]}d }d }d }||
kry|dkrtdt| |}W n" tk
r } zW d d }~X Y nX t|d|}||krd }d }x(|D ] }t||d }||kr|}qW xH|D ]@}y|| |}W n tk
rh   w:Y nX ||kr:|}q:W |d k	r|}x4|D ],}||jkr|j| }||kr|}P qW |d krq|d k	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|||| |
| qW |	S )Nc             s   s   | ]}|t tfkr|V  qd S )N)r   r   ).0clsr	   r	   r
   	<genexpr>  s    z'classify_class_attrs.<locals>.<genexpr>r<   z)__dict__ is special, don't want the proxy__objclass__zstatic methodzclass methodpropertymethoddata)rG   r   tuplerI   r<   r=   r   r   rJ   rK   rH   	Exceptionr>   __getattr__rL   staticmethodBuiltinMethodTypeclassmethodClassMethodDescriptorTyper[   r5   rV   rM   )rX   rO   ZmetamroZclass_basesZ	all_basesrR   rB   rS   rT   resultrQ   r@   ZhomeclsZget_objZdict_objexcZlast_clsZsrch_clsZsrch_objobjkindr	   r	   r
   classify_class_attrsj  s    

















ri   c             C   s   | j S )N)__mro__)rX   r	   r	   r
   rG     s    rG   )stopc               s    d krdd }n fdd}| }t ||i}t }xD|| rz| j} t | }||ksbt||krptd|| ||< q8W | S )Nc             S   s
   t | dS )N__wrapped__)r   )fr	   r	   r
   _is_wrapper  s    zunwrap.<locals>._is_wrapperc                s   t | do |  S )Nrl   )r   )rm   )rk   r	   r
   rn     s    z!wrapper loop when unwrapping {!r})idsysgetrecursionlimitrl   len
ValueErrorformat)funcrk   rn   rm   ZmemoZrecursion_limitZid_funcr	   )rk   r
   unwrap  s    

rv   c             C   s   |   }t|t|  S )N)
expandtabsrr   lstrip)lineZexpliner	   r	   r
   
indentsize  s    rz   c             C   sR   t j| j}|d krd S x&| jdd d D ]}t||}q0W t|sNd S |S )N.)rp   modulesget
__module____qualname__splitr>   r   )ru   rX   r@   r	   r	   r
   
_findclass  s    r   c          	   C   s  t | rRxD| jD ]:}|tk	ry
|j}W n tk
r<   wY nX |d k	r|S qW d S t| r| jj}| j}t |rt	t	||d d| jkr|}n|j
}nt| r| j}t| }|d kst	||| k	rd S nt| r| j}| j}t |r|jd | | jkr|}n|j
}nzt| trL| j}|j}t|}|d ksFt	||| k	rd S n:t| s`t| r| j}| j}t	||| k	rd S nd S xJ|jD ]@}yt	||j}W n tk
r   wY nX |d k	r|S qW d S )N__func__r{   )r   rj   r   __doc__rL   r   r   __name____self__r>   	__class__r   r   r4   r   r   r[   fgetr   r   rZ   )rg   rB   docr@   selfrX   ru   r	   r	   r
   _finddoc  sb    





r   c          	   C   sd   y
| j }W n tk
r   d S X |d krNyt| }W n ttfk
rL   d S X t|ts\d S t|S )N)r   rL   r   	TypeErrorr   strcleandoc)r   r   r	   r	   r
   getdocR  s    

r   c             C   s   y|   d}W n tk
r&   d S X tj}x:|dd  D ]*}t| }|r<t|| }t||}q<W |r~|d  |d< |tjk rx*tdt|D ]}|| |d  ||< qW x|r|d s|	  qW x|r|d s|	d qW d
|S d S )N
   r   r|   )rw   r   UnicodeErrorrp   maxsizerr   rx   minrangepopjoin)r   linesZmarginry   Zcontentindentir	   r	   r
   r   e  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   r>   r   r   rt   r   r   rp   r}   r~   r   r   r   r   r   r.   tb_framer0   f_coder2   co_filenamer   r   )r   moduler	   r	   r
   getfile  s,    
r   c             C   sT   t j| }dd tj D }|  x&|D ]\}}||r.|d | S q.W d S )Nc             S   s   g | ]}t | |fqS r	   )rr   )rW   suffixr	   r	   r
   
<listcomp>  s   z!getmodulename.<locals>.<listcomp>)ospathbasename	importlib	machineryall_suffixesrN   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 )N)r   )rW   s)filenamer	   r
   rY     s    z getsourcefile.<locals>.<genexpr>r   c             3   s   | ]}  |V  qd S )N)r   )rW   r   )r   r	   r
   rY     s    
__loader__)r   r   r   DEBUG_BYTECODE_SUFFIXESOPTIMIZED_BYTECODE_SUFFIXESanyr   r   splitextSOURCE_SUFFIXESEXTENSION_SUFFIXESexistsr>   	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 )N)r   r   r   r   normcaseabspath)r   	_filenamer	   r	   r
   
getabsfile  s    r   c       
      C   s  t | r| S t| dr$tj| jS |d k	rD|tkrDtjt| S yt| |}W n tk
rf   d S X |tkrtjt| S xnt	tj
 D ]\\}}t |rt|dr|j}|t|d krq|t|< t|}|j t|< ttj|< qW |tkr
tjt| S tjd }t| ds$d S t|| jrLt|| j}|| krL|S tjd }t|| jr~t|| j}	|	| kr~|S d S )Nr   r   __main__r   builtins)r   r   rp   r}   r~   r   modulesbyfiler   r   listr=   r   _filesbymodnamer   r   r   realpathr>   )
r   r   filemodnamer   rm   mainZ
mainobjectZbuiltinZbuiltinobjectr	   r	   r
   r     sD    





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 }xRtt|D ]B}||| }|r|| d dkr||fS ||d	|f qW |r|  ||d d	 fS td
t| r0| j} t| r@| j} t| rP| j} t| r`| j} t| rt| ds~td| jd	 }	td}x*|	dkr|||	 rP |	d	 }	qW ||	fS tdd S )N<>zsource code not availablezcould not get source coder   z^(\s*)class\s*z\bcr   zcould not find class definitionco_firstlinenoz"could not find function definitionz>^(\s*def\s)|(\s*async\s+def\s)|(.*(?<!\w)lambda(:|\s))|^(\s*@)zcould not find code object) r   r   
checkcacher   
startswithr   OSErrorr   getlinesr<   r   r   r   recompiler   rr   matchrK   grouprN   r   r   r   r   r.   r   r0   r   r2   r   r   )
r   r   r   r   r@   ZpatZ
candidatesr   r   lnumr	   r	   r
   
findsource  s^    









 r   c          	   C   s>  yt | \}}W n ttfk
r(   d S X t| rd}|rR|d d d dkrRd}x(|t|k rz||  dkrz|d }qTW |t|k r|| d d dkrg }|}x>|t|k r|| d d dkr|||   |d }qW d|S nH|dkr:t	|| }|d }|dkr:|| 
 d d dkr:t	|| |kr:||  
 g}|dkr|d }||  
 }x\|d d dkrt	|| |kr|g|d d< |d }|dk rP ||  
 }q|W x*|r|d  dkrg |d d< qW x*|r.|d  dkr.g |dd < qW d|S d S )	Nr      z#!r   ) #r   r   r|   )r   r   r   r   rr   striprK   rw   r   rz   rx   )r   r   r   startZcommentsendr   commentr	   r	   r
   getcommentsA  sJ      "
$
&
 r   c               @   s   e Zd ZdS )
EndOfBlockN)r   r   r   r	   r	   r	   r
   r   n  s    r   c               @   s   e Zd Zdd Zdd ZdS )BlockFinderc             C   s.   d| _ d| _d| _d| _d| _d| _d| _d S )Nr   Fr   )r   islambdastartedpasslineindecoratordecoratorhasargslast)r   r	   r	   r
   __init__r  s    zBlockFinder.__init__c             C   s  | j s@| js@|dkrd| _n|dkr8|dkr2d| _d| _ d| _n|dkrV| jrTd| _n|dkrr| jrpd| _d| _n|tjkrd| _|d | _| jrt| jr| jsd| _nn| jrnf|tj	kr| j
d	 | _
d| _nH|tjkr| j
d	 | _
| j
dkrtn"| j
dkr|tjtjfkrtd S )
N@T)defclasslambdar   ()Fr   r   )r   r   r   r   r   tokenizeNEWLINEr   r   INDENTr   DEDENTCOMMENTNL)r   r   tokenZsrowcolZerowcolry   r	   r	   r
   
tokeneater{  sB    




zBlockFinder.tokeneaterN)r   r   r   r   r   r	   r	   r	   r
   r   p  s   	r   c          	   C   sZ   t  }y,tt| j}x|D ]}|j|  qW W n ttfk
rJ   Y nX | d |j S )N)	r   r   generate_tokensiter__next__r   r   IndentationErrorr   )r   ZblockfindertokensZ_tokenr	   r	   r
   getblock  s    
r   c             C   sb   t | } t| \}}t| r"| j} t| s>t| rF| jjdkrF|dfS t||d  |d fS d S )Nz<module>r   r   )	rv   r   r.   r   r   r0   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	   r	   r
   	getsource  s    r   c             C   sV   g }| j tddd x:| D ]2}|||jf ||kr|t|| || qW |S )Nr   r   )rF   )rN   r   rK   r?   walktree)classeschildrenparentrP   r   r	   r	   r
   r     s    
r   Fc             C   s   i }g }xn| D ]f}|j rbxZ|j D ]<}||kr4g ||< ||| krN|| | |r || kr P q W q||kr|| qW x|D ]}|| kr~|| q~W t||d S )N)r?   rK   r   )r   uniquer   rootsr   r   r	   r	   r
   getclasstree  s"    	
 
r  	Argumentszargs, varargs, varkwc             C   s    t | \}}}}t|| ||S )N)_getfullargsr  )coargsvarargs
kwonlyargsvarkwr	   r	   r
   getargs  s    r  c       	      C   s   t | std| | j}| j}| j}t|d | }t||||  }d}||7 }d }| jt@ rx| j| }|d }d }| jt	@ r| j| }||||fS )Nz{!r} is not a code objectr   r   )
r2   r   rt   co_argcountco_varnamesco_kwonlyargcountr   r   
CO_VARARGSCO_VARKEYWORDS)	r  nargsrR   Znkwargsr  r	  stepr  r
  r	   r	   r
   r    s"    



r  ArgSpeczargs varargs keywords defaultsc             C   sD   t jdtdd t| \}}}}}}}|s.|r6tdt||||S )Nzhinspect.getargspec() is deprecated since Python 3.0, use inspect.signature() or inspect.getfullargspec()r   )
stacklevelzdFunction has keyword-only parameters or annotations, use getfullargspec() API which can support them)warningswarnDeprecationWarninggetfullargspecrs   r  )ru   r  r  r
  defaultsr	  kwonlydefaultsannr	   r	   r
   
getargspec   s    
r  FullArgSpeczGargs, varargs, varkw, defaults, kwonlyargs, kwonlydefaults, annotationsc          
   C   s`  yt | ddtd}W n, tk
r@ } ztd|W d d }~X Y nX g }d }d }g }d}i }d}i }	|j|jk	rx|j|d< x|j D ]}
|
j}|
j	}|t
kr|| nv|tkr|| |
j|
jk	r||
jf7 }nJ|tkr|}n<|tkr|| |
j|
jk	r|
j|	|< n|tkr|}|
j|
jk	r|
j||< qW |	sBd }	|sLd }t||||||	|S )NF)follow_wrapper_chainsskip_bound_argsigclszunsupported callabler	   return)_signature_from_callable	Signaturer_   r   return_annotationempty
parametersvaluesrh   r@   _POSITIONAL_ONLYrK   _POSITIONAL_OR_KEYWORDdefault_VAR_POSITIONAL_KEYWORD_ONLY_VAR_KEYWORD
annotationr  )ru   sigexr  r  r
  r	  r  annotations
kwdefaultsparamrh   r@   r	   r	   r
   r  A  sT    





r  ArgInfozargs varargs keywords localsc             C   s    t | j\}}}t|||| jS )N)r  r   r4  f_locals)framer  r  r
  r	   r	   r
   getargvalues  s    r7  c             C   sV   t | dd dkr t| 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{   )r>   reprreplacer   r   r   r   )r.  Zbase_moduler	   r	   r
   formatannotation  s    
r;  c                s   t | dd   fdd}|S )Nr   c                s
   t |  S )N)r;  )r.  )r   r	   r
   _formatannotation  s    z5formatannotationrelativeto.<locals>._formatannotation)r>   )r   r<  r	   )r   r
   formatannotationrelativeto  s    r=  r	   c             C   s   d|  S )N*r	   )r@   r	   r	   r
   rD     rE   rD   c             C   s   d|  S )Nz**r	   )r@   r	   r	   r
   rD     rE   c             C   s   dt |  S )N=)r9  )rA   r	   r	   r
   rD     rE   c             C   s   d|  S )Nz -> r	   )textr	   r	   r
   rD     rE   c                sD  ddl m} |dtdd  fdd}g }|rBt| t| }xFt| D ]:\}}||}|r|||kr|||
|||   }|| qLW |d k	r|||| n|r|d |rx:|D ]2}||}|r||kr||
|| 7 }|| qW |d k	r||	|| d	d
| d }d kr@|| d 7 }|S )Nr   )r  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	   )argre   )r1  r;  	formatargr	   r
   formatargandannotation  s    z-formatargspec.<locals>.formatargandannotationr>  r   z, r   r!  )r  r  r  rr   	enumeraterK   r   )r  r  r
  r  r	  r  r1  rB  formatvarargsformatvarkwformatvalueZformatreturnsr;  r  rC  specsZfirstdefaultr   rA  specZ	kwonlyargre   r	   )r1  r;  rB  r
   formatargspec  s:    



rJ  c             C   s   d|  S )Nr>  r	   )r@   r	   r	   r
   rD     rE   c             C   s   d|  S )Nz**r	   )r@   r	   r	   r
   rD     rE   c             C   s   dt |  S )Nr?  )r9  )rA   r	   r	   r
   rD     rE   c             C   s   |||fdd}g }	x&t t| D ]}
|	|| |
  q"W |rZ|	|||||   |rx|	|||||   dd|	 d S )Nc             S   s   || |||   S )Nr	   )r@   localsrB  rG  r	   r	   r
   convert  s    z formatargvalues.<locals>.convertr   z, r   )r   rr   rK   r   )r  r  r
  rK  rB  rE  rF  rG  rL  rH  r   r	   r	   r
   formatargvalues  s    rM  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 | ]}| krt |qS r	   )r9  )rW   r@   )r'  r	   r
   r   	  s    z&_missing_arguments.<locals>.<listcomp>r   r   r   z	{} and {}z, {} and {}z, z*%s() missing %i required %s argument%s: %s
positionalzkeyword-onlyr   r   )rr   rt   r   r   )f_nameZargnamesposr'  rR   missingr   tailr	   )r'  r
   _missing_arguments  s    


rT  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 | ]}| kr|qS r	   r	   )rW   rA  )r'  r	   r
   r     s    z_too_many.<locals>.<listcomp>r   zat least %dTzfrom %d to %dr   z7 positional argument%s (and %d keyword-only argument%s)r   z5%s() takes %s positional argument%s but %d%s %s givenZwasZwere)rr   r   r   )rP  r  Zkwonlyr  ZdefcountZgivenr'  ZatleastZkwonly_givenpluralr/  Z
kwonly_sigmsgr	   )r'  r
   	_too_many  s$    rW  c              O   s4  | d }| dd  }t |}|\}}}}}	}
}|j}i }t|rV|jd k	rV|jf| }t|}t|}|rrt|nd}t||}x t|D ]}|| ||| < qW |rt||d  ||< t||	 }|ri ||< xd|	 D ]X\}}||kr|st
d||f ||| |< q||kr,t
d||f |||< qW ||kr\|s\t|||	|||| ||k r|d ||  }x&|D ]}||kr|t||d| q|W x8t||| d  D ] \}}||kr|| ||< qW d}x>|	D ]6}||kr|
r||
kr|
| ||< n|d7 }qW |r0t||	d| |S )Nr   r   z*%s() got an unexpected keyword argument %rz(%s() got multiple values for argument %rTF)r  r   r   r   rr   r   r   r^   rH   r=   r   rW  rT  rD  )Zfunc_and_positionalZnamedru   rO  rI  r  r  r
  r  r	  r  r  rP  Z	arg2valueZnum_posZnum_argsZnum_defaultsnr   Zpossible_kwargskwrA   ZreqrA  rR  kwargr	   r	   r
   getcallargs-  sd    








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 }xn|jD ]d}|dkrqy|| ||< W q tk
r   y|| ||< W n tk
r   || Y nX Y qX qW t||||S )Nz{!r} is not a Python functionc             S   s   i | ]\}}|j |qS r	   )cell_contents)rW   varZcellr	   r	   r
   
<dictcomp>  s   z"getclosurevars.<locals>.<dictcomp>__builtins__)NoneTrueFalse)r   r   r   r   rt   r   __closure__zipco_freevars__globals__r~   r   r<   r   rH   co_namesKeyErrorrM   r\  )	ru   codeZnonlocal_varsZ	global_nsZ
builtin_nsZglobal_varsZbuiltin_varsZunbound_namesr@   r	   r	   r
   getclosurevarsm  s8    	
rk  	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  }yt	| \}}W n t
k
r   d  }}Y qX 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_linenor0   r   rt   r   r   r   r   maxr   rr   rl  r   r   )r6  contextlinenor   r   r   r   indexr	   r	   r
   getframeinfo  s$    rs  c             C   s   | j S )N)rn  )r6  r	   r	   r
   	getlineno  s    rt  	FrameInfo)r6  c             C   s6   g }x,| r0| ft | | }|t|  | j} qW |S )N)rs  rK   ru  f_back)r6  rp  	framelist	frameinfor	   r	   r
   getouterframes  s    
ry  c             C   s8   g }x.| r2| j ft| | }|t|  | j} qW |S )N)r   rs  rK   ru  tb_next)tbrp  rw  rx  r	   r	   r
   getinnerframes  s    
r|  c               C   s   t tdrtdS d S )N	_getframer   )r   rp   r}  r	   r	   r	   r
   currentframe  s    r~  c             C   s   t td| S )Nr   )ry  rp   r}  )rp  r	   r	   r
   stack  s    r  c             C   s   t t d | S )Nr   )r|  rp   exc_info)rp  r	   r	   r
   trace  s    r  c             C   s   t jd | S )Nrj   )r   r<   r   )klassr	   r	   r
   _static_getmro  s    r  c             C   s8   i }yt | d}W n tk
r(   Y nX t||tS )Nr<   )r   __getattribute__rL   dictr~   	_sentinel)rg   attrZinstance_dictr	   r	   r
   _check_instance  s    r  c          	   C   sF   x@t | D ]4}tt|tkr
y
|j| S  tk
r<   Y q
X q
W tS )N)r  _shadowed_dictr   r  r<   ri  )r  r  entryr	   r	   r
   _check_class   s    

r  c             C   s&   yt |  W n tk
r    dS X dS )NFT)r  r   )rg   r	   r	   r
   _is_type	  s
    r  c          	   C   sn   t jd }x^t| D ]R}y||d }W n tk
r>   Y qX t |tjkrb|jdkrb|j|ks|S qW t	S )Nr<   )
r   r<   r  r   ri  r   r   r   rZ   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	rtt|dt k	rtt|dt k	r|S |t k	r|S |t k	r|S | |krxDtt|D ]4}tt|t kry
|j	| S  t
k
r   Y qX qW |t k	r|S t|d S )Nr   r   )r  r  r   r  r   r   r  r  r  r<   ri  rL   )rg   r  r*  Zinstance_resultr  r  Zklass_resultr  r	   r	   r
   getattr_static  s6    


r  GEN_CREATEDGEN_RUNNINGGEN_SUSPENDED
GEN_CLOSEDc             C   s,   | j r
tS | jd krtS | jjdkr(tS tS )Nr|   )
gi_runningr  gi_framer  f_lastir  r  )	generatorr	   r	   r
   getgeneratorstateS  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  )r%   r   rt   r>   r  r5  )r  r6  r	   r	   r
   getgeneratorlocalse  s    r  CORO_CREATEDCORO_RUNNINGCORO_SUSPENDEDCORO_CLOSEDc             C   s,   | j r
tS | jd krtS | jjdkr(tS tS )Nr|   )
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  )r>   r5  )r  r6  r	   r	   r
   getcoroutinelocals  s    r  
from_bytesc             C   s6   yt | |}W n tk
r"   d S X t|ts2|S d S )N)r>   rL   r   _NonUserDefinedCallables)rX   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|| }y| j||}W n6 tk
rx } zd|}	t|	|W d d }~X Y nX d}
x
| D  ]\}}y|j	| }W n t
k
r   Y nlX |jtkr|| q|jtkr||krd}
|j|d||< n||j q|jtkr"|j|d||< |
r|jtkrV|| jtd}|||< || q|jttfkrr|| q|jtkr||j qW | j| dS )Nr	   z+partial object {!r} has incorrect argumentsFT)r*  )rh   )r&  )r&  r   r=   r  keywordsbind_partialr   rt   rs   	argumentsri  rh   r(  r   r)  r:  r@   r,  move_to_endr-  r+  r'  )wrapped_sigpartialZ
extra_argsZ
old_params
new_paramsZpartial_argsZpartial_keywordsZbar0  rV  Ztransform_to_kwonly
param_namer3  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 type)r&  )r^   r&  r'  rh   r-  r,  rs   r)  r(  r+  r:  )r/  paramsrh   r	   r	   r
   _signature_bound_method  s    
r  c             C   s&   t | p$t| p$t| tp$| ttfkS )N)r4   r   r   r  r   r   )rg   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ot|to|d ksxt|to|d kst|t	ot|t	S )NFr   r   __defaults____kwdefaults____annotations__)
callabler   r>   _voidr   r   r1   r   r^   r  )rg   r@   rj  r  r2  r1  r	   r	   r
   _signature_is_functionlike-  s    
r  c             C   s<   |  d}|dkr|  d}|  d}|  d}| d| S )N,r|   r   :r?  r   )find)rI  rQ  Zcposr	   r	   r
   _signature_get_bound_paramF  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|}x|D ]}|j	|j
 }}||kr|dkr|rd}qnd}|
d7 }
qn|d	krd}|
d }qn||kr|d
kr|
}qn|rd}||kr|dks|	d |	| |dkrn|	d qnW d|}|||fS )Nc             S   s   g | ]}| d qS )ascii)encode)rW   lr	   r	   r
   r   p  s    z6_signature_strip_non_python_syntax.<locals>.<listcomp>r   Fr   r  Tr   /$r   z,  r   )r   r   r   r   rK   r   OP
ERRORTOKENnextr   stringr   )	signatureself_parameterlast_positional_onlyr   r  Ztoken_streamZdelayed_commaZskip_next_commar@  rM   Zcurrent_parameterr  r  tr   r  clean_signaturer	   r	   r
   "_signature_strip_non_python_syntax]  sP    




r  Tc          	      sh  dd l | j t|\}}}d| d }y|}W n tk
rN   d }Y nX t|jsjt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 k	rJ jn jx<ttt|D ](\}\}}||| ||krb jqbW |	jjr j||	jj  jx*t|	jj |	jj!D ]\}}||| qW |	jj"r j#||	jj" |d k	rZt|dd }|d k	}t$|}|r@|s4|r@%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)r.  rs   rA  )node)astr	   r
   
parse_name  s    
z&_signature_fromstr.<locals>.parse_namec                s   yt | }W n> tk
rL   yt | }W n tk
rF   t Y nX Y nX t|trb |S t|ttfrz |S t|t	r 
|S |dkr |S t d S )N)TFN)eval	NameErrorRuntimeErrorr   r   ZStrintfloatZNumbytesZBytesZNameConstant)r   rA   )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 }|}x"t | jr*||j |j}q
W t | js>t ||j dt	|}|S )Nr{   )
r   rV   rK   r  rA   Namer  ro   r   reversed)r   r  arX  rA   )r  r  r	   r
   visit_Attribute  s    
z<_signature_fromstr.<locals>.RewriteSymbolics.visit_Attributec                s   t |j jst |jS )N)r   ZctxZLoadrs   ro   )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	   r
   RewriteSymbolics  s   r  c                s   | }|krd S |rp|t k	rpy |}|}W n tk
rR   }Y nX |kr`d S |k	rl|n|} ||d d S )N)r*  r.  )_emptyZvisitZliteral_evalrs   rK   )Z	name_nodeZdefault_noder*  r@   o)	Parameterr  r  r%  invalidrh   r&  r  r	   r
   p  s    
z_signature_fromstr.<locals>.p)	fillvaluer   )rh   )r$  )'r  _parameter_clsr  parseSyntaxErrorr   ZModulers   rt   Zbodyr%  r   r>   rp   r}   r~   r<   copyZNodeTransformerr  r  r  	itertoolszip_longestPOSITIONAL_ONLYPOSITIONAL_OR_KEYWORDrD  r   ZvarargVAR_POSITIONALKEYWORD_ONLYre  r	  Zkw_defaultsrZ  VAR_KEYWORDr   r   r:  )rX   rg   r   r  r  r  r  Zprogramr   rm   Zmodule_namer  r  r  r   r   r@   r*  _selfZself_isboundZself_ismoduler	   )r  r  r  r%  r  rh   r  r&  r  r  r  r
   _signature_fromstr  sl    








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   rt   r>   rs   r  )rX   ru   r  r   r	   r	   r
   _signature_from_builtin5  s    r  c          	   C   s  d}t |s(t|rd}ntd|| j}|j}|j}|j}t|d | }|j	}||||  }	|j
}
|j}|j}|rt|}nd}g }|| }x4|d | D ]$}|
|t}||||td qW xBt||d  D ].\}}|
|t}||||t|| d qW |jt@ rH|||  }|
|t}||||td xJ|	D ]B}t}|d k	rl||t}|
|t}||||t|d qNW |jt@ r|| }|jt@ r|d7 }|| }|
|t}||||td | ||
dt|d	S )
NFTz{!r} is not a Python functionr   )r.  rh   )r.  rh   r*  r   r!  )r$  __validate_parameters__)r   r  r   rt   r  r   r  r  r^   r  r  r  r  rr   r~   r  rK   r)  rD  r   r  r+  r,  r  r-  )rX   ru   Zis_duck_functionr  Z	func_codeZ	pos_countZ	arg_namesrO  Zkeyword_only_countZkeyword_onlyr1  r  r2  Zpos_default_countr&  Znon_default_countr@   r.  offsetr*  rr  r	   r	   r
   _signature_from_functionE  sj    










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 y
| j
}W n tk
r   Y n&X |d k	rt|tstd||S y
| 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| rjt|| S t| rt|| |d
S t| tjrt| j|||d}t|| S d }t| trt t| d}
|
d k	rt|
|||d}nJt | d}|d k	rt||||d}n$t | d}|d k	r0t||||d}|d kr:xL| j!d d D ]:}y
|j"}W n tk
rn   Y nX |rJt#|| |S qJW t| j!kr:| j$t%j$kr| j&t%j&krt't%S t(d| nrt| t)s:t t| d}
|
d k	r:yt|
|||d}W n8 t(k
r8 } zd| }t(||W d d }~X Y nX |d k	rV|rRt|S |S t| tj*rvd| }t(|t(d| d S )Nz{!r} is not a callable object)r  r  r   c             S   s
   t | dS )N__signature__)r   )rm   r	   r	   r
   rD     rE   z*_signature_from_callable.<locals>.<lambda>)rk   z1unexpected object {!r} in __signature__ attribute)Nr   )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   rt   r   r   r   r"  r   r  rv   r  rL   r#  _partialmethod	functoolspartialmethodru   r  r^   r&  r'  rh   r  r  r:  r   r  r  r  r  r  r   r  rj   r  r  r   r   r  r  rs   r  r3   )rg   r  r  r   r/  r  r  Zfirst_wrapped_paramZ
sig_paramsr  ZcallnewZinitrB   Ztext_sigr0  rV  r	   r	   r
   r"    s    	



















r"  c               @   s   e Zd ZdS )r  N)r   r   r   r	   r	   r	   r
   r  _	  s   r  c               @   s   e Zd ZdS )r  N)r   r   r   r	   r	   r	   r
   r  c	  s   r  c               @   s(   e Zd ZdZdZdZdZdZdd ZdS )	_ParameterKindr   r   r         c             C   s   | j S )N)_name_)r   r	   r	   r
   __str__n	  s    z_ParameterKind.__str__N)	r   r   r   r  r  r  r  r  r   r	   r	   r	   r
   r  g	  s   r  zpositional-onlyzpositional or keywordzvariadic positionalzkeyword-onlyzvariadic keywordc               @   s   e Zd ZdZeZeZeZ	e
ZeZeZeedddZdd Zdd Zed	d
 Zedd Zedd Zedd ZeeeedddZdd Zdd Zdd Zdd ZdS )r  )_name_kind_default_annotation)r*  r.  c            C   s   yt || _W n$ tk
r2   td|dY nX |tk	rf| jttfkrfd}|t| j}t||| _|| _	|tkrtdt
|tsdt|j}t||d dkr|dd   r| jtkrd	}|t| 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  r  rs   r  r+  r-  rt   _get_paramkind_descrr  r  r   r   r   r   r   isdigitr)  r(  isidentifierr  )r   r@   rh   r*  r.  rV  r	   r	   r
   r   	  s4    


zParameter.__init__c             C   s    t | | j| jf| j| jdfS )N)r  r  )r   r  r  r  r  )r   r	   r	   r
   
__reduce__	  s    
zParameter.__reduce__c             C   s   |d | _ |d | _d S )Nr  r  )r  r  )r   stater	   r	   r
   __setstate__	  s    
zParameter.__setstate__c             C   s   | j S )N)r  )r   r	   r	   r
   r@   	  s    zParameter.namec             C   s   | j S )N)r  )r   r	   r	   r
   r*  	  s    zParameter.defaultc             C   s   | j S )N)r  )r   r	   r	   r
   r.  	  s    zParameter.annotationc             C   s   | j S )N)r  )r   r	   r	   r
   rh   	  s    zParameter.kind)r@   rh   r.  r*  c            C   sL   |t kr| j}|t kr| j}|t kr*| j}|t kr8| j}t| ||||dS )N)r*  r.  )r  r  r  r  r  r   )r   r@   rh   r.  r*  r	   r	   r
   r:  	  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rd| }|S )Nz{}: {}z{} = {}z{}={}r>  z**)
rh   r  r  r  rt   r;  r  r9  r+  r-  )r   rh   	formattedr	   r	   r
   r   	  s    



zParameter.__str__c             C   s   d | jj| S )Nz	<{} "{}">)rt   r   r   )r   r	   r	   r
   __repr__
  s    zParameter.__repr__c             C   s   t | j| j| j| jfS )N)hashr@   rh   r.  r*  )r   r	   r	   r
   __hash__
  s    zParameter.__hash__c             C   sJ   | |krdS t |tstS | j|jkoH| j|jkoH| j|jkoH| j|jkS )NT)r   r  NotImplementedr  r  r  r  )r   otherr	   r	   r
   __eq__
  s    
zParameter.__eq__N)r   r   r   	__slots__r(  r  r)  r  r+  r  r,  r  r-  r  r  r%  r   r  r
  r[   r@   r*  r.  rh   r  r:  r   r  r  r  r	   r	   r	   r
   r  	  s(   (r  c               @   sd   e Zd ZdZdd Zedd Zedd Zedd	 Zd
d Z	dd Z
dd Zdd Zdd ZdS )BoundArguments)r  
_signature__weakref__c             C   s   || _ || _d S )N)r  r  )r   r  r  r	   r	   r
   r   1
  s    zBoundArguments.__init__c             C   s   | j S )N)r  )r   r	   r	   r
   r  5
  s    zBoundArguments.signaturec          	   C   s|   g }xn| j j D ]^\}}|jttfkr*P y| j| }W n tk
rN   P Y qX |jtkrf|	| q|
| qW t|S )N)r  r&  r=   rh   r-  r,  r  ri  r+  extendrK   r^   )r   r  r  r3  rA  r	   r	   r
   r  9
  s    
zBoundArguments.argsc          	   C   s   i }d}x| j j D ]x\}}|sF|jttfkr6d}n|| jkrFd}q|sLqy| j| }W n tk
rn   Y qX |jtkr|| q|||< qW |S )NFT)	r  r&  r=   rh   r-  r,  r  ri  update)r   kwargsZkwargs_startedr  r3  rA  r	   r	   r
   r  P
  s&    

zBoundArguments.kwargsc          	   C   s   | j }g }x| jj D ]v\}}y|||| f W q tk
r   |jtk	rX|j}n"|jt	krhd}n|jt
krxi }nw|||f Y qX qW t|| _ d S )Nr	   )r  r  r&  r=   rK   ri  r*  r  rh   r+  r-  r   )r   r  Znew_argumentsr@   r3  valr	   r	   r
   apply_defaultsn
  s    	


zBoundArguments.apply_defaultsc             C   s2   | |krdS t |tstS | j|jko0| j|jkS )NT)r   r  r  r  r  )r   r  r	   r	   r
   r  
  s    
zBoundArguments.__eq__c             C   s   |d | _ |d | _d S )Nr  r  )r  r  )r   r	  r	   r	   r
   r
  
  s    
zBoundArguments.__setstate__c             C   s   | j | jdS )N)r  r  )r  r  )r   r	   r	   r
   __getstate__
  s    zBoundArguments.__getstate__c             C   sD   g }x(| j  D ]\}}|d|| qW d| jjd|S )Nz{}={!r}z	<{} ({})>z, )r  r=   rK   rt   r   r   r   )r   r  rA  rA   r	   r	   r
   r  
  s    zBoundArguments.__repr__N)r   r   r   r  r   r[   r  r  r  r  r  r
  r  r  r	   r	   r	   r
   r  
  s   r  c               @   s   e Zd ZdZeZeZeZ	d+eddddZ
edd Zed	d
 ZeddddZedd Zedd ZeedddZdd Zdd Zdd ZddddZdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* ZdS ),r#  )_return_annotation_parametersNT)r$  r  c            C   s   |d krt  }n|rt  }t}d}xt|D ]\}}|j}	|j}
|	|k rjd}|t|t|	}t|n|	|krzd}|	}|	ttfkr|j	t
kr|rd}t|nd}|
|krd|
}t||||
< q,W 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 )N)r@   )rW   r3  r	   r	   r
   rY   
  s   z%Signature.__init__.<locals>.<genexpr>)r   r(  rD  rh   r@   rt   r  rs   r)  r*  r  r   MappingProxyTyper  r  )r   r&  r$  r  r  Ztop_kindZkind_defaultsidxr3  rh   r@   rV  r	   r	   r
   r   
  s>    






zSignature.__init__c             C   s   t jdtdd t| |S )Nz_inspect.Signature.from_function() is deprecated since Python 3.5, use Signature.from_callable()r   )r  )r  r  r  r  )rX   ru   r	   r	   r
   from_function
  s    
zSignature.from_functionc             C   s   t jdtdd t| |S )Nz^inspect.Signature.from_builtin() is deprecated since Python 3.5, use Signature.from_callable()r   )r  )r  r  r  r  )rX   ru   r	   r	   r
   from_builtin  s    
zSignature.from_builtin)follow_wrappedc            C   s   t || |dS )N)r   r  )r"  )rX   rg   r"  r	   r	   r
   from_callable  s    zSignature.from_callablec             C   s   | j S )N)r  )r   r	   r	   r
   r&    s    zSignature.parametersc             C   s   | j S )N)r  )r   r	   r	   r
   r$    s    zSignature.return_annotation)r&  r$  c            C   s0   |t kr| j }|t kr | j}t| ||dS )N)r$  )r  r&  r'  r  r   )r   r&  r$  r	   r	   r
   r:    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 )N)rh   r,  )rW   r3  r	   r	   r
   rY   +  s    z(Signature._hash_basis.<locals>.<genexpr>c             S   s   i | ]}|j tkr||jqS r	   )rh   r,  r@   )rW   r3  r	   r	   r
   r_  .  s    z)Signature._hash_basis.<locals>.<dictcomp>)r^   r&  r'  r$  )r   r  
kwo_paramsr	   r	   r
   _hash_basis*  s    zSignature._hash_basisc             C   s(   |   \}}}t| }t|||fS )N)r%  	frozensetr'  r  )r   r  r$  r$  r	   r	   r
   r  3  s    zSignature.__hash__c             C   s*   | |krdS t |tstS |  | kS )NT)r   r#  r  r%  )r   r  r	   r	   r
   r  8  s
    
zSignature.__eq__F)r  c            C   s  t  }t| j }d}t|}xxyt|}W n tk
r   yt|}	W n tk
rb   P Y nX |	jtkrrP n|	j|kr|	jt	krd}
|
j
|	jd}
t|
d |	f}P nH|	jtks|	jtk	r|	f}P n*|r|	f}P nd}
|
j
|	jd}
t|
d Y q$X yt|}	W n  tk
r&   tdd Y q$X |	jttfkrBtdd |	jtkrn|g}|| t|||	j< P |	j|krtdj
|	jdd |||	j< q$W d }xt||D ]}	|	jtkr|	}q|	jtkr֐q|	j}y||}W nF tk
r0   |s,|	jtkr,|	jtkr,tdj
|dd Y n(X |	jt	krPtdj
|	jd|||< qW |r|d k	rz|||j< ntdj
tt|d| | |S )Nr	   zA{arg!r} parameter is positional only, but was passed as a keyword)rA  z$missing a required argument: {arg!r}ztoo many positional argumentsz$multiple values for argument {arg!r}z*got an unexpected keyword argument {arg!r})r   r   r&  r'  r  StopIterationrh   r+  r@   r(  rt   r   r-  r*  r  r,  r  r^   r  chainr   ri  _bound_arguments_cls)r   r  r  r  r  r&  Zparameters_exZarg_valsZarg_valr3  rV  r'  Zkwargs_paramr  r	   r	   r
   _bind?  s    







zSignature._bindc              O   s   | d  | dd  |S )Nr   r   )r*  )r  r  r	   r	   r
   bind  s    zSignature.bindc              O   s   | d j | dd  |ddS )Nr   r   T)r  )r*  )r  r  r	   r	   r
   r    s    zSignature.bind_partialc             C   s    t | t| j fd| jifS )Nr  )r   r^   r  r'  r  )r   r	   r	   r
   r    s    zSignature.__reduce__c             C   s   |d | _ d S )Nr  )r  )r   r	  r	   r	   r
   r
    s    zSignature.__setstate__c             C   s   d | jj| S )Nz<{} {}>)rt   r   r   )r   r	   r	   r
   r    s    zSignature.__repr__c       	      C   s   g }d}d}xr| j  D ]d}t|}|j}|tkr8d}n|rJ|d d}|tkrXd}n|tkrr|rr|d d}|| qW |r|d dd	|}| j
tk	rt| j
}|d|7 }|S )NFTr  r>  z({})z, z -> {})r&  r'  r   rh   r(  rK   r+  r,  rt   r   r$  r  r;  )	r   re   Zrender_pos_only_separatorZrender_kw_only_separatorr3  r  rh   ZrenderedZannor	   r	   r
   r     s0    




zSignature.__str__)N)r   r   r   r  r  r  r  r)  r  r%  r   rc   r   r!  r#  r[   r&  r$  r  r:  r%  r  r  r*  r+  r  r  r
  r  r   r	   r	   r	   r
   r#  
  s0   6	 r#  )r"  c            C   s   t j| |dS )N)r"  )r#  r#  )rg   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
\}}}y|| }}	W nL tk
r }
 z.d	|t
|
j|
}t|tjd td W d d }
~
X Y nX |r|d}|	}x|D ]}t||}qW |	jtjkrtdtjd td |jrtd	| td	t|	 td	|	j ||	krxtd	t|	j t|	drtd	|	j n6y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)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_moduler_   rt   r   r   printrp   stderrexitr   r>   builtin_module_namesZdetailsr   
__cached__r9  r   r   r/  r   r   )r0  r   parserr  targetZmod_nameZ	has_attrsZattrsrg   r   rf   rV  partspart__rq  r	   r	   r
   _main  sV    



r@  r   )N)N)N)F)N)r   )r   )r   )r   )r   )r	   )T)T)
__author__r*   disZcollections.abcr)   enumZimportlib.machineryr   r  r   r   r   rp   r   r   r   r  r  r   operatorr   r   r   globalsZmod_dictZCOMPILER_FLAG_NAMESr=   rS   rT   r9   r   r   r   r   r   r   r   r   r   r   r    r!   r#   r%   r'   r,   r.   r0   r2   r4   r5   rC   rU   rV   ri   rG   rv   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r_   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r4  r7  r;  r=  r   rJ  rM  rT  rW  r[  r\  rk  rl  rs  rt  _fieldsru  ry  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  r<   Z_ClassMethodWrapperr3   r  r  r  r  r  r  r  r  r  r  r  r"  r  r  IntEnumr  r  r(  r  r)  r  r+  r  r,  r  r-  Z_PARAM_NAME_MAPPING__getitem__r  r  r  r#  r  r@  r   r	   r	   r	   r
   <module>   s`  	


	
	
,
t$
;
	
.I-7


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

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