a
    lcZ                     @   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   P/var/www/html/django/DPS/env/lib/python3.9/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   s   t d S NNotImplementedErrorselfr   r   r   infer&   s    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   s   d S r   r   r    r   r   r   r$   :   s    z+AbstractNameDefinition._get_qualified_namesc                 C   s
   | j  S r   )parent_contextr%   r    r   r   r   r%   >   s    z'AbstractNameDefinition.get_root_contextc                 C   s   | j S r   )r   r    r   r   r   get_public_nameA   s    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   s   dS )NFr   r    r   r   r   	is_importJ   s    z AbstractNameDefinition.is_importc                 C   s   dS )Nr   r   r    r   r   r   r   M   s    z AbstractNameDefinition.py__doc__c                 C   s   | j jS r   )r*   api_typer    r   r   r   r0   P   s    zAbstractNameDefinition.api_typec                 C   s   dS )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)r-   
__module____qualname__r   r   r   int__annotations__strr*   	tree_nameis_value_namer   r"   r#   r)   r$   r%   r+   r.   r/   r   propertyr0   r1   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!   r;   stringr   r   r   __init__d   s    zAbstractArbitraryName.__init__c                 C   s   t S r   r   r    r   r   r   r"   i   s    zAbstractArbitraryName.inferN)r-   r2   r3   __doc__r8   r=   r"   r   r   r   r   r:   \   s   r:   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   s   || _ || _d S r   )r*   r7   )r!   r*   r7   r   r   r   r=   n   s    zAbstractTreeName.__init__Fc                    sd   t | jdd}|d urX|jdkr0|    sX|rT|jsTt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>|       z7AbstractTreeName.get_qualified_names.<locals>.<genexpr>)
r   r7   levelr%   	get_value
is_packagetupleZget_path_for_namesuperr)   )r!   r'   Zimport_noder,   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)   r7   rD   )r!   Zparent_namesr   r   r   r$      s    
z%AbstractTreeName._get_qualified_namesc                 C   s&   |   rtdn| jr"| j S d S )Nz&Shouldn't really happen, please report)r/   r   r*   rJ   r    r   r   r   r1      s
    

z-AbstractTreeName.get_defining_qualified_valuec                    s  | j  | jjdd}|d urp|j}|dkrFjjdv}|rn| gS q|dv rhddlm} | }|S | gS n,ddlm} | }|d urd	d
 |D S j}|j}	|	dkr|jd dkr|jd kr|j}
|
jdkr|
j}
|
jdkr,|
jdkr 	|
jd }np|
jj
|
}|
jjd | }|d dkrH|d  	|d }ddlm} |dd  D ]}
| ||
}qng }|D ]>}| D ].}| D ]}|jjkr|| qqq|S n\|	dkr,|j
}|dkr,t|}g |j|d d <  	|}t fdd|D S |	dkrb|jd dkrbt dd}|j dS tddpr}|jdkr} j|jdS d S )NTZimport_name_always	expr_stmt)powertrailer)rB   rA   r   )goto_import)%follow_error_node_imports_if_possiblec                 S   s   g | ]
}|j qS r   r   rE   rD   r   r   r   
<listcomp>   rH   z)AbstractTreeName.goto.<locals>.<listcomp>argumentrC   =Zarglistclassdef	decoratorawait)infer_trailerZdotted_namec                 3   s   | ]}|j  d V  qdS )Zname_contextN)r#   rV   contextr   r   r   rG      s   z(AbstractTreeName.goto.<locals>.<genexpr>rR   .)Zcut_own_trailerr^   Zlambdef)position)r*   r7   get_definitiontypeparentjedi.inference.importsrS   rT   children
infer_nodeindexpopjedi.inference.syntax_treer]   Zget_signaturesZget_param_namesr   rD   appendr   r	   r   r#   r   r   )r!   
definitiontype_Zis_simple_namerS   r(   rT   valuesparZ	node_typerR   Z	value_setiZto_inferr]   Zparam_namesrD   	signature
param_nameri   Z
new_dottedstmtr   r_   r   r#      s|    

