o
    )Ti                     @   sh  U 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
 d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZmZmZmZ d
dlmZmZmZmZmZm Z m!Z! d
dl"m#Z#m$Z$m%Z%m&Z& d
dl'm(Z( d
dl)m*Z*m+Z+m,Z, d
dl-m.Z.m/Z/m0Z0m1Z1m2Z2 ej3G dd dZ4e5e4 Z6dd ej7j8D Z9ej:Z;e j<e j=fZ>e?e@e jA df eBd< dZCddhiZDG dd deEZFG dd dZGG dd deGZHdeeI fd d!ZJdeKfd"d#ZLdeKfd$d%ZMdeKfd&d'ZNdeKfd(d)ZOdeKfd*d+ZPd,edeKfd-d.ZQd/d0 ZRd1d2 ZSd3d4 ZTdeKfd5d6ZUd7d8 ZVdeKfd9d:ZWe XeSd;ZYd<d= ZZd>d? Z[deKfd@dAZ\e j]d,iZ^e?e^Z_dBdC Z`dDdE Zade5eI fdFdGZbdeKfdHdIZcdeKfdJdKZddeKfdLdMZedNdO ZfdPdQ ZgdRdS ZhdTdU ZiddVeej fdWdXZkdYdZ Zld[d\ Zmd]e6ddfd^d_Znd]e6d`eodeofdadbZpdceeqeIef  d]e6ddfdddeZrdfdg dhD Zsdie4deKfdjdkZtd]e6de?e6e6f fdldmZud]e6dne6doe6de6fdpdqZvdre5e6 de6fdsdtZwdudv ZxedwdxdyZyeeBdw< e	dzd{ Zzd|d} Z{	dd~eee@f deeeIef  fddZ|G dd dee j}Z~dd Zdd Zdd Zdd ZdeKfddZdeKfddZd~eee@f deeI dejdee6 fddZd~eee@f deeI dejdee6 fddZd~eee@f deeI dejdee6 fddZd~eee@f deeI dejde6fddZ		dd~eee@f deeI deeKeIeqejf de6fddZdS )    N)defaultdict)contextmanagersuppress)
ContextVardeepcopy)partial)import_module)
MethodType)AnyCallableOptionalUnion   )LoggerPropertyget_generic_originget_unaliased_typeis_generic_classis_subclassis_unpack_typehintparse_logger)get_annotated_base_typeis_annotatedis_pydantic_model
parse_docs)evaluate_postponed_annotations)get_arg_typeget_stub_typesget_stubs_resolver)ClassFromFunctionBaseget_import_pathget_typehint_originiter_to_set_struniquec                   @   s   e Zd ZU eed< eed< ejZeed< dZ	e
ej ed< dZe
e ed< dZe
eeeef  ed< dZe
eeef  ed< dZe
eeef  ed	< dS )
	ParamDataname
annotationdefaultNkinddoc	componentparentorigin)__name__
__module____qualname__str__annotations__r   inspect_emptyr'   r(   r   _ParameterKindr)   r*   r   r   typetupler+   r,    r7   r7   U/home/ubuntu/.local/lib/python3.10/site-packages/jsonargparse/_parameter_resolvers.pyr$   %   s   
 r$   c                 C   s   g | ]}|d d qS )r   Nr7   ).0sr7   r7   r8   
<listcomp>2       r;   .ast_assign_typez**.pop|get():z&transformers.BertModel.from_pretrainedconfig_file_namec                   @   s   e Zd ZdZdS )SourceNotAvailablez@Raised when the source code for some component is not available.N)r-   r.   r/   __doc__r7   r7   r7   r8   r?   <   s    r?   c                   @   s6   e Zd ZejfdededdfddZdefddZdS )	UnknownDefaultresolverdatareturnNc                 C   s   || _ || _d S N)rB   rC   selfrB   rC   r7   r7   r8   __init__A   s   
zUnknownDefault.__init__c                 C   s@   t | jdd d| j d}| jtjkr| d| j }|S )NDefault <> )r5   r-   replacerB   rC   r2   r3   )rG   valuer7   r7   r8   __repr__E   s    zUnknownDefault.__repr__)	r-   r.   r/   r2   r3   r0   r   rH   rP   r7   r7   r7   r8   rA   @   s    rA   c                       s*   e Zd Zdededdf fddZ  ZS )ConditionalDefaultrB   rC   rD   Nc                    s   t  |t|dd d S )Nz, )sep)superrH   r"   rF   	__class__r7   r8   rH   M      zConditionalDefault.__init__)r-   r.   r/   r0   r   rH   __classcell__r7   r7   rT   r8   rQ   L   s    "rQ   rD   c                    s   ddl m}m} t| |v r|| dd} t| tr4 d u s't| t ks'J t fddt| D S  r@t	  d| j
 S t	| S )Nr   )get_subclass_typessequence_origin_typesT)
