o
    ˷eZ                     @   s  d dl mZ d dlmZ d dlmZmZ d dlmZ d dl	m
Z
m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mZ d dlmZ dd ZG dd dZG dd deZG dd deZG dd dZ G dd de eZ!G dd deZ"G dd dZ#G dd de#Z$G dd  d e$eZ%G d!d" d"e%Z&G d#d$ d$e&Z'G d%d& d&e&Z(G d'd( d(e#Z)G d)d* d*eZ*G d+d, d,e*Z+G d-d. d.Z,G d/d0 d0Z-G d1d2 d2e-e"Z.G d3d4 d4e eZ/G d5d6 d6e-e/Z0d7S )8    )abstractmethod)	Parameter)OptionalTuple)search_ancestor)find_statement_documentationclean_scope_docstring)unite)ValueSet	NO_VALUES)inference_state_method_cache)
docstrings)memoize_method)deep_ast_copyinfer_call_of_leaf)plugin_managerc                 C   s*   d}| D ]}|r|d7 }||  7 }q|S )N z 
------------------------------
)	py__doc__)namesdocname r   K/var/www/ideatree/venv/lib/python3.10/site-packages/jedi/inference/names.py_merge_name_docs   s   r   c                   @   s   e Zd ZU dZeeeef  ed< eed< dZ	dZ
dZ	 edd Zedd Zdd
dZdd Zdd Zdd Zdd Zdd Zdd Zedd Zdd ZdS )AbstractNameDefinitionN	start_posstring_nameTc                 C      t NNotImplementedErrorselfr   r   r   infer&      zAbstractNameDefinition.inferc                 C   s   | hS r   r   r!   r   r   r   goto*   s   zAbstractNameDefinition.gotoFc                 C   s6   |   }|d u s
|s|S |  j}|d u rd S || S r   )_get_qualified_namesget_root_contextstring_names)r"   include_module_namesqualified_namesmodule_namesr   r   r   get_qualified_names0   s   
z*AbstractNameDefinition.get_qualified_namesc                 C      d S r   r   r!   r   r   r   r&   :   r$   z+AbstractNameDefinition._get_qualified_namesc                 C   
   | j  S r   )parent_contextr'   r!   r   r   r   r'   >      
z'AbstractNameDefinition.get_root_contextc                 C      | j S r   )r   r!   r   r   r   get_public_nameA      z&AbstractNameDefinition.get_public_namec                 C   s2   | j d u rd| jj| jf S d| jj| j| j f S )Nz<%s: string_name=%s>z!<%s: string_name=%s start_pos=%s>)r   	__class____name__r   r!   r   r   r   __repr__D   s
   
zAbstractNameDefinition.__repr__c                 C      dS )NFr   r!   r   r   r   	is_importJ      z AbstractNameDefinition.is_importc                 C   r7   )Nr   r   r!   r   r   r   r   M   r9   z AbstractNameDefinition.py__doc__c                 C      | j jS r   )r/   api_typer!   r   r   r   r;   P      zAbstractNameDefinition.api_typec                 C   r7   )z
        Returns either None or the value that is public and qualified. Won't
        return a function, because a name in a function is never public.
        Nr   r!   r   r   r   get_defining_qualified_valueT   s   z3AbstractNameDefinition.get_defining_qualified_valueF)r5   
__module____qualname__r   r   r   int__annotations__strr/   	tree_nameis_value_namer   r#   r%   r,   r&   r'   r2   r6   r8   r   propertyr;   r=   r   r   r   r   r      s*   
 




r   c                   @   s$   e Zd ZdZdZdd Zdd ZdS )AbstractArbitraryNamez
    When you e.g. want to complete dicts keys, you probably want to complete
    string literals, which is not really a name, but for Jedi we use this
    concept of Name for completions as well.
    Fc                 C   s   || _ || _|j| _d S r   )inference_stater   builtins_moduler/   )r"   rH   stringr   r   r   __init__d   s   zAbstractArbitraryName.__init__c                 C      t S r   r   r!   r   r   r   r#   i   r9   zAbstractArbitraryName.inferN)r5   r?   r@   __doc__rE   rK   r#   r   r   r   r   rG   \   s
    rG   c                       s^   e Zd Zdd Zd fdd	Zdd Zdd	 Zd
