o
     JAf                    @   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 < q]dZddddd	d
Zdd Z dd Z!dd Z"dd Z#dd Z$e%edrdd Z&ndd Z&e%edrd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. Z0d/d0 Z1d1d2 Z2d3d4 Z3d5d6 Z4d7d8 Z5d9d: Z6dd;d<Z7ed=d>Z8d?d@ Z9dAdB Z:ddCdDdEZ;dFdG Z<dHdI Z=dJdK Z>dLdM Z?dNdO Z@dPdQ ZAdRdS ZBdTdU ZCddVdWZDi ZEi ZFddXdYZGG dZd[ d[eHZIG d\d] d]ejJZKd^d_ ZLd`da ZMG dbdc dceHZNG ddde deZOdfdg ZPdhdi ZQdjdk ZRdldm ZSddndoZTedpdqZUdrds ZVedtduZWdvdw ZXedxdyZYdzd{ ZZed|d}Z[d~d Z\dddZ]dd Z^ddddi i e_dd dd dd dd e]fddZ`e_dd dd dd fddZadd Zbdd Zcdd ZdeddZedd ZfeddZgdddZhdd Zieddegjj ZkdddZldddZmdd ZndddZodddZpeq Zrdd Zsdd Ztdd Zudd Zvdd ZwerfddZxdZydZzdZ{dZ|dd Z}dd Z~dZdZdZdZddǄ ZddɄ ZeejZeejZeejd ZeeeejfZdd̄ Zddd΄ZddЄ Zdd҄ ZddԄ Zddք Zdd؄ ZdddۄZddd݄Z		ddd߄ZddddddddZG dd dZG dd dZG dd dejZejZejZejZejZejZededededediZG dd dZG dd dZG dd dZdddddddZdd Zedkre  dS dS (   )zKa-Ping Yee <ping@lfw.org>z'Yury Selivanov <yselivanov@sprymix.com>    N)
attrgetter)
namedtupleOrderedDictZCO_i   Fglobalslocalseval_strc                   s  	 t | trFt| dd }|r"t|dr"|dd }t |tjr!d }nd }d }t| dd }|r=tj|d }|r=t|dd }t	t
| }	| }
n2t | tjr\t| dd }t| d}d }	d }
nt| rqt| dd }t| dd }d }	| }
nt| d|d u r~i S t |t	st| d|si S |st	|S |
d ur	 t|
d	r|
j}
qt |
tjr|
j}
q	 t|
dr|
j} d u r| d u r|	 fd
d| D }|S )N__dict__get__annotations__
__module____globals__z% is not a module, class, or callable.z+.__annotations__ is neither a dict nor NoneT__wrapped__c                    s,   i | ]\}}|t |ts|nt| qS  )
isinstancestreval).0keyvaluer   r   r   /usr/lib/python3.10/inspect.py
<dictcomp>   s
    z#get_annotations.<locals>.<dictcomp>)r   typegetattrhasattrr
   typesGetSetDescriptorTypesysmodulesdictvars
ModuleTypecallable	TypeError
ValueErrorr   	functoolspartialfuncr   items)objr   r   r   Zobj_dictannZobj_globalsmodule_namemoduleZ
obj_localsunwrapZreturn_valuer   r   r   get_annotationsB   sn   
,



r/   c                 C      	 t | tjS N)r   r   r"   objectr   r   r   ismodule      r4   c                 C      	 t | tS r1   )r   r   r2   r   r   r   isclass      
r7   c                 C   r0   r1   )r   r   
MethodTyper2   r   r   r   ismethod      r:   c                 C   s<   	 t | st| st| rdS t| }t|dot|d S )NF__get____set__r7   r:   
isfunctionr   r   r3   tpr   r   r   ismethoddescriptor   s
   rB   c                 C   s:   	 t | st| st| rdS t| }t|dpt|dS )NFr=   
__delete__r>   r@   r   r   r   isdatadescriptor   s
   rD   MemberDescriptorTypec                 C   r0   r1   )r   r   rE   r2   r   r   r   ismemberdescriptor      rF   c                 C      	 dS NFr   r2   r   r   r   rF         r   c                 C   r0   r1   )r   r   r   r2   r   r   r   isgetsetdescriptor  rG   rK   c                 C   rH   rI   r   r2   r   r   r   rK     rJ   c                 C   r0   r1   )r   r   FunctionTyper2   r   r   r   r?     s   