also_listsc                 3   s*    | ]\}}t | r | nd V  qd S rE   )get_parameter_origins)r9   ncr+   r7   r8   	<genexpr>X   s   ( z(get_parameter_origins.<locals>.<genexpr>.)
_typehintsrX   rY   r!   
isinstancer6   lenr"   	enumerater    r-   )r*   r+   rX   rY   r7   r^   r8   r[   Q   s   
r[   c                 C   
   t | tS rE   )rb   staticmethodattrr7   r7   r8   is_staticmethod^      
ri   c                 C   s    t | s| jjdkot|  S )Ncython_function_or_method)r2   
isfunctionrU   r-   ri   rg   r7   r7   r8   	is_methodb   s   rm   c                 C   re   rE   )rb   propertyrg   r7   r7   r8   is_propertyh   rj   ro   c                 C   s   t | pt| S rE   )rm   ro   rg   r7   r7   r8   is_method_or_propertyl      rp   c                 C   sD   | r t t tt| |jtW  d    S 1 sw   Y  dS NF)r   AttributeErrorrb   r2   getattr_staticr-   classmethod)r+   r*   r7   r7   r8   is_classmethodp   s
   
 rv   rO   c                 C   s   t | ot| dddkS )Nr-   rJ   z<lambda>)callablegetattrrO   r7   r7   r8   	is_lambdaw   s   rz   c                 C   s   t tdtj| S )Nunparse)rx   astdumpnoder7   r7   r8   ast_str{      r   c                 C   s   t j| t  dS )Nidctx)r|   NameLoadr%   r7   r7   r8   ast_variable_load   r   r   c                 C   s"   t jt j| t  d|t  dS )Nr   )rO   rh   r   )r|   	Attributer   r   )	containerr%   r7   r7   r8   ast_attribute_load   s   "r   c                 C   s    t | tot| jt|kS rE   )rb   r=   r|   r}   rO   )r   rO   r7   r7   r8   ast_is_assign_with_value   s    r   c                 C   s   t | tjr	| jS | jgS rE   )rb   r|   Assigntargetstargetr~   r7   r7   r8   ast_get_assign_targets   rV   r   c                 C   s   t | tjot | jtjS rE   )rb   r|   UnaryOpopNotr~   r7   r7   r8   
ast_is_not   rV   r   dictc                 C   s8   t | tot | jtjpt | jtjot| jjtkS rE   )	rb   r=   rO   r|   DictCallr}   funcdict_astr~   r7   r7   r8   ast_is_dict_assign   s   
,r   c                 C   sP   t | r&t| jdd r&t|}dd | jjD D ]}t||kr% dS qdS )Nkeywordsc                 S   s   g | ]}|j qS r7   ry   )r9   kr7   r7   r8   r;          z1ast_is_dict_assign_with_value.<locals>.<listcomp>TF)r   rx   rO   r|   r}   r   )r   rO   
value_dumpkeywordr7   r7   r8   ast_is_dict_assign_with_value   s   
r   c                 C   sJ   dD ] }t | |D ]}tt |dd tjr!t|j|kr!  dS q	qdS )N)argsr   rO   TF)rx   rb   r|   ASTr}   rO   )r   r   argtypeargr7   r7   r8   ast_is_call_with_value   s   $r   c                 C   re   rE   )rb   ast_constant_typesr~   r7   r7   r8   ast_is_constant   rj   r   c                 C   s   t | sJ t| t| j S rE   )r   rx   ast_constant_attrrU   r~   r7   r7   r8   ast_get_constant_value   s   r   c                 C   sT   g }t | tjr|| j | j} t | tjst | tjr#|| j |d d d S )N)rb   r|   r   appendrh   rO   r   r   )r   namesr7   r7   r8   ast_get_name_and_attrs   s   r   c                 C   sN   t | jtjo&|t| jjko&| jjdv o&t| jdko&t t	| jd t
S )N>   getpop   r   )rb   r   r|   r   r}   rO   rh   rc   r   r   r0   )r   r   r7   r7   r8   ast_is_kwargs_pop_or_get   s   
r   c                 C   sL   t | tjo%t | jtjo%t | jjtjo%t | jjjtjo%| jjjjdkS )NrS   )rb   r|   r   r   r   rO   r   r   r~   r7   r7   r8   ast_is_super_call   s   r   c           
      C   s   d}| j jj}|s| j jjsd}nU|rft|dkrftdd |D rf||d jkrf| j jjsft \}}t	
|| }t||d  D ]"\}}	|d j|	jkre|	t||	jd u ret||| f d} nqC|sq|dt|   |S )	NFTr   c                 s   s    | ]	}t |tjV  qd S rE   )rb   r|   r   r9   ar7   r7   r8   r_          z.ast_is_supported_super_call.<locals>.<genexpr>r   r   zunsupported super parameters: )r   rO   r   r   rc   allr   current_mror   r2   	getmodulerd   r-   rx   setr   )
r   	self_name	log_debug	supportedr   classesidxmoduleoffsetclsr7   r7   r8   ast_is_supported_super_call   s.   
"r   c                 C   sP   t | tr	t| ng D ]}t |tjr%t |jtjr%|jj|kr%|j  S qdS rr   )	rb   r=   r   r|   r   rO   r   r   rh   )r   r   r   r7   r7   r8   ast_is_attr_assign   s
   &