d Zdd Ze	dd Z
e	dd Z  ZS )AbstractTreeNamec                 C      || _ || _d S r   )r/   rD   )r"   r/   rD   r   r   r   rK   n      
zAbstractTreeName.__init__Fc                    sd   t | jdd}|d ur,|jdkr|    s,|r*|js*tdd || jD S d S t 	|S )Nimport_nameimport_from   c                 s   s    | ]}|j V  qd S r   )value).0nr   r   r   	<genexpr>|   s    z7AbstractTreeName.get_qualified_names.<locals>.<genexpr>)
r   rD   levelr'   	get_value
is_packagetupleget_path_for_namesuperr,   )r"   r)   import_noder4   r   r   r,   r   s   
z$AbstractTreeName.get_qualified_namesc                 C   s$   | j  }|d u rd S || jjf S r   )r/   r,   rD   rU   )r"   parent_namesr   r   r   r&      s   
z%AbstractTreeName._get_qualified_namesc                 C   s$   |   rtd| jr| j S d S )Nz&Shouldn't really happen, please report)r8   r    r/   rZ   r!   r   r   r   r=      s
   
z-AbstractTreeName.get_defining_qualified_valuec                    s|  | j  | jjdd}|d ur7|j}|dkr#jjdv}|r"| gS n*|dv r4ddlm} | }|S | gS ddlm} | }|d urMd	d
 |D S j}|j}	|	dkr|jd dkr|jd kr|j}
|
jdkrp|
j}
|
jdkr|
jdkr 	|
jd }n6|
jj
|
}|
jjd | }|d dkr|d  	|d }ddlm} |dd  D ]}
| ||
}qg }|D ]}| D ]}| D ]}|jjkr|| qqq|S n.|	dkr
|j
}|dkr
t|}g |j|d d <  	|}t fdd|D S |	dkr%|jd dkr%t dd}|j dS tddp-}|jdkr6} j|jdS )NTimport_name_always	expr_stmt)powertrailer)rS   rR   r   )goto_import)%follow_error_node_imports_if_possiblec                 S      g | ]}|j qS r   r   rV   rU   r   r   r   
<listcomp>       z)AbstractTreeName.goto.<locals>.<listcomp>argumentrT   =arglistclassdef	decoratorawait)infer_trailerdotted_namec                 3   s    | ]
}|j  d V  qdS )name_contextN)r%   rk   contextr   r   r   rX      s
    
z(AbstractTreeName.goto.<locals>.<genexpr>rf   .)cut_own_trailerrv   lambdef)position)r/   rD   get_definitiontypeparentjedi.inference.importsrg   rh   children
infer_nodeindexpopjedi.inference.syntax_treert   get_signaturesget_param_namesr   rU   appendr   r	   r   r%   r   r   )r"   
definitiontype_is_simple_namerg   r+   rh   valuespar	node_typerf   	value_setito_inferrt   param_namesrU   	signature
param_namer   
new_dottedstmtr   rx   r   r%      s   

$







zAbstractTreeName.gotoc                 C   s   t | jdd}|d uS )NrS   rR   r   rD   )r"   impr   r   r   r8      s   zAbstractTreeName.is_importc                 C   r:   r   )rD   rU   r!   r   r   r   r      r<   zAbstractTreeName.string_namec                 C   r:   r   )rD   r   r!   r   r   r   r      r<   zAbstractTreeName.start_posr>   )r5   r?   r@   rK   r,   r&   r=   r%   r8   rF   r   r   __classcell__r   r   r`   r   rO   m   s    H
rO   c                       sH   e Zd Zdd Zdd Zdd Z fddZd	d
 Zedd Z	  Z