r?   c                 C   sF   	 t | r| j} t | st| } t| st| sdS t| jj|@ S rI   )	r:   __func__r&   _unwrap_partialr?   _signature_is_functionlikebool__code__co_flags)fflagr   r   r   _has_code_flag"  s   
rU   c                 C   r6   r1   )rU   ZCO_GENERATORr*   r   r   r   isgeneratorfunction-     
rW   c                 C   r6   r1   )rU   ZCO_COROUTINErV   r   r   r   iscoroutinefunction4  rX   rY   c                 C   r6   r1   )rU   ZCO_ASYNC_GENERATORrV   r   r   r   isasyncgenfunction;  r8   rZ   c                 C   r0   r1   )r   r   AsyncGeneratorTyper2   r   r   r   
isasyncgenC     r\   c                 C   r0   r1   )r   r   GeneratorTyper2   r   r   r   isgeneratorG  s   r_   c                 C   r0   r1   )r   r   CoroutineTyper2   r   r   r   iscoroutineX  r]   ra   c                 C   s8   	 t | tjpt | tjot| jjt@ pt | tj	j
S r1   )r   r   r`   r^   rP   gi_coderR   ZCO_ITERABLE_COROUTINEcollectionsabc	Awaitabler2   r   r   r   isawaitable\  s   rf   c                 C   r0   r1   )r   r   TracebackTyper2   r   r   r   istracebackc  r;   rh   c                 C   r0   r1   )r   r   	FrameTyper2   r   r   r   isframem  s   rj   c                 C   r0   r1   )r   r   CodeTyper2   r   r   r   iscode{  s   rl   c                 C   r0   r1   )r   r   BuiltinFunctionTyper2   r   r   r   	isbuiltin  r5   rn   c                 C   s"   	 t | pt| pt| pt| S r1   )rn   r?   r:   rB   r2   r   r   r   	isroutine  s   ro   c                 C   s   	 t | tsdS | jt@ rdS tt| tjsdS t| dr dS | j	 D ]\}}t
|ddr2 dS q%| jD ]}t
|ddD ]}t
| |d }t
|ddrP  dS q>q6dS )NFT__abstractmethods____isabstractmethod__r   )r   r   	__flags__TPFLAGS_IS_ABSTRACT
issubclassrd   ABCMetar   r	   r)   r   	__bases__)r3   namer   baser   r   r   
isabstract  s*   



ry   c              	   C   s  	 t | r| ft|  }nd}g }t }t| }z| jD ]}|j D ]\}}t|tj	r2|
| q#qW n	 ty>   Y nw |D ]>}	zt| |	}
|	|v rOtW n tyl   |D ]}|	|jv rg|j|	 }
 nqYY qAY nw |rs||
rz|
|	|
f ||	 qA|jdd d |S )Nr   c                 S   s   | d S )Nr   r   )Zpairr   r   r   <lambda>      zgetmembers.<locals>.<lambda>r   )r7   getmrosetdirrv   r	   r)   r   r   DynamicClassAttributeappendAttributeErrorr   addsort)r3   	predicatemroresults	processednamesrx   kvr   r   r   r   r   
getmembers  sL   




	r   	Attributezname kind defining_class objectc                 C   s6  	 t | }t t| }tdd |D }| f| }|| }t| }|D ]}|j D ]\}}t|tjr>|j	d ur>|
| q*q#g }	t }
|D ]}d }d }d }||
vrz|dkr\tdt| |}W n tyt } zW Y d }~nGd }~ww t|d|}||vrd }d }|D ]}t||d }||u r|}q|D ]}z|| |}W n	 ty   Y qw ||u r|}q|d ur|}|D ]}||jv r|j| }||vr|} nq|d u rqG|d ur|n|}t|ttjfrd}|}n!t|ttjfrd}|}nt|trd}|}n
t|rd	}nd
}|	
t|||| |
| qG|	S )Nc                 s   s     | ]}|t tfvr|V  qd S r1   )r   r3   )r   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)r}   r   tupler   r	   r)   r   r   r   fgetr   r~   	Exceptionr   __getattr__r   staticmethodBuiltinMethodTypeclassmethodClassMethodDescriptorTyper   ro   r   r   )r   r   ZmetamroZclass_basesZ	all_basesr   rx   r   r   resultr   rw   ZhomeclsZget_objZdict_objexcZlast_clsZsrch_clsZsrch_objr*   kindr   r   r   classify_class_attrs  s   






r   c                 C      	 | j S r1   )__mro__)r   r   r   r   r}   ^  s   r}   stopc                   s   	  d u r
dd }n fdd}| }t ||i}t }|| r@| j} t | }||v s1t||kr8td|| ||< || s | S )Nc                 S   
   t | dS Nr   r   rS   r   r   r   _is_wrapperu     
zunwrap.<locals>._is_wrapperc                    s   t | do	 |  S r   r   r   r   r   r   r   x  s   z!wrapper loop when unwrapping {!r})idr   getrecursionlimitr   lenr%   format)r(   r   r   rS   memoZrecursion_limitZid_funcr   r   r   r.   d  s   
r.   c                 C   s   	 |   }t|t|  S r1   )
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|s%d S |S )N.)r   r   r
   r   __qualname__splitr   r7   )r(   r   rw   r   r   r   
_findclass  s   r   c              	   C   s  t | r'| jD ]}|tur$z|j}W n	 ty   Y qw |d ur$|  S qd S t| rI| jj}| j}t |rEt	t	||d d| ju rE|}n|j
}nt| rb| j}t| }|d u s_t	||| urad S nmt| r| j}| j}t |r}|jd | | jkr}|}nR|j
}nNt| tr| j}|j}t|}|d u st	||| urd S n1t| st| r| j}| j}t	||| urd S t| rt	|dd }t|tr||v r|| S nd S |jD ]}zt	||j}W n	 ty   Y qw |d ur|  S qd S )NrM   r   	__slots__)r7   r   r3   __doc__r   r:   rM   __name____self__r   	__class__r?   r   rn   r   r   r   r   rB   rD   r   rF   r    )r*   rx   docrw   selfr   r(   slotsr   r   r   _finddoc  sx   



r   c              	   C   sf   	 z| j }W n
 ty   Y d S w |d u r(zt| }W n ttfy'   Y d S w t|ts/d S t|S r1   )r   r   r   r$   r   r   cleandoc)r3   r   r   r   r   getdoc  s   

r   c                 C   s   	 z	|   d}W n
 ty   Y d S w tj}|dd  D ]}t| }|r3t|| }t||}q|r>|d  |d< |tjk rWtdt|D ]}|| |d  ||< qJ|rg|d sg|	  |rg|d r]|rx|d sx|	d |rx|d rmd
|S )N
   r   r   )r   r   UnicodeErrorr   maxsizer   r   minrangepopjoin)r   linesZmarginr   Zcontentindentir   r   r   r     s0   

(

r   c                 C   s   	 t | rt| dd r| jS td| t| r>t| dr7tj	| j
}t|dd r.|jS | j
dkr7tdtd| t| rE| j} t| rL| j} t| rS| j} t| rZ| j} t| ra| jS tdt| j)N__file__z{!r} is a built-in moduler   __main__source code not availablez{!r} is a built-in classzVmodule, class, method, function, traceback, frame, or code object was expected, got {})r4   r   r   r$   r   r7   r   r   r   r
   r   OSErrorr:   rM   r?   rQ   rh   tb_framerj   f_coderl   co_filenamer   r   )r3   r-   r   r   r   getfile  s8   

r   c                 C   sV   	 t j| }dd tj D }|  |D ]\}}||r(|d |   S qd S )Nc                 S   s   g | ]	}t | |fqS r   )r   )r   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 r1tj d tjj	d   nt fddtjj
D r@d S tj rH S t|  }t|dd d urW S tt|dd dd d ure S  tjv rl S d S )Nc                 3       | ]}  |V  qd S r1   r   r   sfilenamer   r   r   4      z getsourcefile.<locals>.<genexpr>r   c                 3   r   r1   r   r   r   r   r   r   7  r   
__loader____spec__loader)r   r   r   DEBUG_BYTECODE_SUFFIXESOPTIMIZED_BYTECODE_SUFFIXESanyr   r   splitextSOURCE_SUFFIXESEXTENSION_SUFFIXESexists	getmoduler   	linecachecache)r3   Zall_bytecode_suffixesr-   r   r   r   getsourcefile-  s,   


r   c                 C   s.   	 |d u rt | pt| }tjtj|S r1   )r   r   r   r   normcaseabspath)r3   	_filenamer   r   r   
getabsfileF  s   r   c           
   	   C   s|  	 t | r| S t| drtj| jS |d ur#|tv r#tjt| S zt| |}W n tt	fy6   Y d S w |tv rCtjt| S tj
  D ].\}}t |rxt|drx|j}|t|d krcqJ|t|< t|}|j t|< ttj|< qJ|tv rtjt| S tjd }t| dsd S t|| jrt|| j}|| u r|S tjd }t|| jrt|| j}	|	| u r|S d S d S )Nr   r   r   r   builtins)r4   r   r   r   r
   r   modulesbyfiler   r$   FileNotFoundErrorcopyr)   r   _filesbymodnamer   r   r   realpathr   )
r3   r   filemodnamer-   rS   mainZ
mainobjectZbuiltinZbuiltinobjectr   r   r   r   R  sT   





r   c                   @      e Zd ZdS )ClassFoundExceptionNr   r   r   r   r   r   r   r        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 r1   )stackqualname)r   r	  r   r   r   __init__     
z_ClassFinder.__init__c                 C   s<   | j |j | j d | | | j   | j   d S )Nz<locals>)r  r   rw   generic_visitr   r   noder   r   r   visit_FunctionDef  s
   

z_ClassFinder.visit_FunctionDefc                 C   sb   | j |j | jd| j kr%|jr|jd j}n|j}|d8 }t|| | | j 	  d S )Nr   r   r   )
r  r   rw   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r|dstdt| |}|r.t||j	}nt|}|s9tdt
| rA|dfS t| r|| j}d|}t|}t|}z
|| W td ty{ } z|jd }	||	fW  Y d }~S d }~ww t| r| j} t| r| j} t| r| j} t| r| j} t| rt| dstd	| jd
 }
t d}|
dkrz||
 }W n t!y   tdw |"|r	 ||
fS |
d
 }
|
dks||
fS td)N<>r   z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   r   r   getlinesr	   r4   r7   r   r   astparser  visitr  argsr:   rM   r?   rQ   rh   r   rj   r   rl   r   r  recompile
IndexErrormatch)r3   r   r-   r   r	  sourceZtreeZclass_finderer  lnumpatr   r   r   r   
findsource  sl   








r'  c              	   C   s  	 zt | \}}W n ttfy   Y d S w t| rd}|r*|d d d dkr*d}|t|k rJ||  dv rJ|d }|t|k rJ||  dv s8|t|k r|| d d dkrg }|}|t|k r|| d d dkr|||   |d }|t|k r|| d d dksnd|S d S d S |dkrTt	|| }|d }|dkrV|| 
 d d dkrXt	|| |krZ||  
 g}|dkr|d }||  
 }|d d dkrt	|| |kr|g|d d< |d }|dk rn||  
 }|d d dkrt	|| |ks|r1|d  dkr1g |d d< |r1|d  dks|rO|d  dkrOg |dd < |rO|d  dks=d|S d S d S d S d S )	Nr      z#!r   )r  #r)  r  r   )r'  r   r$   r4   r   stripr   r   r   r   r   )r3   r   r%  startZcommentsendr   Zcommentr   r   r   getcomments  s\      

	$
$
"
r-  c                   @   r  )
EndOfBlockNr  r   r   r   r   r.        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   s  | j s!| js!|dkrd| _n|dv r|dkrd| _d| _ d| _d S |dkr/| jr-d| _d S d S |dkr@| jr>d| _d| _d S d S |tjkrad| _|d | _| jrRt| jr]| js_d| _d S d S d S | jrfd S |tj	kr| j
d u rx| j rx|d	 | _
| jd	 | _d| _d S |tjkr| jd	 | _| jdkrtd S |tjkr| j
d ur|d	 | j
kr|d | _d S d S d S | jdkr|tjtjfvrtd S d S )
N@T)defclasslambdar<  ()Fr   r   )r2  r4  r1  r3  r5  tokenizeNEWLINEr6  r.  INDENTr7  r   DEDENTCOMMENTNL)r   r   tokenZsrowcolZerowcolr   r   r   r   
tokeneater#  sX   











zBlockFinder.tokeneaterN)r   r   r   r
  rF  r   r   r   r   r0    s    
r0  c              	   C   sV   	 t  }ztt| j}|D ]}|j|  qW n ttfy#   Y nw | d |j S r1   )	r0  r?  generate_tokensiter__next__rF  r.  IndentationErrorr6  )r   ZblockfindertokensZ_tokenr   r   r   getblockU  s   rL  c                 C   s`   	 t | } t| \}}t| r| j} t| s t| r$| jjdkr$|dfS t||d  |d fS )Nz<module>r   r   )	r.   r'  rh   r   r4   rj   r   co_namerL  r3   r   r%  r   r   r   getsourcelines`  s   rO  c                 C   s   	 t | \}}d|S )Nr  )rO  r   rN  r   r   r   	getsourceu  s   
rP  c                 C   sT   	 g }| j tddd | D ]}|||jf ||v r'|t|| || q|S )Nr   r   r|   )r   r   r   rv   walktree)classeschildrenparentr   cr   r   r   rQ    s   rQ  c                 C   s   	 i }g }| D ]2}|j r0|j D ]}||vrg ||< ||| vr&|| | |r.|| v r. nqq||vr9|| q|D ]}|| vrG|| q<t||d S r1   )rv   r   rQ  )rR  uniquerS  rootsrU  rT  r   r   r   getclasstree  s(   