*




zAbstractTreeName.gotoc                 C   s   t | jdd}|d uS )NrB   rA   r   r7   )r!   impr   r   r   r/      s    zAbstractTreeName.is_importc                 C   s   | j jS r   )r7   rD   r    r   r   r   r      s    zAbstractTreeName.string_namec                 C   s   | j jS r   )r7   r   r    r   r   r   r      s    zAbstractTreeName.start_pos)F)r-   r2   r3   r=   r)   r$   r1   r#   r/   r9   r   r   __classcell__r   r   rN   r   r@   m   s   H
r@   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"      s    zValueNameMixin.inferc                 C   sF   | j  }|sB| j  rBddlm} || gdd}| |vrBt|S |S )Nr   convert_namesFZprefer_stub_to_compiled)ry   r   is_stub!jedi.inference.gradual.conversionr{   r   )r!   r   r{   r   r   r   r   r      s    
zValueNameMixin.py__doc__c                 C   s
   | j  S r   )ry   r)   r    r   r   r   r$      s    z#ValueNameMixin._get_qualified_namesc                    s   | j d u r| j S t  S r   )r*   ry   
as_contextrM   r%   r    rN   r   r   r%      s    

zValueNameMixin.get_root_contextc                 C   s$   | j }| s| r | j  S d S r   )r*   Z	is_moduleZis_classrJ   )r!   r`   r   r   r   r1      s    
z+ValueNameMixin.get_defining_qualified_valuec                 C   s   | j jS r   )ry   r0   r    r   r   r   r0      s    zValueNameMixin.api_type)r-   r2   r3   r"   r   r$   r%   r1   r9   r0   rw   r   r   rN   r   rx      s   	rx   c                       s$   e Zd Z fddZdd Z  ZS )	ValueNamec                    s   t  |j| || _d S r   )rM   r=   r*   ry   )r!   rD   r7   rN   r   r   r=     s    zValueName.__init__c                 C   s   t | jjgS r   )r
   ry   r   r    r   r   r   r#   	  s    zValueName.goto)r-   r2   r3   r=   r#   rw   r   r   rN   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)rA   rB   Zfuncdefr   rZ   c                 C   s    ddl m} || jj| j| jS )Nr   )tree_name_to_values)rk   r   r*   r;   r7   )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 )NTrO   	statement)r7   rc   
_API_TYPESgetrd   )r!   rm   r   r   r   r0     s    zTreeNameDefinition.api_typec           	      C   s   g }d}| j j}| j }|dur|jdv rt|jD ]V\}}||kr2t|d }|rttt|j| d }t|| }|d||f  qq2t	dd}n|jdkrd}n|jd	v rq|}|j}q|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)rP   Zsync_comp_for)
r7   re   rd   	enumeraterg   r4   lensliceinsertLookupError)	r!   ZindexesZis_star_exprnodecomparerq   childri   Zfrom_endr   r   r   assignment_indexes&  s.    


z%TreeNameDefinition.assignment_indexesc                 C   s   | j jS r   )r*   r;   r    r   r   r   r;   O  s    z"TreeNameDefinition.inference_stater   )defaultc                 C   s   | j }|dv rT| j  rFddlm} || gdd}| |vrFt|S t| j	 S |dkrt| 
 }| |vrtt|S |dkr| j rt| j	 S dS )	N)r   r   r9   r   rz   Fr|   r   r   r   )r0   r*   r%   r}   r~   r{   r   r   r7   rc   r#   Zis_definitionr   )r!   r0   r{   r   r   r   r   r   T  s    zTreeNameDefinition.py__doc__N)r-   r2   r3   dictr   r"   r9   r0   r   r;   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   s(   t jt jg}|r|t j |  |v S r   )r   POSITIONAL_ONLYPOSITIONAL_OR_KEYWORDrl   VAR_POSITIONALget_kind)r!   Zinclude_staroptionsr   r   r   maybe_positional_argumentl  s    z%_ParamMixin.maybe_positional_argumentc                 C   s(   t jt jg}|r|t j |  |v S r   )r   KEYWORD_ONLYr   rl   VAR_KEYWORDr   )r!   Zinclude_starsr   r   r   r   maybe_keyword_argumentr  s    z"_ParamMixin.maybe_keyword_argumentc                 C   s(   |   }|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   s   d S r   r   )r!   r'   r   r   r   r)     s    z_ParamMixin.get_qualified_namesN)T)T)F)r-   r2   r3   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   s   t d S r   r   r    r   r   r   r     s    zParamNameInterface.get_kindc                 C   s   t d S r   r   r    r   r   r   	to_string  s    zParamNameInterface.to_stringc                 C   s   dS )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   s(   |   }|tjkrdS |tjkr$dS dS )NrC   r   r   r   r   r   r   r   
star_count  s    

zParamNameInterface.star_countc                 C   s   t S r   r>   r    r   r   r   infer_default  s    z ParamNameInterface.infer_defaultN)
r-   r2   r3   r0   r   r   r   r9   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r8|d|jdd 7 }|d urT|d|jdd 7 }|S )Nz: F)Zinclude_prefixrY   )r   r+   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   r+     s    
z!BaseTreeParamName.get_public_namec                 K   s   | gS r   r   )r!   kwargsr   r   r   r#     s    zBaseTreeParamName.goto)r-   r2   r3   r   r   r   r+   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   )rM   r=   Zget_default_param_contextfunction_value)r!   r   r7   rN   r   r   r=     s    z_ActualTreeParamName.__init__c                 C   s   t | jdS )Nr   ru   r    r   r   r   _get_param_node  s    z$_ActualTreeParamName._get_param_nodec                 C   s
   |   jS r   )r   r   r    r   r   r   r     s    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   ro   r   r   r   infer_annotation  s    
z%_ActualTreeParamName.infer_annotationc                 C   s   | j }|d u rtS | j|S r   )r   r   r*   rh   )r!   r   r   r   r   r     s    z"_ActualTreeParamName.infer_defaultc                 C   s
   |   jS r   )r   r   r    r   r   r   r     s    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 ]T}|rh|dkrtj  S qL|dkrztj  S |jdkrL|jrtj  S ||krLd}qLtjS )	NrC   r   r   F/r   r   T)r   r   r   r   r   r   rD   r   r   re   rg   r   rd   r   )r!   Z
tree_paramre   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!   ro   Z
doc_paramsr   r   r   r"     s
    z_ActualTreeParamName.infer)TF)r-   r2   r3   r=   r   r9   r   r   r   r   r   r"   rw   r   r   rN   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_paramrU   c                    s
   t   S r   )rM   r#   r    rN   r   r   r#     s    zAnonymousParamName.gotoZinfer_anonymous_paramc                    s   t   }|r|S ddlm} |  }|| j|j}|r<|S |jdkrbddlm	} || jj
g }nD|jdkrddlm} || jj
i }n|jd u rtS | jj|jS t|hS )Nr   )dynamic_param_lookuprC   )	FakeTupler   )FakeDict)rM   r"   Zjedi.inference.dynamic_paramsr   r   r   position_indexr   Zjedi.inference.value.iterabler   r;   r   r   r   r*   rh   r
   )r!   ro   r   r   r   rD   r   rN   r   r   r"   	  s$    



zAnonymousParamName.infer)r-   r2   r3   r   Zdecorater#   r"   rw   r   r   rN   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   )rM   r=   	arguments)r!   r   r7   r   rN   r   r   r=   "  s    zParamName.__init__c                    s   t   }|r|S |   S r   )rM   r"   r   )r!   ro   rN   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)r-   r2   r3   r=   r"   r   rw   r   r   rN   r   r   !  s   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )ParamNameWrapperc                 C   s
   || _ d S r   )_wrapped_param_name)r!   rs   r   r   r   r=   4  s    zParamNameWrapper.__init__c                 C   s   t | j|S r   )getattrr   r   r   r   r   __getattr__7  s    zParamNameWrapper.__getattr__c                 C   s   d| j j| jf S )Nz<%s: %s>)r,   r-   r   r    r   r   r   r.   :  s    zParamNameWrapper.__repr__Nr-   r2   r3   r=   r   r.   r   r   r   r   r   3  s   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rC   r   r   c                 C   s   || _ || _d S r   )_from_module_contextr   )r!   r*   r   r   r   r   r=   B  s    zImportName.__init__Fc                 C   sH   |rD| j r<| j dksJ d| jj}|d u r0|S || jf S | jfS dS )NrC   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)rI   )rf   r   r   r;   r   r   follow)r!   r   r   r   r   r   r"   [  s    zImportName.inferc                 C   s   dd |   D S )Nc                 S   s   g | ]
}|j qS r   rU   )rE   r   r   r   r   rW   b  rH   z#ImportName.goto.<locals>.<listcomp>)r"   r    r   r   r   r#   a  s    zImportName.gotoc                 C   s   dS )Nr   r   r    r   r   r   r0   d  s    zImportName.api_typec                 C   s   t |  S r   )r   r#   r    r   r   r   r   h  s    zImportName.py__doc__N)F)r-   r2   r3   r   r   r=   r)   r9   r*   r   r"   r#   r0   r   r   r   r   r   r   >  s   

	

r   c                   @   s   e Zd ZdZdS )SubModuleNamerC   N)r-   r2   r3   r   r   r   r   r   r   l  s   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )NameWrapperc                 C   s
   || _ d S r   )_wrapped_name)r!   Zwrapped_namer   r   r   r=   q  s    zNameWrapper.__init__c                 C   s   t | j|S r   )r   r   r   r   r   r   r   t  s    zNameWrapper.__getattr__c                 C   s   d| j j| jf S )Nz%s(%s))r,   r-   r   r    r   r   r   r.   w  s    zNameWrapper.__repr__Nr   r   r   r   r   r   p  s   r   c                       s   e Zd Z fddZ  ZS )StubNameMixinc                    sh   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 d S )	Nr   rz   r   rY   c                 S   s   g | ]
}|j qS r   rU   )rE   vr   r   r   rW     rH   z+StubNameMixin.py__doc__.<locals>.<listcomp>Fr|   )
r~   r{   r0   r7   rc   rg   r"   rM   r   r   )r!   r{   r   rN   r   r   r   |  s    
zStubNameMixin.py__doc__)r-   r2   r3   r   rw   r   r   rN   r   r   {  s   r   c                       s   e Zd Z fddZ  ZS )StubNamec                    sJ   t   }| jdkrF|   dkrFddlm  t fdd|D S |S )Nversion_infosysr   VersionInfoc                 3   s   | ]} |V  qd S r   r   )rE   cr   r   r   rG     rH   z!StubName.infer.<locals>.<genexpr>)rM   r"   r   r%   Z
py__name__Z!jedi.inference.gradual.stub_valuer   r
   )r!   inferredrN   r   r   r"     s
    
zStubName.infer)r-   r2   r3   r"   rw   r   r   rN   r   r     s   r   c                   @   s$   e Zd ZdZdd Zedd ZdS )
ModuleNamer   c                 C   s   || _ || _d S r   )ry   _name)r!   rD   r   r   r   r   r=     s    zModuleName.__init__c                 C   s   | j S r   )r   r    r   r   r   r     s    zModuleName.string_nameN)r-   r2   r3   r   r=   r9   r   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )StubModuleNameN)r-   r2   r3   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   r:   r@   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s@   @w 	^!E.	