S )ValueNameMixinc                 C   s   t | jgS r   )r
   _valuer!   r   r   r   r#         zValueNameMixin.inferc                 C   sF   | j  }|s!| j  r!ddlm} || gdd}| |vr!t|S |S )Nr   convert_namesFprefer_stub_to_compiled)r   r   is_stub!jedi.inference.gradual.conversionr   r   )r"   r   r   r   r   r   r   r      s   
zValueNameMixin.py__doc__c                 C   r.   r   )r   r,   r!   r   r   r   r&      r0   z#ValueNameMixin._get_qualified_namesc                    s   | j d u r
| j S t  S r   )r/   r   
as_contextr^   r'   r!   r`   r   r   r'      s   


zValueNameMixin.get_root_contextc                 C   s$   | j }| s| r| j  S d S r   )r/   	is_moduleis_classrZ   )r"   ry   r   r   r   r=      s   
z+ValueNameMixin.get_defining_qualified_valuec                 C   r:   r   )r   r;   r!   r   r   r   r;      r<   zValueNameMixin.api_type)r5   r?   r@   r#   r   r&   r'   r=   rF   r;   r   r   r   r`   r   r      s    	r   c                       s$   e Zd Z fddZdd Z  ZS )	ValueNamec                    s   t  |j| || _d S r   )r^   rK   r/   r   )r"   rU   rD   r`   r   r   rK     s   
zValueName.__init__c                 C   s   t | jjgS r   )r
   r   r   r!   r   r   r   r%   	  s   zValueName.goto)r5   r?   r@   rK   r%   r   r   r   r`   r   r     s    r   c                   @   sX   e Zd ZeddddddZdd Zedd	 Zd
d Zedd Z	e
dddd ZdS )TreeNameDefinitionmodulefunctionparamclass)rR   rS   funcdefr   rq   c                 C   s    ddl m} || jj| j| jS )Nr   )tree_name_to_values)r   r   r/   rH   rD   )r"   r   r   r   r   r#     s   zTreeNameDefinition.inferc                 C   s*   | j jdd}|d u rdS | j|jdS )NTrb   	statement)rD   r~   
_API_TYPESgetr   )r"   r   r   r   r   r;     s   zTreeNameDefinition.api_typec           	      C   s   g }d}| j j}| j }|dure|jdv rLt|jD ]+\}}||krDt|d }|r:tt|j| d }t|| }|d||f  nqt	dd}n|jdkrTd}n|jd	v r\	 |S |}|j}|dus|S )
a  
        Returns an array of tuple(int, node) of the indexes that are used in
        tuple assignments.

        For example if the name is ``y`` in the following code::

            x, (y, z) = 2, ''

        would result in ``[(1, xyz_node), (0, yz_node)]``.

        When searching for b in the case ``a, *b, c = [...]`` it will return::

            [(slice(1, -1), abc_node)]
        FN)testlisttestlist_comptestlist_star_exprexprlist   r   zCouldn't find the assignment.	star_exprT)rd   sync_comp_for)
rD   r   r   	enumerater   rA   lensliceinsertLookupError)	r"   indexesis_star_exprnodecomparer   childr   from_endr   r   r   assignment_indexes&  s4   


z%TreeNameDefinition.assignment_indexesc                 C   r:   r   )r/   rH   r!   r   r   r   rH   O  s   z"TreeNameDefinition.inference_stater   )defaultc                 C   s   | j }|dv r*| j  r#ddlm} || gdd}| |vr#t|S t| j	 S |dkr:| 
 }| |vr:t|S |dkrJ| j rJt| j	 S dS )	N)r   r   rF   r   r   Fr   r   r   r   )r;   r/   r'   r   r   r   r   r   rD   r~   r%   is_definitionr   )r"   r;   r   r   r   r   r   r   T  s   zTreeNameDefinition.py__doc__N)r5   r?   r@   dictr   r#   rF   r;   r   rH   r   r   r   r   r   r   r     s     	
)
r   c                   @   s2   e Zd ZdddZdddZdd Zdd	d
ZdS )_ParamMixinTc                 C   (   t jt jg}|r|t j |  |v S r   )r   POSITIONAL_ONLYPOSITIONAL_OR_KEYWORDr   VAR_POSITIONALget_kind)r"   include_staroptionsr   r   r   maybe_positional_argumentl     z%_ParamMixin.maybe_positional_argumentc                 C   r   r   )r   KEYWORD_ONLYr   r   VAR_KEYWORDr   )r"   include_starsr   r   r   r   maybe_keyword_argumentr  r   z"_ParamMixin.maybe_keyword_argumentc                 C   (   |   }|tjkrdS |tjkrdS dS )N*z**r   r   r   r   r   r"   kindr   r   r   _kind_stringx  s   

z_ParamMixin._kind_stringFc                 C   r-   r   r   )r"   r)   r   r   r   r,     r9   z_ParamMixin.get_qualified_namesN)Tr>   )r5   r?   r@   r   r   r   r,   r   r   r   r   r   k  s
    

r   c                   @   s<   e Zd ZdZdd Zdd Zdd Zedd	 Zd
d Z	dS )ParamNameInterfacer   c                 C   r   r   r   r!   r   r   r   r     r9   zParamNameInterface.get_kindc                 C   r   r   r   r!   r   r   r   	to_string  r9   zParamNameInterface.to_stringc                 C   r7   )as  
        For dealing with type inference and working around the graph, we
        sometimes want to have the param name of the execution. This feels a
        bit strange and we might have to refactor at some point.

        For now however it exists to avoid infering params when we don't really
        need them (e.g. when we can just instead use annotations.
        Nr   r!   r   r   r   get_executed_param_name  s   	z*ParamNameInterface.get_executed_param_namec                 C   r   )NrT   r   r   r   r   r   r   r   
star_count  s   

zParamNameInterface.star_countc                 C   rL   r   rM   r!   r   r   r   infer_default  r9   z ParamNameInterface.infer_defaultN)
r5   r?   r@   r;   r   r   r   rF   r   r   r   r   r   r   r     s    
r   c                   @   s,   e Zd ZdZdZdd Zdd Zdd ZdS )BaseTreeParamNameNc                 C   sX   |   |   }| j}| j}|d ur|d|jdd 7 }|d ur*|d|jdd 7 }|S )Nz: F)include_prefixro   )r   r2   annotation_nodedefault_nodeget_code)r"   output
annotationr   r   r   r   r     s   zBaseTreeParamName.to_stringc                 C   s    | j }|dr|dd  }|S )N__r   )r   
startswithr"   r   r   r   r   r2     s   
z!BaseTreeParamName.get_public_namec                 K   s   | gS r   r   )r"   kwargsr   r   r   r%     r3   zBaseTreeParamName.goto)r5   r?   r@   r   r   r   r2   r%   r   r   r   r   r     s    
r   c                       s^   e Zd Z fddZdd Zedd Zdd	d
Zdd Zedd Z	dd Z
dd Z  ZS )_ActualTreeParamNamec                    s   t  | | || _d S r   )r^   rK   get_default_param_contextfunction_value)r"   r   rD   r`   r   r   rK     s   
z_ActualTreeParamName.__init__c                 C   s   t | jdS )Nr   r   r!   r   r   r   _get_param_node  r   z$_ActualTreeParamName._get_param_nodec                 C   
   |   jS r   )r   r   r!   r   r   r   r        
