o
    )Ti},                     @   sX  d dl Z d dlZd dl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 ddlmZ ddlmZmZ dd	lmZmZ e
rEd dlZne ZejZd
efddZG dd de jZde jde jfddZG dd de jZ G dd de jZ!da"dd Z#dd Z$d
edej%fddZ&G dd dej'Z(dd  Z)d!d" Z*dee+eef  fd#d$Z,dS )%    N)suppress)deepcopy)import_module)TYPE_CHECKINGAnyOptional   )get_parsing_setting)import_typeshed_clienttypeshed_client_support)NamesVisitorget_arg_typepathc                 C   s6   |  dr| d d } zt| W S  ty   Y d S w )N	.__init__i)endswithr   ModuleNotFoundError)r    r   P/home/ubuntu/.local/lib/python3.10/site-packages/jsonargparse/_stubs_resolver.pyimport_module_or_none   s   

r   c                
   @   sL   e Zd ZdejddfddZdejdedeee	e
e ef f fddZdS )	ImportsVisitornodereturnNc                 C   sn   |j r"| jd |j   }|jr||j t|}d||_d|_ |jD ]}|j|jf| j|j	p3|j< q%d S )N.r   )
levelmodule_pathmoduleappendr   joinnamesnameimports_foundasname)selfr   r   aliasr   r   r   visit_ImportFrom    s   
zImportsVisitor.visit_ImportFromr   c                 C   s"   | d| _i | _| | | jS Nr   )splitr   r    visit)r"   r   r   r   r   r   find+   s   
zImportsVisitor.find)__name__
__module____qualname__ast
ImportFromr$   ASTstrdicttupler   r(   r   r   r   r   r      s    0r   r   r   c                 C   s   t j| jg| j| j| jdS )N)targetsvaluelineno
end_lineno)r,   Assigntargetr3   r4   )r   r   r   r   ast_annassign_to_assign2   s   r8   c                   @   sR   e Zd ZdejddfddZdejddfddZdejde	e
ejf fdd	ZdS )
AssignsVisitorr   r   Nc                 C   s&   |j D ]}t|dr|| j|j< qd S Nid)r2   hasattrassigns_foundr;   )r"   r   r7   r   r   r   visit_Assign<   s
   

zAssignsVisitor.visit_Assignc                 C   s&   t |jdrt|| j|jj< d S d S r:   )r<   r7   r8   r=   r;   r"   r   r   r   r   visit_AnnAssignA   s   zAssignsVisitor.visit_AnnAssignc                 C   s   i | _ | | | j S N)r=   r'   r?   r   r   r   r(   E   s   
zAssignsVisitor.find)r)   r*   r+   r,   r6   r>   	AnnAssignr@   r.   r0   r/   r(   r   r   r   r   r9   ;   s    "r9   c                   @   sb   e Zd ZU eej ed< dejddfddZdejddfddZ	dej
d	edeej fd
dZdS )MethodsVisitormethod_foundr   r   Nc                 C   s$   | j s|j| jkr|| _ d S d S d S rA   )rD   r   method_namer?   r   r   r   visit_FunctionDefN   s   
z MethodsVisitor.visit_FunctionDefc                 C   s   t d}|j|jd _dti}tt$ tt	|ddd|| |d r(g |_
ng |_| | W d    d S 1 s;w   Y  d S )Nz___test___ = 0r   sysz<ast>exec)filenamemode
___test___)r,   parsetestbodyr3   rG   r   	ExceptionrH   compileorelsegeneric_visit)r"   r   test_ast	exec_varsr   r   r   visit_IfR   s   