rX  	Argumentszargs, varargs, varkwc           	      C   s   	 t | std| | j}| j}| j}t|d | }t||||  }d}||7 }d }| jt@ r=| j| }|d }d }| jt	@ rI| j| }t
|| ||S )Nz{!r} is not a code objectr   r   )rl   r$   r   co_varnamesco_argcountco_kwonlyargcountlistrR   
CO_VARARGSCO_VARKEYWORDSrY  )	cor   nargsZnkwargsr  
kwonlyargsstepvarargsvarkwr   r   r   getargs  s$   



rf  ArgSpeczargs varargs keywords defaultsc                 C   sF   	 t jdtdd t| \}}}}}}}|s|rt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%   rg  )r(   r  rd  re  defaultsrb  kwonlydefaultsr+   r   r   r   
getargspec  s   rp  FullArgSpeczGargs, varargs, varkw, defaults, kwonlyargs, kwonlydefaults, annotationsc              
   C   sh  	 zt | ddtdd}W n ty } ztd|d }~ww g }d }d }g }g }i }d}	i }
|j|jur9|j|d< |j D ]a}|j}|j	}|t
u r\|| |j|jur[|	|jf7 }	n8|tu rr|| |j|jurq|	|jf7 }	n"|tu ry|}n|tu r|| |j|jur|j|
|< n|tu r|}|j|jur|j||< q>|
sd }
|	sd }	t|| |||	||
|S )NF)follow_wrapper_chainsskip_bound_argsigclsr   zunsupported callabler   return)_signature_from_callable	Signaturer   r$   return_annotationempty
parametersvaluesr   rw   _POSITIONAL_ONLYr   default_POSITIONAL_OR_KEYWORD_VAR_POSITIONAL_KEYWORD_ONLY_VAR_KEYWORD
annotationrq  )r(   sigexr  rd  re  posonlyargsrb  annotationsrn  
kwdefaultsparamr   rw   r   r   r   rm    sl   







rm  ArgInfozargs varargs keywords localsc                 C   s"   	 t | j\}}}t|||| jS r1   )rf  r   r  f_locals)framer  rd  re  r   r   r   getargvaluesC  s   r  c                 C   st   t | dd dkrdd }td|t| S t| tjrt| S t| tr6| j	d|fv r.| j
S | j	d | j
 S t| S )Nr   typingc                 S   s   |   }|dS )Nztyping.)groupremoveprefix)r"  textr   r   r   replO  s   