z$_ActualTreeParamName.annotation_nodeTFc                 C   s0   ddl m} || j|  |d}|r| }|S )Nr   )infer_param)ignore_stars)!jedi.inference.gradual.annotationr   r   r   execute_annotation)r"   r   r   r   r   r   r   r   infer_annotation  s   
z%_ActualTreeParamName.infer_annotationc                 C   s   | j }|d u r	tS | j|S r   )r   r   r/   r   )r"   r   r   r   r   r     s   z"_ActualTreeParamName.infer_defaultc                 C   r   r   )r   r   r!   r   r   r   r     r   z!_ActualTreeParamName.default_nodec                 C   s   |   }|jdkrtjS |jdkrtjS |jjdrtjS |j	}d}|j
D ]*}|r4|dkr3tj  S q&|dkr=tj  S |jdkrP|jrJtj  S ||krPd}q&tjS )	NrT   r   r   F/r   r   T)r   r   r   r   r   r   rU   r   r   r   r   r   r   r   )r"   
tree_paramr   param_appearedpr   r   r   r     s.   






z_ActualTreeParamName.get_kindc                 C   s&   |   }|r|S t| j|  }|S r   )r   r   r   r   r   )r"   r   
doc_paramsr   r   r   r#     s
   z_ActualTreeParamName.infer)TF)r5   r?   r@   rK   r   rF   r   r   r   r   r   r#   r   r   r   r`   r   r     s    

	