r   c                 C   sL   t |}d }| jD ]}tt|dd t jr#t |j|kr#|} |S q
|S )NrO   )r|   r}   r   rb   rx   r   rO   )r   rO   r   kwargr   r7   r7   r8   ast_get_call_kwarg_with_value   s   

$ r   c                 C   s   dd t | jD S )Nc                 S   s    g | ]\}}t |tjs|qS r7   )rb   r|   Starred)r9   r\   r   r7   r7   r8   r;     s     z3ast_get_call_positional_indexes.<locals>.<listcomp>)rd   r   r~   r7   r7   r8   ast_get_call_positional_indexes  s   r   c                 C   s   dd | j D S )Nc                 S      g | ]}|j r|j qS r7   r   )r9   kw_noder7   r7   r8   r;     r<   z.ast_get_call_keyword_names.<locals>.<listcomp>)r   r~   r7   r7   r8   ast_get_call_keyword_names  rq   r   removed_paramsc                    sx   t t|  t t| |} fddt|D }fdd|D }|d ur:t|t|k r:|fdd|D  |S )Nc                    s   g | ]
\}}| vr|qS r7   r7   r9   r\   p)
given_argsr7   r8   r;         z+remove_given_parameters.<locals>.<listcomp>c                       g | ]	}|j  vr|qS r7   r   r9   r   given_kwargsr7   r8   r;         c                 3   s     | ]}|j  v r|j V  qd S rE   r   r   r   r7   r8   r_         z*remove_given_parameters.<locals>.<genexpr>)r   r   r   rd   rc   update)r   paramsr   input_paramsr7   )r   r   r8   remove_given_parameters	  s   r   c                    s   t  fddt| D dS )Nc                 3   s"    | ]\}}|j  kr|V  qd S rE   r(   r   r   r7   r8   r_          z%get_arg_kind_index.<locals>.<genexpr>r   )nextrd   )r   r(   r7   r   r8   get_arg_kind_index  s   r   c           
         s   | }t || r
| j}tt|j }|r|dd  }t|tj	}t|tj
}t| ||}t|D ]\} td| j|| d fddtD ||< q2t|||| t||||}	t|| |||||	fS )Nr   )r)   r+   r*   c                    s   i | ]}|t  |qS r7   rx   r   paramr7   r8   
<dictcomp>'  r<   z8get_signature_parameters_and_indexes.<locals>.<dictcomp>r7   )rv   __func__listr2   	signature
parametersvaluesr   kindsVAR_POSITIONALVAR_KEYWORDr   rd   r$   r   r%   parameter_attributesr   r   replace_generic_type_vars)
r*   r+   loggersignature_sourcer   args_idx
kwargs_idx
doc_paramsnumstubsr7   r   r8   $get_signature_parameters_and_indexes  s*   


r   r   c                    sd   t |r*|jr,t|jdd r.tt|jj|j fdd | D ]} |j|_q!d S d S d S d S )N__parameters__c                    sr   | v r|  S t | dd r7| j}tjdk r)t |dddkr)t td|j |}|t fdd| jD  S | S )N__args__)   
   r.   rJ   typingc                 3   s    | ]} |V  qd S rE   r7   r   )replace_type_varsr7   r8   r_   :  s    zGreplace_generic_type_vars.<locals>.replace_type_vars.<locals>.<genexpr>)	rx   
__origin__sysversion_info
__import__r-   
capitalizer6   r   )r&   r,   r   	type_varsr7   r8   r   3  s   z4replace_generic_type_vars.<locals>.replace_type_vars)r   r   rx   r   r   zipr   r&   )r   r+   r   r7   r   r8   r   /  s   
r   r   c           	      C   s   | | }|j }t|rV| | t|dd}t|dks J d|d j}g }| D ]\}}|t||t	j
t	jjd |j|j|jd q+|t| ksOJ d| | dS |S )	Nr   r7   r   z&Unpack requires a single type argumentr   )r%   r&   r'   r(   r)   r*   r+   r,   z+trailing params should yield a syntax errorr   )r&   r   r   rx   rc   r1   itemsr   r$   r2   r3   r4   KEYWORD_ONLYr*   r+   r,   extend)	r   r   kwargsr&   annotation_argsdict_annotations
new_paramsnmannotr7   r7   r8   unpack_typed_dict_kwargsA  s2   


r  r   c              
   C   s~   | sd S |D ]}|j tjkr|j| v r| |j |_ qdd |D }|  D ]\}}||vr<|t||tdtj	|d q%d S )Nc                 S      h | ]}|j qS r7   r   r   r7   r7   r8   	<setcomp>d  r   z!add_stub_types.<locals>.<setcomp>stubs-resolver)r%   r&   r'   r(   r*   )