"zMethodsVisitor.visit_IfrE   c                 C   s   || _ d | _| | | jS rA   )rE   rD   r'   )r"   r   rE   r   r   r   r(   ^   s   
zMethodsVisitor.find)r)   r*   r+   r   r,   FunctionDef__annotations__rF   IfrU   r.   r/   r(   r   r   r   r   rC   K   s
   
 "rC   c                  C   s&   t std} tj| d}t|da t S )Nstubs_resolver_allow_py_files)allow_py_filessearch_context)stubs_resolverr	   tcget_search_contextStubsResolver)rZ   r\   r   r   r   get_stubs_resolverh   s
   
ra   c                 C   sb   t | dr)|| jvr)z	t| d } W n ty   d } Y nw t | dr)|| jvs
| tu r/d S | S )N__dict__r   )r<   rb   inspectgetmro
IndexErrorobject)parentrE   r   r   r   get_mro_method_parentq   s   rh   c                 C   sz   |d u r|  dd\}}tt||d }|d ur3t|}|d us#J |j}t|dddr3|d7 }tt	|
dS )Nr   r   __file__ z__init__.pyr   )rsplitgetattrr   rc   	getmoduler)   r   r^   
ModulePathr1   r&   )r   	componentr   r   r   r   r   r   get_source_modulez   s   
rp   c                       s   e Zd Zd fddZddedeej fddZdeej fdd	Z	d
ejfddZ
defddZdefddZdefddZdejfddZe fddZ  ZS )r`   r   Nc                    s(   t  jdi | i | _i | _i | _d S )Nr   )super__init___module_ast_cache_module_assigns_cache_module_imports_cache)r"   kwargs	__class__r   r   rr      s   
zStubsResolver.__init__r   c                 C   sJ   |  |}d }t|tjr|}|S t|tjr#t||}tj||d}|S )Nsource_moduleinfo)get_fully_qualified_name
isinstancer^   ImportedInfoNameInforp   )r"   r   ro   resolvedimported_inforz   r   r   r   get_imported_info   s   

zStubsResolver.get_imported_infoc                 C   s   |st |rt|j}t||j}|s!| |j d|j |S t||j}|o5| |j d|j |}|r_t	|j
jtjr_t |j
j|j}|sNJ tj|jd|d}tj|j|d}|S )Nr   F)r   is_exportedr,   ry   )rc   ismethodtype__self__rl   r)   r   r*   rh   r}   r{   r,   r.   rC   r(   r^   r   r+   r~   rz   )r"   ro   rg   stub_import
method_ast	name_infor   r   r   get_component_imported_info   s   
z)StubsResolver.get_component_imported_infor   c                 C   s   i }|  || |S rA   )add_import_aliases)r"   r   aliasesr   r   r   get_aliases   s   zStubsResolver.get_aliasesr   c                 C   s*   || j vrtj|| jd| j |< | j | S )Nr[   )rs   r^   get_stub_astctx)r"   r   r   r   r   get_module_stub_ast   s   

z!StubsResolver.get_module_stub_astc                 C   s0   || j vr| |}t || j |< | j | S rA   )rt   r   r9   r(   r"   r   
module_astr   r   r   get_module_stub_assigns   s   


z%StubsResolver.get_module_stub_assignsc                 C   s2   || j vr| |}t ||| j |< | j | S rA   )ru   r   r   r(   r   r   r   r   get_module_stub_imports   s   


z%StubsResolver.get_module_stub_importsr   c                 C   sr   d |j}t|}d }t|jjtjtjfr|jjj}nt|jjtj	r)|jj}|r3| 
|||| ||jjfS r%   )r   rz   r   r}   r{   r,   r6   rB   r3   r.   add_module_aliases)r"   r   r   r   r   stub_astr   r   r   r      s   z StubsResolver.add_import_aliasesc                 C   sz  |rt  |ng }|D ]}t|||s||v rq|}|tv r&d}t| }	ndt||r1t||}	nY|| |v rL| || }	| j||||	j|hd n>|| 	|v r| 	|| \}
}t
|
}t||rm|
}t||}	n| |
 d| }| ||\}}	n
t|d|d}	t|||rqt||||	std|d|| d  d	|| d
  d|	 d	| d}	||	f||< qd S )N__builtins__)skipr   z from z  not in builtins, module or stubznon-unique alias z: r   z (r   z) vs ))r   r(   alias_already_addedr   r<   rl   r   r   r3   r   r   r   r   NotImplementedErroralias_is_unique)r"   r   r   r   r   r   r   r   sourcer3   imported_module_pathimported_nameimported_moduler   r   r   r   r      s<   


2z StubsResolver.add_module_aliases)r   NrA   )r)   r*   r+   rr   r/   r   r^   r~   r   r   r   r   r   r   r   setr   __classcell__r   r   rw   r   r`      s    
r`   c                 C   s   || v o| | d d|hv S )Nr   r   r   )r   r   r   r   r   r   r      s   r   c                 C   s(   || v r| | \}}||kr||u S dS )NTr   )r   r   r   r3   srcvalr   r   r   r      s
   r   c                 C   s  t sd S dd t| D }|sd S t }|||}|sd S dd | D }||}|jjjj|jjjj }	i }
|r@|	dd  n|	D ]D}|j	}|j
r||v sR||vrz
t|j
||
|< W qB ty } z|jd|jd||d ||vr{tj|
|< W Y d }~qBd }~ww qB|
S )	Nc                 S   s6   i | ]\}}|j tjtjhvr|jtjkr|j|qS r   )kindkindsVAR_POSITIONALVAR_KEYWORD
annotationrc   _emptyr   ).0npr   r   r   
<dictcomp>   s
    z"get_stub_types.<locals>.<dictcomp>c                 S   s   h | ]}|j qS r   )r   )r   r   r   r   r   	<setcomp>  s    z!get_stub_types.<locals>.<setcomp>r   zFailed to parse type stub for z parameter )exc_info)r   	enumeratera   r   r   r{   r,   args
kwonlyargsargr   r   rO   debugr+   rc   r   )paramsro   rg   loggermissing_typesresolverr   known_paramsr   arg_aststypesarg_astr   exr   r   r   get_stub_types   s<   

r   )-r,   rc   rG   
contextlibr   copyr   	importlibr   typingr   r   r   _commonr	   
_optionalsr
   r   _postponed_annotationsr   r   typeshed_clientr^   _ParameterKindr   r/   r   NodeVisitorr   rB   r6   r8   r9   rC   r]   ra   rh   rn   rp   Resolverr`   r   r   r0   r   r   r   r   r   <module>   s6    
				d