r   c                       s@   e Zd Zejdd fddZejdd fddZ  ZS )AnonymousParamNamegoto_anonymous_paramrj   c                    s
   t   S r   )r^   r%   r!   r`   r   r   r%     r   zAnonymousParamName.gotoinfer_anonymous_paramc                    s   t   }|r	|S ddlm} |  }|| j|j}|r|S |jdkr1ddlm	} || jj
g }n"|jdkrDddlm} || jj
i }n|jd u rKtS | jj|jS t|hS )Nr   )dynamic_param_lookuprT   )	FakeTupler   )FakeDict)r^   r#   jedi.inference.dynamic_paramsr   r   r   position_indexr   jedi.inference.value.iterabler   rH   r  r   r   r/   r   r
   )r"   r   r   r   r   rU   r  r`   r   r   r#   	  s$   




zAnonymousParamName.infer)r5   r?   r@   r   decorater%   r#   r   r   r   r`   r   r     s
    

r   c                       s0   e Zd Z fddZ fddZdd Z  ZS )	ParamNamec                    s   t  || || _d S r   )r^   rK   	arguments)r"   r   rD   r  r`   r   r   rK   "  s   
zParamName.__init__c                    s   t   }|r	|S |   S r   )r^   r#   r   )r"   r   r`   r   r   r#   &  s   
zParamName.inferc                 C   s(   ddl m} || j| j}||  j S )Nr   )get_executed_param_names)jedi.inference.paramr  r   r  r   r  )r"   r  params_namesr   r   r   r   -  s   z!ParamName.get_executed_param_name)r5   r?   r@   rK   r#   r   r   r   r   r`   r   r  !  s    r  c                   @   $   e Zd Zdd Zdd Zdd ZdS )ParamNameWrapperc                 C   
   || _ d S r   )_wrapped_param_name)r"   r   r   r   r   rK   4  r0   zParamNameWrapper.__init__c                 C      t | j|S r   )getattrr  r   r   r   r   __getattr__7  r   zParamNameWrapper.__getattr__c                 C      d| j j| jf S )Nz<%s: %s>)r4   r5   r  r!   r   r   r   r6   :     zParamNameWrapper.__repr__Nr5   r?   r@   rK   r  r6   r   r   r   r   r  3      r  c                   @   sZ   e Zd ZdZdZdd ZdddZedd	 Ze	d