r&   r2   r3   r%   r  r   r$   rA   r   r  )r   r   r*   r   known_paramsr%   stubr7   r7   r8   add_stub_types^  s(   r  c                 C   s,   i | ]}t t j|d djtt j|qS )eval)mode)r|   r}   parsebodyr   literal_evalr9   vr7   r7   r8   r   r  s   , r   )z{}z[]r   c                 C   sr   ddl m}m}m} || j}||dd}t|rt| j|p7t| jo7|	|o7t
|dd o7|j|jd ddS )	Nr   )ActionTypeHintget_optional_argrX   Tcallable_returnr   r   F)all_subtypes)ra   r  r  rX   r&   boolrb   r'   rz   is_callable_typehintrx   is_subclass_typehintr   )r   r  r  rX   r&   class_typesr7   r7   r8   "is_param_subclass_instance_defaultu  s   


r#  c                 C   s$   dd | D }dd | D }||fS )Nc                 S   s   g | ]
}|j tjkr|qS r7   )r(   r   POSITIONAL_ONLYr   r7   r7   r8   r;     r   z)split_args_and_kwargs.<locals>.<listcomp>c                 S   s"   g | ]}|j tjtjhv r|qS r7   )r(   r   r  POSITIONAL_OR_KEYWORDr   r7   r7   r8   r;        " r7   )r   r   r  r7   r7   r8   split_args_and_kwargs  s   r'  r   r  c                    s   t | tj}t | tj}|dkr,| d | | | |d d   } |dkr,|t|d 7 }|dkr\dd | d | | |d d   D   fdd|D }| d | | | |d d   } | S )Nr   r   c                 S   r  r7   r   r   r7   r7   r8   r    r   z*replace_args_and_kwargs.<locals>.<setcomp>c                    r   r7   r   r   existing_namesr7   r8   r;     r   z+replace_args_and_kwargs.<locals>.<listcomp>)r   r   r   r   rc   )r   r   r  r   r   r7   r(  r8   replace_args_and_kwargs  s    & r*  params_listc           
      C   s  t | dkr| d D ]}t|jtsd |_q
| d S g }d}tt}| D ]#}|d jp,dts4|d7 }|D ]}|jt	j
krF||j | q6q$| D ]}|d }tdd |D }tdd |D }t ||krzt |dkrzt |dkrzd |_nAtdd |D |_tdd |D |_td	d |D |_t ||k r|d
g7 }td||_t |dkr|rtt| ntj|_dd |D }	|	r|	d nd |_|| qL|S )Nr   r   rJ   c                 s   "    | ]}|j tjur|j V  qd S rE   )r&   r2   r3   r   r7   r7   r8   r_     r   z#group_parameters.<locals>.<genexpr>c                 s   r,  rE   )r'   r2   r3   r   r7   r7   r8   r_     r   c                 s       | ]}|j V  qd S rE   r^   r   r7   r7   r8   r_         c                 s   r-  rE   )r*   r   r7   r7   r8   r_     r.  c                 s   r-  rE   )r,   r   r7   r7   r8   r_     r.  NOT_ACCEPTEDast-resolverc                 S   r   r7   )r)   r   r7   r7   r8   r;     r<   z$group_parameters.<locals>.<listcomp>)rc   rb   r,   r6   r   r   
startswithparam_kwargs_pop_or_getr(   r   r$  r%   r   r   r#   r+   r*   rQ   r'   r   r2   r3   r&   r)   )
r+  r   groupednon_get_pop_countparams_dictr   gparamtypesdefaultsdocsr7   r7   r8   group_parameters  sF   $
r:  c                    sB   t t dd  }|dko  jtjuo t fdd|D  S )Nr   rH   c                 3   s    | ]	} j |j u V  qd S rE   )__new__r9   r]   r   r7   r8   r_     r   z(has_dunder_new_method.<locals>.<genexpr>)r2   getmror   r;  objectany)r   	attr_namer   r7   r=  r8   has_dunder_new_method  s   
rB  r   )NN)r'   c              	   c   sz    d }| r$t  \}}|r|| | ur$dd t| D }t |df}zd V  W |r2t | d S d S |r<t | w w )Nc                 S   s   g | ]}|t ur|qS r7   )r?  r<  r7   r7   r8   r;     r<   zmro_context.<locals>.<listcomp>r   )r   r   r2   r>  r   reset)r+   tokenr   r   r7   r7   r8   mro_context  s   rE  c                    s   t  \}}t||d d  |d dD ]3\}}t|d  ||d d  tg } rGt fdd|D sGt ||f || |d  S qg S )Nr   )startc                 3   s     | ]} t |d u V  qd S rE   r   r<  methodmethod_namer7   r8   r_     r   z%get_mro_parameters.<locals>.<genexpr>r   )r   r   rd   rx   r?  r@  r   )rI  get_parameters_fnr   r   r   r   r   	remainderr7   rG  r8   get_mro_parameters  s   $rM  function_or_classmethod_or_propertyc              
   C   sd  t | tr|dv r| j} t| tr| j}| j} nd }ntt	| r)|d u r)d}n