zformatannotation.<locals>.replz[\w\.]+r   r   )r   r  subreprr   r   GenericAliasr   r   r   r   )r  Zbase_moduler  r   r   r   formatannotationM  s   
r  c                    s   t | dd   fdd}|S )Nr   c                    s
   t |  S r1   )r  )r  r-   r   r   _formatannotation]  r   z5formatannotationrelativeto.<locals>._formatannotation)r   )r3   r  r   r  r   formatannotationrelativeto[  s   r  r   c                 C      d|  S N*r   rw   r   r   r   rz   d  r{   rz   c                 C   r  N**r   r  r   r   r   rz   e  r{   c                 C      dt |  S N=r  r   r   r   r   rz   f  r/  c                 C   r  )Nz -> r   )r  r   r   r   rz   g  r{   c                    s:  	 ddl m} |dtdd  fdd}g }|r"t| t| }t| D ]\}}||}|r>||kr>||
|||   }|| q&|d urR|||| n|rY|d |rw|D ]}||}|rq||v rq||
|| 7 }|| q]|d ur||	|| d	d
| d }d v r|| d 7 }|S )Nr   )rk  zc`formatargspec` is deprecated since Python 3.5. Use `signature` and the `Signature` object directlyr(  rh  c                    s(   | }|  v r|d |   7 }|S )Nz: r   )argr   r  r  	formatargr   r   formatargandannotation|  s   z-formatargspec.<locals>.formatargandannotationr  r=  , r>  ru  )rj  rk  rl  r   	enumerater   r   )r  rd  re  rn  rb  ro  r  r  formatvarargsformatvarkwformatvalueZformatreturnsr  rk  r  specsZfirstdefaultr   r  specZ	kwonlyargr   r   r  r   formatargspeca  s>   
r  c                 C   r  r  r   r  r   r   r   rz     r{   c                 C   r  r  r   r  r   r   r   rz     r{   c                 C   r  r  r  r  r   r   r   rz     r/  c                 C   s   	 |||fdd}g }	t t| D ]}
|	|| |
  q|r,|	|||||   |r;|	|||||   dd|	 d S )Nc                 S   s   || |||   S r1   r   )rw   r   r  r  r   r   r   convert  s   z formatargvalues.<locals>.convertr=  r  r>  )r   r   r   r   )r  rd  re  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
| ||r=dnd|dkrDdnd|f )Nc                    s   g | ]
}| vrt |qS r   r  )r   rw   r{  r   r   r     s    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posr{  r   missingr   tailr   r  r   _missing_arguments  s   


r  c              	      s   t || }t  fdd|D }|r|dk}	d|f }
n|r*d}	d|t |f }
nt |dk}	tt |}
d}|rOd}||dkrCd	nd||dkrKd	ndf }td
| |
|	rWd	nd|||dkre|sedf df )Nc                    s   g | ]}| v r|qS r   r   )r   r  r  r   r   r     s    z_too_many.<locals>.<listcomp>r   zat least %dTzfrom %d to %dr  z7 positional argument%s (and %d keyword-only argument%s)r   z5%s() takes %s positional argument%s but %d%s %s givenZwasZwere)r   r   r$   )r  r  Zkwonlyrd  ZdefcountZgivenr{  ZatleastZkwonly_givenpluralr  Z
kwonly_sigmsgr   r  r   	_too_many  s0   r  c                O   s  	 t | }|\}}}}}}	}
| j}i }t| r"| jd ur"| jf| }t|}t|}|r0t|nd}t||}t|D ]
}|| ||| < q;|rRt||d  ||< t|| }|r^i ||< |	 D ])\}}||vr{|stt
d||f ||| |< qb||v rt
d||f |||< qb||kr|st||||||| ||k r|d ||  }|D ]}||vrt||d| qt||| d  D ]\}}||vr|| ||< qd}|D ]}||vr|	r||	v r|	| ||< q|d7 }q|rt||d| |S )Nr   z*%s() got an unexpected keyword argument %rz(%s() got multiple values for argument %rTr   F)rm  r   r:   r   r   r   r   r   r~   r)   r$   r  r  r  )r(   r  namedr  r  rd  re  rn  rb  ro  r+   r  Z	arg2valueZnum_posZnum_argsZnum_defaultsnr   Zpossible_kwargskwr   Zreqr  r  kwargr   r   r   getcallargs  sn   

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|r;|j}i }i }t }|jD ]/}|dv rLqEz|| ||< W qE tyt   z|| ||< W n tyq   || Y nw Y qEw t||||S )N{!r} is not a Python functionc                 S   s   i | ]\}}||j qS r   )cell_contents)r   varZcellr   r   r   r   *  s    z"getclosurevars.<locals>.<dictcomp>__builtins__)NoneTrueFalse)r:   rM   r?   r$   r   rQ   __closure__zipco_freevarsr   r
   r   r	   r4   r~   co_namesKeyErrorr   r  )	r(   codeZnonlocal_varsZ	global_nsZ
builtin_nsZglobal_varsZbuiltin_varsZunbound_namesrw   r   r   r   getclosurevars  sD   

r  	Tracebackz+filename lineno function code_context indexr   c                 C   s   	 t | r| j}| j} n| j}t| std| t| p!t| }|dkr_|d |d  }zt	| \}}W n t
yC   d  }}Y n w tdt|t|| }||||  }|d | }nd  }}t||| jj||S )Nz'{!r} is not a frame or traceback objectr   r   r(  )rh   	tb_linenor   f_linenorj   r$   r   r   r   r'  r   maxr   r   r  r   rM  )r  contextr  r   r+  r   r%  indexr   r   r   getframeinfoL  s(   r  c                 C   r   r1   )r  r  r   r   r   	getlinenol  s   r  	FrameInfor  c                 C   s6   	 g }| r| ft | | }|t|  | j} | s|S r1   )r  r   r  f_back)r  r  	framelist	frameinfor   r   r   getouterframess  s   r  c                 C   s8   	 g }| r| j ft| | }|t|  | j} | s|S r1   )r   r  r   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 )Nr   )r   r	   r<   )klassr   r   r   _static_getmro     r  c                 C   s6   i }zt | d}W n	 ty   Y nw t||tS Nr	   )r3   __getattribute__r   r    r
   	_sentinel)r*   attrZinstance_dictr   r   r   _check_instance  s   r  c              	   C   sF   t | D ]}tt|tu r z|j| W   S  ty   Y qw qtS r1   )r  _shadowed_dictr   r  r	   r  )r  r  entryr   r   r   _check_class  s   r  c                 C   s$   zt |  W dS  ty   Y dS w NFT)r  r$   rV   r   r   r   _is_type  s   
