o
    ZhZ                     @   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/html/lang_env/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_namesZ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   r6   )Nr   r   r!   r   r   r   r   M   r8   z AbstractNameDefinition.py__doc__c                 C      | j jS r   )r.   api_typer!   r   r   r   r:   P      zAbstractNameDefinition.api_typec                 C   r6   )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)r4   
__module____qualname__r   r   r   int__annotations__strr.   	tree_nameis_value_namer   r#   r%   r+   r&   r'   r1   r5   r7   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   Zbuiltins_moduler.   )r"   rG   stringr   r   r   __init__d   s   zAbstractArbitraryName.__init__c                 C      t S r   r   r!   r   r   r   r#   i   r8   zAbstractArbitraryName.inferN)r4   r>   r?   __doc__rD   rI   r#   r   r   r   r   rF   \   s
    rF   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.   rC   )r"   r.   rC   r   r   r   rI   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   rC   levelr'   	get_value
is_packagetupleZget_path_for_namesuperr+   )r"   r)   Zimport_noder3   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+   rC   rS   )r"   Z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)r7   r    r.   rX   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Zimport_name_always	expr_stmt)powertrailer)rQ   rP   r   )goto_import)%follow_error_node_imports_if_possiblec                 S      g | ]}|j qS r   r   rT   rS   r   r   r   
<listcomp>       z)AbstractTreeName.goto.<locals>.<listcomp>argumentrR   =Zarglistclassdef	decoratorawait)infer_trailerZdotted_namec                 3   s    | ]
}|j  d V  qdS )Zname_contextN)r%   re   contextr   r   r   rV      s
    
z(AbstractTreeName.goto.<locals>.<genexpr>r`   .)Zcut_own_trailerrn   Zlambdef)position)r.   rC   get_definitiontypeparentjedi.inference.importsra   rb   children
infer_nodeindexpopjedi.inference.syntax_treerm   Zget_signaturesZget_param_namesr   rS   appendr   r	   r   r%   r   r   )r"   
definitiontype_Zis_simple_namera   r*   rb   valuesparZ	node_typer`   Z	value_setiZto_inferrm   Zparam_namesrS   	signature
param_namery   Z
new_dottedstmtr   ro   r   r%      s   

$







zAbstractTreeName.gotoc                 C   s   t | jdd}|d uS )NrQ   rP   r   rC   )r"   impr   r   r   r7      s   zAbstractTreeName.is_importc                 C   r9   r   )rC   rS   r!   r   r   r   r      r;   zAbstractTreeName.string_namec                 C   r9   r   )rC   r   r!   r   r   r   r      r;   zAbstractTreeName.start_posr=   )r4   r>   r?   rI   r+   r&   r<   r%   r7   rE   r   r   __classcell__r   r   r\   r   rM   m   s    H
rM   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Z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&      r/   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 }|d ur| s| r| j  S d S r   )r.   Z	is_moduleis_classrX   )r"   rp   r   r   r   r<      s   
z+ValueNameMixin.get_defining_qualified_valuec                 C   r9   r   )r   r:   r!   r   r   r   r:      r;   zValueNameMixin.api_type)r4   r>   r?   r#   r   r&   r'   r<   rE   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[   rI   r.   r   )r"   rS   rC   r\   r   r   rI     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)r4   r>   r?   rI   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)rP   rQ   Zfuncdefr   rj   c                 C   s    ddl m} || jj| j| jS )Nr   )tree_name_to_values)r{   r   r.   rG   rC   )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 )NTr]   	statement)rC   rs   
_API_TYPESgetrt   )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)ZtestlistZtestlist_compZtestlist_star_exprZexprlist   r   zCouldn't find the assignment.Z	star_exprT)r^   Zsync_comp_for)
rC   ru   rt   	enumeraterw   r@   lensliceinsertLookupError)	r"   ZindexesZis_star_exprnodecomparer   childry   Zfrom_endr   r   r   assignment_indexes&  s4   


z%TreeNameDefinition.assignment_indexesc                 C   r9   r   )r.   rG   r!   r   r   r   rG   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   rE   r   r   Fr   r   r   r   )r:   r.   r'   r   r   r   r   r   rC   rs   r%   Zis_definitionr   )r"   r:   r   r   r   r   r   r   T  s   zTreeNameDefinition.py__doc__N)r4   r>   r?   dictr   r#   rE   r:   r   rG   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"   Zinclude_staroptionsr   r   r   maybe_positional_argumentl     z%_ParamMixin.maybe_positional_argumentc                 C   r   r   )r   KEYWORD_ONLYr   r|   VAR_KEYWORDr   )r"   Z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+     r8   z_ParamMixin.get_qualified_namesN)Tr=   )r4   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     r8   zParamNameInterface.get_kindc                 C   r   r   r   r!   r   r   r   	to_string  r8   zParamNameInterface.to_stringc                 C   r6   )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   )NrR   r   r   r   r   r   r   r   
star_count  s   