|r3t|t
s3|j}d  }}|rz
tt	| |}W n tyZ } ztd| d|  |d }~ww t|rit| |}|||fS | }t| |rvt| d}n7t|r}|}n0t|r|j}n(t|trt| |}n|tjurtd|  d| nt| std|  | }|||fS )	N>   NrH   rH   zAttribute 'z' not found in r;  z$Invalid or unsupported input: class=z, method_or_property=zNon-callable input: function=)r   r   wrapped_functionrb   r
   r-   __self__r2   isclassr   r0   rt   rs   ri   rx   rB  rm   ro   fgetru   r?  rH   
ValueErrorrw   )rN  rO  r+   r*   rh   exr7   r7   r8   get_component_and_parent  sN   






rV  c                       s  e Zd Z	d>deeef deeeef  f fddZd?ddZ	d	d
 Z
dd Zdd Zdd Zdd Zdeejejf ddfddZdejddfddZdd Zdd Zdd Zdd Zdeeeee f  fd d!Zd"d# Zd$ee ddfd%d&Zdee fd'd(Zd)efd*d+Z d,d- Z!dee"e"f fd.d/Z#de"fd0d1Z$defd2d3Z%d$e"ddfd4d5Z&d6ed7ej'dee" fd8d9Z(d$e"de"fd:d;Z)de"fd<d=Z*  Z+S )@ParametersVisitorNrN  rO  c                    s*   t  jdi | t||\| _| _}d S )Nr7   )rS   rH   rV  r*   r+   )rG   rN  rO  r  _rT   r7   r8   rH     s   zParametersVisitor.__init__rD   c                 C   s   | j d|  d S )NzAST resolver: )r   debug)rG   messager7   r7   r8   r     s   zParametersVisitor.log_debugc              
   C   s   t | drdS z4tt| j}t|}t|tj	r#t
|jdks%J |jd | _| jr6| jjjd jnd| _W dS  tyS } ztd| j d| |d}~ww )zCParses the component's AST and sets the component and parent nodes.component_nodeNr   r   z!Problems getting source code for z: )hasattrtextwrapdedentr2   	getsourcer*   r|   r  rb   Modulerc   r  r[  r+   r   r   r   	Exceptionr?   )rG   sourcetreerU  r7   r7   r8   parse_source_tree  s   

"z#ParametersVisitor.parse_source_treec                 C   s   d}| j  D ] \}}t||r| || d} nt||r'| || d}q|rPt|rIdd t|D D ]}t |_	|| j
t|< q7d S | | d S d S )NTFc                 S   s   g | ]}t |qS r7   r   )r9   tr7   r7   r8   r;   5      z2ParametersVisitor.visit_Assign.<locals>.<listcomp>)find_valuesr  r   	add_valuer   r   r   r|   r   r   dict_assignsr}   generic_visit)rG   r   do_generic_visitkeyrO   r   r7   r7   r8   visit_Assign)  s$   


zParametersVisitor.visit_Assignc                 C   s   |j d ur| | d S d S rE   )rO   rm  rG   r   r7   r7   r8   visit_AnnAssign;  s   
z!ParametersVisitor.visit_AnnAssignc                 C   s   | j  D ]=\}}t|}t||r7t|jtjr0t|jj}|| j	v r0| 
|| j	|  q| 
|| qt||rB| 
|| q| | d S rE   )rg  r  r|   r}   r   rb   r   r   rO   ri  rh  r   rj  )rG   r   rl  rO   r   r7   r7   r8   
visit_Call?  s   



zParametersVisitor.visit_Callc                 C   s   t |j}|r|jjn|j}|  }t|tjr=|j|v r=t||j }|r)| }|r.|j	n|j
}tjtjdd|g d}| | d S )NTry   )testr  orelse)r   rq  operandget_component_globalsrb   r|   r   r   r  r  rr  IfConstantrj  )rG   r   is_test_not	test_nodecomponent_globals	conditionr  r7   r7   r8   visit_IfM  s   
zParametersVisitor.visit_Ifr   c                 C   s"   |j D ]}|| j|jp|j< qd S rE   )r   import_namesasnamer%   )rG   r   aliasr7   r7   r8   visit_ImportY  s   
zParametersVisitor.visit_Importc                 C   s   |  | d S rE   )r  rn  r7   r7   r8   visit_ImportFrom]  s   z"ParametersVisitor.visit_ImportFromc                 C   s   d }t |tjr6d}t |jtjr|jj}nt |jtjr*t |jjtjr*|jjj}|r6|| jv r6| j| }| j	
|||f d S rr   )rb   r|   r   r   r   r   r   rO   r|  values_foundr   )rG   rl  r   rb  r%   r7   r7   r8   rh  `  s   


zParametersVisitor.add_valuec                 C   s*   || _ g | _i | _i | _| | j | jS rE   )rg  r  ri  r|  visitr[  )rG   r   r7   r7   r8   find_values_usagel  s   z#ParametersVisitor.find_values_usagec                 C   s   t t| jjS rE   )varsr	   r*   r.   rG   r7   r7   r8   rt  t  rq   z'ParametersVisitor.get_component_globalsc              
   C   s   i }t d}|g|_ztt|ddd|| W n& ty> } z| jr4| jjd| dt| d|d W Y d }~nd }~ww |	|S )	NrJ   z<ast>exec)filenamer  zFailed to get 'z' from ''exc_info)
r|   r  r  r  compilera  r   rY  r   r   )rG   r%   rb  aliasesast_execrU  r7   r7   r8   get_component_from_sourcew  s   
"
z+ParametersVisitor.get_component_from_sourcec                 C   s`  d  }}t | j}t|jtjr=t| j| jr#|jj	| j
kr#| j}n{t||jj	r2t||jj	}nl|r<| |jj	|}nat|jtjrt|jjtjr| jrft|jjtt| j
krf| j}|jj}n8d }t||jjj	ryt||jjj	}n|r| |jjj	|}t |r|}|jj}nt||jjrt||jj}|s| dt|  d S ||fS )Nznot supported: )r2   r   r*   rb   r   r|   r   rv   r+   r   r   r\  rx   r  r   rO   r}   r   rh   rR  r   r   )rG   r   rb  rN  rO  r   r   r7   r7   r8   get_node_component  s8   $