r  c              	   C   sl   t jd }t| D ]*}z	||d }W n	 ty   Y q	w t |tju r/|jdkr/|j|u s3|  S q	t	S r  )
r   r	   r  r<   r  r   r   r   r   r  )r  	dict_attrr  Z
class_dictr   r   r   r    s   


r  c              	   C   s   	 t }t| s t| }t|}|t u st|tju rt| |}n| }t||}|t urC|t urCtt|dt urCtt|dt urC|S |t urI|S |t urO|S | |u rvtt|D ]}tt|t u ruz|j	| W   S  t
yt   Y qYw qY|t ur||S t|)Nr<   r=   )r  r  r   r  r   rE   r  r  r  r	   r  r   )r*   r  r}  Zinstance_resultr  r  Zklass_resultr  r   r   r   getattr_static  s>   


r  GEN_CREATEDGEN_RUNNINGGEN_SUSPENDED
GEN_CLOSEDc                 C   .   	 | 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     
r  c                 C   s8   	 t | std| t| dd }|d ur| jjS i S )Nz{!r} is not a Python generatorr  )r_   r$   r   r   r  r  )r   r  r   r   r   getgeneratorlocals  s   r  CORO_CREATEDCORO_RUNNINGCORO_SUSPENDEDCORO_CLOSEDc                 C   r  r  )
cr_runningr  cr_framer  r  r  r  )	coroutiner   r   r   getcoroutinestate%  r  r  c                 C   s    	 t | dd }|d ur|jS i S )Nr	  )r   r  )r
  r  r   r   r   getcoroutinelocals7  s
   r  
from_bytesc                 C   s8   	 zt | |}W n
 ty   Y d S w t|ts|S d S r1   )r   r   r   _NonUserDefinedCallables)r   Zmethod_namemethr   r   r   "_signature_get_user_defined_methodS  s   
r  c              
   C   s  	 | j }t| }|jpd}|jpi }|r|| }z
| j|i |}W n ty: } z
d|}	t|	|d }~ww d}
| D ]y\}}z|j	| }W n	 t
yU   Y n4w |jtu ra|| qA|jtu r|||v rud}
|j|d||< n||j qA|jtu r|j|d||< |
r|jtu r|| jtd}|||< || qA|jttfv r|| qA|jtu r||j qA| j| dS )Nr   z+partial object {!r} has incorrect argumentsFT)r}  r   rz  )rz  r   r)   r  keywordsbind_partialr$   r   r%   	argumentsr  r   r|  r   r~  replacerw   r  move_to_endr  r  r{  )wrapped_sigr'   
extra_argsZ
old_params
new_paramsZpartial_argsZpartial_keywordsZbar  r  Ztransform_to_kwonly
param_namer  Z	arg_valueZ	new_paramr   r   r   _signature_get_partialc  sV   









r  c                 C   sn   	 t | j }|r|d jttfv rtd|d j}|ttfv r)|dd  }n|t	ur1td| j
|dS )Nr   zinvalid method signaturer   zinvalid argument typer  )r   rz  r{  r   r  r  r%   r~  r|  r  r  )r  paramsr   r   r   r   _signature_bound_method  s   
r  c                 C   s(   	 t | pt| pt| tp| ttfv S r1   )rn   rB   r   r  r   r3   rV   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oNt|toN|d u p<t|toN|d u pEt|t	oNt|t	pN|d u S )NFr   rQ   __defaults____kwdefaults__r   )
r#   r7   r   _voidr   r   rk   r   r   r    )r*   rw   r  rn  r  r  r   r   r   rO     s"   rO   c                 C   s>   	 |  d}|dkr|  d}|  d}|  d}| d| S )N,r   r>  :r  r(  )find)r  r  Zcposr   r   r   _signature_get_bound_param  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 ]O}|j	|j
}}||kr_|dkrT|rMd}nd}|
d7 }
q7|d	kr_d}|
d }q7||krj|d
krj|
}q7|rzd}||krv|dksz|	d |	| |dkr|	d q7d|}|||fS )Nc                 S   s   g | ]}| d qS )ascii)encode)r   lr   r   r   r     s    z6_signature_strip_non_python_syntax.<locals>.<listcomp>r   Fr   r#  Tr   /$r>  r   r  )r   rH  rI  r?  r   rE  OP
ERRORTOKENnextr   stringr   )	signatureself_parameterlast_positional_onlyr   r   Ztoken_streamZdelayed_commaZskip_next_commar  r   Zcurrent_parameterr-  r.  tr   r0  clean_signaturer   r   r   "_signature_strip_non_python_syntax  sT   