zParamNameInterface.star_countc                 C   rJ   r   rK   r!   r   r   r   infer_default  r8   z ParamNameInterface.infer_defaultN)
r4   r>   r?   r:   r   r   r   rE   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)Zinclude_prefixri   )r   r1   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   r1     s   
z!BaseTreeParamName.get_public_namec                 K   s   | gS r   r   )r"   kwargsr   r   r   r%     r2   zBaseTreeParamName.goto)r4   r>   r?   r   r   r   r1   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[   rI   Zget_default_param_contextfunction_value)r"   r   rC   r\   r   r   rI     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)Z!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.   rx   )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 )	NrR   r   r   F/r   r   T)r   r   r   r   r   r   rS   r   r   ru   rw   r   rt   r   )r"   Z
tree_paramru   Z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   Z
doc_paramsr   r   r   r#     s
   z_ActualTreeParamName.infer)TF)r4   r>   r?   rI   r   rE   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 )AnonymousParamNameZgoto_anonymous_paramrd   c                    s
   t   S r   )r[   r%   r!   r\   r   r   r%     r   zAnonymousParamName.gotoZ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_lookuprR   )	FakeTupler   )FakeDict)r[   r#   Zjedi.inference.dynamic_paramsr   r   r   position_indexr   Zjedi.inference.value.iterabler   rG   r   r   r   r.   rx   r
   )r"   r   r   r   r   rS   r   r\   r   r   r#   	  s$   




zAnonymousParamName.infer)r4   r>   r?   r   Z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[   rI   	arguments)r"   r   rC   r   r\   r   r   rI   "  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)Zjedi.inference.paramr   r   r   r   r   )r"   r   Zparams_namesr   r   r   r   -  s   z!ParamName.get_executed_param_name)r4   r>   r?   rI   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   rI   4  r/   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>)r3   r4   r   r!   r   r   r   r5   :     zParamNameWrapper.__repr__Nr4   r>   r?   rI   r   r5   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rR   r   r   c                 C   rN   r   )_from_module_contextr   )r"   r.   r   r   r   r   rI   B  rO   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 )NrR   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"   mZ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)rW   )rv   r   r   rG   r   r   follow)r"   r   r   r   r   r   r#   [  s   zImportName.inferc                 C   s   dd |   D S )Nc                 S   rc   r   rd   )rT   r   r   r   r   rf   b  rg   z#ImportName.goto.<locals>.<listcomp>)r#   r!   r   r   r   r%   a  r   zImportName.gotoc                 C   r6   )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=   )r4   r>   r?   r   r   rI   r+   rE   r.   r   r#   r%   r:   r   r   r   r   r   r   >  s    

	

r   c                   @   s   e Zd ZdZdS )SubModuleNamerR   N)r4   r>   r?   r   r   r   r   r   r   l  s    r   c                   @   r   )NameWrapperc                 C   r   r   )_wrapped_name)r"   Zwrapped_namer   r   r   rI   q  r/   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))r3   r4   r   r!   r   r   r   r5   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   ri   c                 S   rc   r   rd   )rT   vr   r   r   rf     rg   z+StubNameMixin.py__doc__.<locals>.<listcomp>Fr   )
r   r   r:   rC   rs   rw   r#   r[   r   r   )r"   r   r   r\   r   r   r   |  s   
zStubNameMixin.py__doc__)r4   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   )rT   cr   r   r   rV     s    z!StubName.infer.<locals>.<genexpr>)r[   r#   r   r'   Z
py__name__Z!jedi.inference.gradual.stub_valuer   r
   )r"   inferredr\   r   r   r#     s
   
zStubName.infer)r4   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   rN   r   )r   _name)r"   rS   r   r   r   r   rI     rO   zModuleName.__init__c                 C   r0   r   )r   r!   r   r   r   r     s   zModuleName.string_nameN)r4   r>   r?   r   rI   rE   r   r   r   r   r   r     s
    r   c                   @   s   e Zd ZdS )StubModuleNameN)r4   r>   r?   r   r   r   r   r     s    r   N)1abcr   inspectr   typingr   r   Z
parso.treer   Zjedi.parser_utilsr   r   Zjedi.inference.utilsr	   Zjedi.inference.base_valuer
   r   Zjedi.inference.cacher   Zjedi.inferencer   Z
jedi.cacher   Zjedi.inference.helpersr   r   Zjedi.pluginsr   r   r   rF   rM   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sB    @w 	^!E.	