z$ParametersVisitor.get_node_componentc                 C   s   d }t |tjrNg }t| j|}t||}|rI|jr%| dt|  n$| 	||}|rIz
t
|d| ji}W n tyH   | d|  Y nw t||}|S )Nz;kwargs attribute given as keyword parameter not supported: r   z2failed to get parameters for call that uses attr: )rb   r|   r   r   r   r   r   r   r   r  get_signature_parametersr   ra  r   )rG   r   rb  rA  r   rO   r   get_param_argsr7   r7   r8   match_call_that_uses_attr  s"   

z+ParametersVisitor.match_call_that_uses_attrr   c                 C   sN  dd |D }|r|    | dd |D }t|t|ks!J ddlm} t||D ]x\}}t|j}|}d}|rF|j}t|j	j
d }| |}	||j	dd	}
|	r[|
r[t|	|
s\q,t|	i d
}|jD ]}|jr{t|jr{t|j|d |j< qf|   |rt|j| dkr| dt|  q,|r|d s|d= ||_q,d S d S )Nc                 S   s   g | ]}t |r|qS r7   )r#  r   r7   r7   r8   r;     r<   zJParametersVisitor.replace_param_default_subclass_specs.<locals>.<listcomp>c                 S   r  r7   r   r   r7   r7   r8   r    r   zIParametersVisitor.replace_param_default_subclass_specs.<locals>.<setcomp>r   )rX   r   Tr  )
class_path	init_argsr  z$unsupported class instance default: )rd  get_default_nodesrc   ra   rX   r  rz   r'   r  r&   r   get_call_class_typer   r    r   r   r   rO   r   clearr   r   r   )rG   r   default_nodesrX   r   default_nodelambda_defaultr   num_positionals
class_typesubclass_typesr'   r   r7   r7   r8   $replace_param_default_subclass_specs  s@   


z6ParametersVisitor.replace_param_default_subclass_specsc                 C   sZ   t t|dd }|r|  |d nd }|dd  D ]}t||d }qt|r+|S d S )Nr   r   r   )r   rx   rt  r   r2   rR  )rG   r   r   r  r%   r7   r7   r8   r    s
   z%ParametersVisitor.get_call_class_typeparam_namesc                    sT   | j j}t|dg |j  d gt t|j  |j } fddt|D }|S )Nposonlyargsc                    s"   g | ]\}} | j v r|qS r7   r   )r9   r\   d	arg_nodesr  r7   r8   r;     r&  z7ParametersVisitor.get_default_nodes.<locals>.<listcomp>)r[  r   rx   rc   r8  rd   )rG   r  r   r  r7   r  r8   r    s
   z#ParametersVisitor.get_default_nodesc                 C   s   t |jd }t|jd rt |jd }n t|jd }|tv r(t|  }ntd}| dt|  t	|t