r6  Tc              	      sT  	 dd l | j t|\}}}d| d }z|}W n ty'   d }Y nw t|js5td||j	d }	g  j
t d }i t|dd }
|
rZtj|
d }|rZ|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r 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r#t|dd }|d u}t$|}|r|s|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 ur	td| jS )Nz'Annotations are not currently supported)r  r%   r  )r  )r  r   r   
parse_names  s   
z&_signature_fromstr.<locals>.parse_namec                    sp   zt | }W n ty"   zt | }W n
 ty   t w Y nw t|tttttt	d fr5 
|S t r1   )r   	NameErrorRuntimeErrorr   r   intfloatbytesrP   r   ZConstant)r   r   )r  module_dictsys_module_dictr   r   
wrap_valuey  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                    sf   g }|}t | jr||j |j}t | js
t | js"t ||j dt	|}|S )Nr   )
r   r   r   r  r   Namer9  r   r   reversed)r   r  ar  r   r  r?  r   r   visit_Attribute  s   z<_signature_fromstr.<locals>.RewriteSymbolics.visit_Attributec                    s   t |j js
t |jS r1   )r   ctxZLoadr%   r   r  rC  r   r   
visit_Name  s   
z7_signature_fromstr.<locals>.RewriteSymbolics.visit_NameN)r   r   r   rD  rF  r   rC  r   r   RewriteSymbolics  s    rG  c                    s   | }|u r
d S |r7|t ur7z |}|}W n ty(   }Y nw |u r/d S |ur5|n|} ||d d S Nr}  r  )_emptyr  Zliteral_evalr%   r   )Z	name_nodeZdefault_noder}  rw   o)	ParameterrG  r  ry  invalidr   rz  r7  r   r   p  s   z_signature_fromstr.<locals>.p)	fillvaluer   r  rx  )'r  _parameter_clsr6  r  SyntaxErrorr   ZModuler%   r   bodyry  r3   r   r   r   r
   r	   r   ZNodeTransformerrA  r  rn  	itertoolszip_longestPOSITIONAL_ONLYPOSITIONAL_OR_KEYWORDr  r]  varargVAR_POSITIONALKEYWORD_ONLYr  rb  kw_defaultsr  VAR_KEYWORDr4   r   r  )r   r*   r   rs  r5  r2  r3  Zprogramr-   rS   r,   rN  r  rn  rH  r   rw   r}  Z_selfZself_isboundZself_ismoduler   )rL  rG  r  ry  rM  r   r=  rz  r7  r>  r?  r   _signature_fromstrM  st   



r]  c                 C   sD   	 t |std|t|dd }|std|t| |||S )Nz%{!r} is not a Python builtin function__text_signature__z#no signature found for builtin {!r})r  r$   r   r   r%   r]  )r   r(   rs  r   r   r   r   _signature_from_builtin  s   r_  c              	   C   sH  	 d}t |st|rd}ntd|t|dd }|r$t| |||S | j}|j}	|	j}
|	j	}|	j
}|d |
 }|	j}||
|
|  }t||||d}|j}|j}|rYt|}nd}g }|
| }|}|d | D ]}|rotnt}||t}|||||d |r|d8 }qit||d  D ]#\}}|rtnt}||t}||||||| d	 |r|d8 }q|	jt@ r||
|  }||t}||||td |D ]}t}|d ur||t}||t}||||t|d	 q|	jt@ r|
| }|	jt@ r|d7 }|| }||t}||||td | ||d
t|dS )NFTr  r^  r   r   )r  r   r   )r  r   r}  ru  rx  __validate_parameters__)r?   rO   r$   r   r   r]  rQ  rQ   r[  rZ  co_posonlyargcountr\  r/   r   r!  r   r|  r~  r
   rJ  r   r  rR   r^  r  r  r_  r  )r   r(   rs  r   r   r   Zis_duck_functionr   rL  Z	func_codeZ	pos_countZ	arg_namesZposonly_countr  Zkeyword_only_countZkeyword_onlyr  rn  r  Zpos_default_countrz  Znon_default_countZposonly_leftrw   r   r  offsetr}  r  r   r   r   _signature_from_function  s   








rd  )rr  rs  r   r   r   c             
   C   s~  	 t jt||||||d}t| std| t| tjr+|| j	}|r)t