d Z
dd Zedd Zdd ZdS )
ImportNamerT   r   r   c                 C   rP   r   )_from_module_contextr   )r"   r/   r   r   r   r   rK   B  rQ   zImportName.__init__Fc                 C   sH   |r"| j r| j dksJ d| jj}|d u r|S || jf S | jfS dS )NrT   z(Everything else is not supported for nowr   )_levelr  r(   r   )r"   r)   r+   r   r   r   r,   F  s   zImportName.get_qualified_namesc                 C   s&   | j }|  }|s|S tt| S r   )r  r#   nextiterr   )r"   mimport_valuesr   r   r   r/   Q  s
   zImportName.parent_contextc                 C   s.   ddl m} | j}||j| jg|| jd S )Nr   )Importer)rY   )r   r  r  rH   r   r  follow)r"   r  r  r   r   r   r#   [  s   zImportName.inferc                 C   s   dd |   D S )Nc                 S   ri   r   rj   )rV   r  r   r   r   rl   b  rm   z#ImportName.goto.<locals>.<listcomp>)r#   r!   r   r   r   r%   a  r  zImportName.gotoc                 C   r7   )Nr   r   r!   r   r   r   r;   d  r$   zImportName.api_typec                 C   s   t |  S r   )r   r%   r!   r   r   r   r   h  r   zImportName.py__doc__Nr>   )r5   r?   r@   r   r  rK   r,   rF   r/   r   r#   r%   r;   r   r   r   r   r   r  >  s    

	

r  c                   @   s   e Zd ZdZdS )SubModuleNamerT   N)r5   r?   r@   r  r   r   r   r   r   l  s    r   c                   @   r  )NameWrapperc                 C   r  r   )_wrapped_name)r"   wrapped_namer   r   r   rK   q  r0   zNameWrapper.__init__c                 C   r  r   )r  r"  r   r   r   r   r  t  r   zNameWrapper.__getattr__c                 C   r  )Nz%s(%s))r4   r5   r"  r!   r   r   r   r6   w  r  zNameWrapper.__repr__Nr  r   r   r   r   r!  p  r  r!  c                          e Zd Z fddZ  ZS )StubNameMixinc                    sd   ddl m} | g}| jdkrd| j jv rdd |  D }||dd}| |v r.t  S t	|S )	Nr   r   r   ro   c                 S   ri   r   rj   )rV   vr   r   r   rl     rm   z+StubNameMixin.py__doc__.<locals>.<listcomp>Fr   )
r   r   r;   rD   r~   r   r#   r^   r   r   )r"   r   r   r`   r   r   r   |  s   
zStubNameMixin.py__doc__)r5   r?   r@   r   r   r   r   r`   r   r%  {      r%  c                       r$  )StubNamec                    sJ   t   }| jdkr#|   dkr#ddlm  t fdd|D S |S )Nversion_infosysr   VersionInfoc                 3   s    | ]} |V  qd S r   r   )rV   cr+  r   r   rX     s    z!StubName.infer.<locals>.<genexpr>)r^   r#   r   r'   
py__name__!jedi.inference.gradual.stub_valuer,  r
   )r"   inferredr`   r+  r   r#     s
   
zStubName.infer)r5   r?   r@   r#   r   r   r   r`   r   r(    r'  r(  c                   @   s$   e Zd ZdZdd Zedd ZdS )
ModuleNamer  c                 C   rP   r   )r   _name)r"   rU   r   r   r   r   rK     rQ   zModuleName.__init__c                 C   r1   r   )r2  r!   r   r   r   r     s   zModuleName.string_nameN)r5   r?   r@   r   rK   rF   r   r   r   r   r   r1    s
    r1  c                   @   s   e Zd ZdS )StubModuleNameN)r5   r?   r@   r   r   r   r   r3    s    r3  N)1abcr   inspectr   typingr   r   
parso.treer   jedi.parser_utilsr   r   jedi.inference.utilsr	   jedi.inference.base_valuer
   r   jedi.inference.cacher   jedi.inferencer   
jedi.cacher   jedi.inference.helpersr   r   jedi.pluginsr   r   r   rG   rO   r   r   r   r   r   r   r   r   r  r  r  r   r!  r%  r(  r1  r3  r   r   r   r   <module>   sB    @w 	^!E.	