j|tj||||t| | dS )Nr   r   r0  z$unsupported kwargs pop/get default: )r%   r&   r'   r(   r)   r+   r*   r,   )r   r   r   r|   r}   ast_literalsrA   r   r   r$   r2   r3   r   r  r   r2  get_node_origin)rG   r   r*   r+   r   r%   r'   r7   r7   r8   get_kwargs_pop_or_get_parameter  s$   z1ParametersVisitor.get_kwargs_pop_or_get_parameterc                    s   |    t| jjjdd }t| jjjdd  i }|r t|||<  r(t | < | |}|s3g g fS g }t  o=|  }|oDt	
|} fdd|D D ]\}}t|t	jrt||ro| || j| j| j}	||	g qNt||}
g }|
jr| dt|  n)| jrt|rt|| j| jrt|jjt| j}n| ||}|rt|d| ji}t ||}|r| !|| || qNt|t"r| jot#|| j}|r| $|}|r| !|| || qN| dt|  qNt%|}fdd|D }t&|S )Nr   c                    s"   g | ]\}}}| kr||fqS r7   r7   )r9   r   r  r:   )kwargs_namer7   r8   r;   
  r&  zDParametersVisitor.get_parameters_args_and_kwargs.<locals>.<listcomp>z1kwargs given as keyword parameter not supported: r   zunsupported type of assign: c                    r   r7   r   r   )r   r7   r8   r;   .  r   )'rd  rx   r[  r   varargr   r   r  r   r|   r}   rb   r   r   r  r*   r+   r   r   r   r   r   r   r   r   r   rM  r   rh   r  r   r  r   add_node_originsr=   r   "get_parameters_attr_use_in_membersr:  r'  )rG   	args_namevalues_to_findr  r+  kwargs_valuekwargs_value_dumpr   rb  r   r   r   r  	self_attrr7   )r  r   r8   get_parameters_args_and_kwargs  sl   






z0ParametersVisitor.get_parameters_args_and_kwargsc                    s   t  j|} fddt jD }|D ] } jd usJ t j| jd}|||}|d ur5|  S q d j d| d j  g S )Nc                    s0   g | ]\}}| d stt j|r|qS )__)r1  rp   r2   rt   r+   )r9   r%   rX  r  r7   r8   r;   3  s    zHParametersVisitor.get_parameters_attr_use_in_members.<locals>.<listcomp>rJ  zdid not find use of r`   z in members of )	r   r   r2   
getmembersr+   rW  r   get_parameters_call_attrr   )rG   rA  
attr_valuemember_namesmember_namevisitorr  r7   r  r8   r  1  s   

 z4ParametersVisitor.get_parameters_attr_use_in_membersc                 C   s   t | j| j d|j S )N:)r[   r*   r+   linenorn  r7   r7   r8   r  A  rV   z!ParametersVisitor.get_node_originc                 C   s0   d }|D ]}|j d u r|s| |}||_ qd S rE   )r,   r  )rG   r   r   r,   r   r7   r7   r8   r  D  s   

z"ParametersVisitor.add_node_originsrA  r  c           
      C   sj   |    ||i}| |}g }|r1|D ]\}}}| |||}	|	r,| |	| ||	 qt|}|p4d S rE   )rd  r  r  r  r   r:  )
rG   rA  r  r  r  matchedrX  r   rb  matchr7   r7   r8   r  L  s   

z*ParametersVisitor.get_parameters_call_attrc                    s(   t | j  tv r fdd|D }|S )Nc                    s   g | ]}|j t  vr|qS r7   )r%   ignore_paramsr   import_pathr7   r8   r;   ]  s    z>ParametersVisitor.remove_ignore_parameters.<locals>.<listcomp>)r    r*   r  )rG   r   r7   r  r8   remove_ignore_parametersZ  s   
z*ParametersVisitor.remove_ignore_parametersc                 C   s   | j d u rg S t| j | j| j\}}}}}| | |dkr#t||}|dks+|dkrO|| _t| j |  \}}W d    n1 sDw   Y  t	|||}t
||| j  | |}|S Nr   )r*   r   r+   r   r  r  r   rE  r  r*  r  r  )rG   r   r   r   r   r   r   r  r7   r7   r8   get_parameters`  s"   



z ParametersVisitor.get_parametersrE   )rD   N),r-   r.   r/   r   r   r5   r   r0   rH   r   rd  rm  ro  rp  r{  r|   Import
ImportFromr  r  rh  r  rt  r  r6   r  r  r   r$   r  r  r   r  r  	ParamListr  r  r  r  r   r  r  r  rW   r7   r7   rT   r8   rW    s@    

	!9rW  c                 C   s>   | j }| jr
tj}n| jr|  }| j|| jjp||dS Nr&   r'   r)   )	r'   requiredr2   r3   default_factoryr&   
field_infodescriptionr   fieldr%   r   r'   r7   r7   r8   get_field_data_pydantic1_models  s   r  c                 C   s   ddl m} ddlm} tj}t| j|r,| jj|ur | jj}n | jj|ur+| j }n| jt	j
ur6| j}n
| jt	j
ur@|  }t| jrKt| j}n| j}||||dS )Nr   	FieldInfo)PydanticUndefinedr  )pydantic.fieldsr  pydantic_corer  r2   r3   rb   r'   r  dataclassesMISSINGr   r5   r   r   )r  r%   r   r  r  r'   
field_typer7   r7   r8   "get_field_data_pydantic2_dataclass  s(   


r  c                 C   s@   | j }|  rtj}n| jr|  }|  || jp||dS r  )r'   is_requiredr2   r3   r  rebuild_annotationr  r   r  r7   r7   r8   get_field_data_pydantic2_model  s   r  c                 C   sH   dd l }| j}||ju rtj}n
t||jr| }| j||	|dS )Nr   r  )
attrsr'   NOTHINGr2   r3   rb   Factoryfactoryr5   r   )r  r%   r   r  r'   r7   r7   r8   get_field_data_attrs  s   
r  c                 C   s4   ddl m} t| j|rt| jdd duS | jduS )Nr   r  initF)r  r  rb   r'   rx   r  )r  r  r7   r7   r8   !is_init_field_pydantic2_dataclass  s   
r  c                 C   s
   | j duS rr   )r  )r  r7   r7   r8   is_init_field_attrs  rj   r  r   c              
   C   sX  ddl m}m} |s|s|sd S t| } d  }}|rZt| }|dkr.| j }t}dd }n,|dkr>| j }t	}dd }nt
| rZt| drZt
| }dd |D  }t}t}|sw|rwd	d l}	|	| rwd
d |	| D  }t}t}|r{|s}d S g }
t| d |}|D ]\}}||r|
td|tj| d|||| qt|
| d | |
S )Nr   )attrs_supportpydantic_supportc                 S      dS NTr7   rX  r7   r7   r8   <lambda>      z7get_parameters_from_pydantic_or_attrs.<locals>.<lambda>c                 S   r  r  r7   r  r7   r7   r8   r    r  __pydantic_fields__c                 S      i | ]}|j |qS r7   r   r  r7   r7   r8   r     rf  z9get_parameters_from_pydantic_or_attrs.<locals>.<dictcomp>r   c                 S   r  r7   r   )r9   fr7   r7   r8   r     rf  )r%   r(   r*   r7   )
_optionalsr  r  r   r   
__fields__r  r  model_fieldsr  r  is_dataclassr\  fieldsr  r  r  hasr  r  r   r   r$   r   r  r   )rN  rO  r   r  r  fields_iteratorget_field_datapydantic_modelis_init_fieldr  r   r   r%   r  r7   r7   r8   %get_parameters_from_pydantic_or_attrs  sX   






r  c                 C   s   t | ||d}| S )NrJ  )rW  r  )rN  rO  r   r  r7   r7   r8   get_parameters_from_ast  s   r  c                 C   s   t | |\}}}zt| W d S  ty   Y nw d }t }|||}|rwt||}	||}
|jj	j
j
|jj	j
j }g }t|D ]3\}}|rN|dkrNqCzt|j|
}W n tyb   tj}Y nw |t|j|tdtjj|||	d qC|S )Nr   r  )r%   r&   r'   r(   r*   r+   r,   )rV  r2   r   ra  r   get_component_imported_infor[   get_aliasesinfor|   r   
kwonlyargsrd   r   r&   r3   r   r$   r   rA   r4   r  )rN  rO  r   r*   r+   rX  r   rB   stub_importr,   r  arg_astsr   arg_astr&   r7   r7   r8   get_parameters_from_stubs  sF   



r  rI  c                 C   s   t | |\}}}t|||\}}}}}	|rE|dks|dkrEt| t|t|}
W d    n1 s2w   Y  |
rEt|
\}}t|||}t|g g }t|	|| |S r  )rV  r   rE  rM  get_parameters_by_assumptionsr'  r*  r  )rN  rI  r   r*   r+   r   r   r   rX  r   	subparamsr   r  r7   r7   r8   r   4  s   
r   Tc                 C   s   t | | t|d}d}ttttfD ]/}z|| ||}W n ty: } z|jd|j| |||d W Y d}~nd}~ww |durA nq|pEg S )aT  Get parameters by inspecting ASTs, stubs or by inheritance assumptions.

    In contrast to inspect.signature, it follows the use of *args and **kwargs
    attempting to find all accepted named parameters.

    Args:
        function_or_class: The callable object from which to get the signature
            parameters.
        method_or_property: For classes, the name of the method or property from
            which to get the signature parameters. If not provided it returns
            the parameters for ``__init__``.
        logger: Useful for debugging. Only logs at ``DEBUG`` level.
    r  Nz:%s failed: function_or_class=%s, method_or_property=%s: %sr  )	rV  r   r  r  r  r   ra  rY  r-   )rN  rO  r   r   r  rU  r7   r7   r8   r  H  s2   

	r  rE   r  )r|   r  r2   loggingr   r]  collectionsr   
contextlibr   r   contextvarsr   copyr   	functoolsr   	importlibr	   r7  r
   r   r   r   r   r   _commonr   r   r   r   r   r   r   r  r   r   r   r   _postponed_annotationsr   _stubs_resolverr   r   r   _utilr   r    r!   r"   r#   	dataclassr$   r   r  	Parameter	__slots__r   r4   r   	AnnAssignr   r=   r6   r5   r   r1   r2  r  ra  r?   rA   rQ   r0   r[   r  ri   rm   ro   rp   rv   rz   r   r   r   r   r   r   r}   r   r   r   r   rv  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   intr  r   r  r  r#  r'  r*  r:  rB  r   rE  rM  rV  NodeVisitorrW  r  r  r  r  r  r  Loggerr  r  r  r   r  r7   r7   r7   r8   <module>   s  
 $		"	




"$	


,  f	

8

	

(