|S |S |r?t| dd d} t| tjr?|| S z| j}W n	 tyM   Y nw |d ur`t|ts^td||S z| j}	W n	 tyn   Y n5w t|	t jr||	j}
t|
|	d}t|
j d }|jtju r|S t|j }|f| }|j|d	S t| st| rt|| ||||d
S t| rt|| |dS t| t jr|| j}
t|
| S d }t| trjt t| d}|d ur||}n5d }t | d}t | d}d| j!v r|}nd| j!v r|}n|d ur|}n|d ur|}|d ur||}|d u ri| j"d d D ]}z|j#}W n ty;   Y q)w |rGt$|||  S q)t| j"vri| j%t&j%u rb| j't&j'u rb|(t&S t)d| n0t| t*st t| d}|d urz||}W n t)y } z
d| }t)||d }~ww |d ur|rt
|S |S t| tj+rd| }t)|t)d| )N)rr  rs  r   r   rt  r   z{!r} is not a callable objectc                 S   r   )N__signature__r   r   r   r   r   rz   i	  s   
 z*_signature_from_callable.<locals>.<lambda>r   z1unexpected object {!r} in __signature__ attributer1   r   r  )rs  r   r   r   )rs  __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'   rv  r#   r$   r   r   r   r9   rM   r  r.   re  r   rw  _partialmethodpartialmethodr(   r  r   rz  r{  r   rL  rY  r  r?   rO   rd  r  r_  r   r  r	   r   r^  r]  r
  r3   rg  from_callabler%   r  rm   )r*   rr  rs  r   r   r   rt  Z_get_signature_ofr  ri  r  Zfirst_wrapped_paramZ
sig_paramsr  callZfactory_methodnewZinitrx   Ztext_sigr  r  r   r   r   rv  F	  s   






















rv  c                   @   r  )r"  Nr  r   r   r   r   r"  
  r  r"  c                   @   r  )rJ  Nr  r   r   r   r   rJ  
  r  rJ  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      | j S r1   )_name_r8  r   r   r   __str__
  s   z_ParameterKind.__str__c                 C   s   t |  S r1   )_PARAM_NAME_MAPPINGr8  r   r   r   description
  s   z_ParameterKind.descriptionN)r   r   r   rV  rW  rY  rZ  r\  rr  r   rt  r   r   r   r   rm  
  s    rm  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 )rL  )_name_kind_default_annotationrI  c                C   s  zt || _W n ty   td|dw |tur/| jttfv r/d}|| jj}t||| _|| _	|tu r=tdt
|tsNdt|j}t||d dkrz|dd   rz| jtkrnd	}|| jj}t|t| _d
|dd  }| st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)rm  rv  r%   rJ  r  r  r   rt  rw  rx  r   r   r   r   r$   isdigitr~  r|  isidentifierru  )r   rw   r   r}  r  r  r   r   r   r
  I
  s8   


zParameter.__init__c                 C   s    t | | j| jf| j| jdfS )Nrw  rx  )r   ru  rv  rw  rx  r8  r   r   r   
__reduce__q
  s   
zParameter.__reduce__c                 C      |d | _ |d | _d S )Nrw  rx  r{  r   stater   r   r   __setstate__w
     
zParameter.__setstate__c                 C   rp  r1   )ru  r8  r   r   r   rw   {
     zParameter.namec                 C   rp  r1   )rw  r8  r   r   r   r}  
  r  zParameter.defaultc                 C   rp  r1   )rx  r8  r   r   r   r  
  r  zParameter.annotationc                 C   rp  r1   )rv  r8  r   r   r   r   
  r  zParameter.kind)rw   r   r  r}  c                C   sN   	 |t u r| j}|t u r| j}|t u r| j}|t u r| j}t| ||||dS rH  )r"  ru  rv  rx  rw  r   )r   rw   r   r  r}  r   r   r   r  
  s   zParameter.replacec                 C   s   | j }| j}| jturd|t| j}| jtur1| jtur(d|t| j}n	d|t| j}|tkr;d| }|S |t	krCd| }|S )Nz{}: {}z{} = {}z{}={}r  r  )
r   ru  rx  rJ  r   r  rw  r  r  r  )r   r   	formattedr   r   r   rr  
  s    


zParameter.__str__c                 C      d | jj| S )Nz	<{} "{}">r   r   r   r8  r   r   r   __repr__
  r  zParameter.__repr__c                 C   s   t | j| j| j| jfS r1   )hashrw   r   r  r}  r8  r   r   r   __hash__
  s   zParameter.__hash__c                 C   sJ   | |u rdS t |tstS | j|jko$| j|jko$| j|jko$| j|jkS NT)r   rL  NotImplementedru  rv  rw  rx  r   otherr   r   r   __eq__
  s   



zParameter.__eq__N)r   r   r   r   r|  rV  r~  rW  r  rY  r  rZ  r  r\  rJ  ry  r
  r|  r  r   rw   r}  r  r   r"  r  rr  r  r  r  r   r   r   r   rL  )
  s6    (



rL  c                   @   sf   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 r1   )r  r  )r   r1  r  r   r   r   r
  
  r  zBoundArguments.__init__c                 C   rp  r1   )r  r8  r   r   r   r1  
  r  zBoundArguments.signaturec              	   C   s   g }| j j D ]5\}}|jttfv r t|S z| j| }W n ty,   Y  t|S w |jtkr8|	| q|
| qt|S r1   )r  rz  r)   r   r  r  r  r  r  extendr   r   )r   r  r  r  r  r   r   r   r  
  s   	
zBoundArguments.argsc              	   C   s   i }d}| j j D ];\}}|s"|jttfv rd}n|| jvr"d}q
|s%q
z| j| }W n	 ty5   Y q
w |jtkrA|| q
|||< q
|S r  )	r  rz  r)   r   r  r  r  r  update)r   kwargsZkwargs_startedr  r  r  r   r   r   r  
  s(   


zBoundArguments.kwargsc              	   C   s   	 | j }g }| jj D ]:\}}z|||| f W q tyF   |jtur+|j}n|jt	u r3d}n
|jt
u r;i }nY q|||f Y qw t|| _ d S )Nr   )r  r  rz  r)   r   r  r}  rJ  r   r  r  r    )r   r  Znew_argumentsrw   r  valr   r   r   apply_defaults  s"   


zBoundArguments.apply_defaultsc                 C   s2   | |u rdS t |tstS | j|jko| j|jkS r  )r   r  r  r1  r  r  r   r   r   r  0  s   

zBoundArguments.__eq__c                 C   r}  )Nr  r  r  r  r~  r   r   r   r  8  r  zBoundArguments.__setstate__c                 C   s   | j | jdS )Nr  r  r8  r   r   r   __getstate__<     zBoundArguments.__getstate__c                 C   s@   g }| j  D ]\}}|d|| qd| jjd|S )Nz{}={!r}z	<{} ({})>r  )r  r)   r   r   r   r   r   )r   r  r  r   r   r   r   r  ?  s   zBoundArguments.__repr__N)r   r   r   r   r
  r   r1  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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 ),rw  )_return_annotation_parametersNTr`  c                C   s   	 |d u r	t  }n_|r_t  }t}d}|D ]I}|j}|j}	||k r.d}
|
|j|j}
t|
||kr6d}|}|ttfv rL|jt	u rJ|rId}
t|
nd}|	|v rYd|	}
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 r1   r  r   r  r   r   r   r     r   z%Signature.__init__.<locals>.<genexpr>)r   r|  r   rw   r   rt  r%   r~  r}  rJ  r   MappingProxyTyper  r  )r   rz  rx  ra  r  Ztop_kindZkind_defaultsr  r   rw   r  r   r   r   r
  d  sF   
	

#
zSignature.__init__c                 C      	 t jdtdd t| |S )Nz_inspect.Signature.from_function() is deprecated since Python 3.5, use Signature.from_callable()r(  rh  )rj  rk  rl  rd  r   r(   r   r   r   from_function  
   
zSignature.from_functionc                 C   r  )Nz^inspect.Signature.from_builtin() is deprecated since Python 3.5, use Signature.from_callable()r(  rh  )rj  rk  rl  r_  r  r   r   r   from_builtin  r  zSignature.from_builtinFfollow_wrappedr   r   r   c                C   s   	 t || ||||dS )N)rt  rr  r   r   r   )rv  )r   r*   r  r   r   r   r   r   r   rj    s
   zSignature.from_callablec                 C   rp  r1   )r  r8  r   r   r   rz    r  zSignature.parametersc                 C   rp  r1   r  r8  r   r   r   rx    r  zSignature.return_annotation)rz  rx  c                C   s2   	 |t u r
| j }|t u r| j}t| ||dS )NrP  )r"  rz  r{  r  r   )r   rz  rx  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 r1   )r   r  r  r   r   r   r     s    
z(Signature._hash_basis.<locals>.<genexpr>c                 S   s   i | ]}|j tkr|j|qS r   )r   r  rw   r  r   r   r   r     s    
z)Signature._hash_basis.<locals>.<dictcomp>)r   rz  r{  rx  )r   r  
kwo_paramsr   r   r   _hash_basis  s   zSignature._hash_basisc                 C   s(   |   \}}}t| }t|||fS r1   )r  	frozensetr{  r  )r   r  r  rx  r   r   r   r    s   zSignature.__hash__c                 C   s*   | |u rdS t |tstS |  | kS r  )r   rw  r  r  r  r   r   r   r    s
   
zSignature.__eq__r'   c                C   s~  	 i }t | j }d}t |}	 zt|}W n` tyw   zt|}	W n
 ty.   Y Y nw |	jtkr6Y n|	j|v rS|	jtkrNd}
|
j	|	jd}
t
|
d |	f}Y ns|	jtks]|	jturb|	f}Y nd|ri|	f}Y n]d}
|
j	|	jd}
t
|
d w zt|}	W n ty   t
dd w |	jttfv rt
dd |	jtkr|g}|| t|||	j< n|	j|v r|	jtkrt
dj	|	jdd |||	j< qd }t||D ]P}	|	jtkr|	}q|	jtkrq|	j}z||}W n" ty
   |s|	jtkr|	jtu rt
dj	|dd Y qw |	jtkrt
dj	|	jd|||< q|r9|d ur-|||j< nt
dj	tt |d| | |S )	Nr   TzA{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})rH  rz  r{  r/  StopIterationr   r  rw   r|  r   r$   r  r}  rJ  r  r  r   rT  chainr   r  _bound_arguments_cls)r   r  r  r'   r  rz  Zparameters_exZarg_valsZarg_valr  r  r{  Zkwargs_paramr  r   r   r   _bind  s   






(



J




zSignature._bindc                O   s   	 |  ||S r1   r  r   r  r  r   r   r   bindi  rG   zSignature.bindc                O   s   	 | j ||ddS )NTr  r  r  r   r   r   r  p  s   zSignature.bind_partialc                 C   s    t | t| j fd| jifS Nr  )r   r   r  r{  r  r8  r   r   r   r|  w  s   zSignature.__reduce__c                 C   s   |d | _ d S r  r  r~  r   r   r   r  |  r  zSignature.__setstate__c                 C   r  )Nz<{} {}>r  r8  r   r   r   r    r  zSignature.__repr__c           	      C   s   g }d}d}| j  D ]2}t|}|j}|tkrd}n	|r$|d d}|tkr+d}n|tkr8|r8|d d}|| q|rE|d dd	|}| j
tur^t| j
}|d|7 }|S )NFTr*  r  z({})r  z -> {})rz  r{  r   r   r|  r   r  r  r   r   rx  rJ  r  )	r   r   Zrender_pos_only_separatorZrender_kw_only_separatorr  r  r   ZrenderedZannor   r   r   rr    s0   




zSignature.__str__r1   )r   r   r   r   rL  rQ  r  r  rJ  ry  r
  r   r  r  rj  r   rz  rx  r"  r  r  r  r  r  r  r  r|  r  r  rr  r   r   r   r   rw  F  s@    6



	 rw  r  c                C   s   	 t j| ||||dS )Nr  )rw  rj  )r*   r  r   r   r   r   r   r   r1    s   r1  c               
   C   s  	 dd l } dd l}|  }|jddd |jddddd	 | }|j}|d
\}}}z	|| }}	W n( ty] }
 zd	|t
|
j|
}t|tjd td W Y d }
~
nd }
~
ww |rq|d}|	}|D ]}t||}qi|	jtjv rtdtjd td |jrtd	| td	t|	 td	|	j ||	u rtd	t|	j t|	drtd	|	j nzt|\}}W n	 ty   Y nw td	| td d S tt| d S )Nr   r3   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_argsr3   	partitionimport_moduler   r   r   r   printr   stderrexitr   r   builtin_module_namesZdetailsr   
__cached__r  r   r   r  r'  rP  )r  r   parserr  targetZmod_nameZ	has_attrsZattrsr*   r-   r   r  partspart__r  r   r   r   _main  sf   


r  r   r1   )F)r   )r   )T)TNNF)
__author__rd   r  discollections.abcrc   enumimportlib.machineryr   rT  r   r   r  r   r?  rE  r   rj  r&   r   operatorr   r   r   r   Zmod_dictZCOMPILER_FLAG_NAMESr)   r   r   rs   r/   r4   r7   r:   rB   rD   r   rF   rK   r?   rU   rW   rY   rZ   r\   r_   ra   rf   rh   rj   rl   rn   ro   ry   r   r   r   r}   r.   r   r   r   r   r   r   r   r   r   r   r   r   r   r  ZNodeVisitorr  r'  r-  r.  r0  rL  rO  rP  rQ  rX  rY  rf  rg  rp  rq  rm  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  _fieldsr  r  r  r  r  r  r3   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   rf  Z_WrapperDescriptorallZ_MethodWrapperr:  r	   Z_ClassMethodWrapperrm   r  r  r  r  r  rO   r&  r6  r]  r_  rd  rv  r"  rJ  IntEnumrm  rV  r|  rW  r~  rY  r  rZ  r  r\  r  rs  rL  r  rw  r1  r  r   r   r   r   r   <module>   s    t	





	

,t$
>
	
/D->



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


;

<
5
 



		0


L
H 

` ?	    l
:
