o
    ZhD                     @   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	 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mZmZmZmZ d dlmZmZmZmZmZ d dlmZm Z 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- G dd deZ.G dd deZ/G dd dZ0G dd de0e/edZ1G dd deZ2G dd de1Z3G d d! d!e#e$Z4G d"d# d#e4Z5G d$d% d%e4Z6G d&d' d'e0eZ7d(d) Z8d*S )+    )tree)debug)inference_state_method_cacheCachedMetaClass)compiled)	recursion)
docstrings)flow_analysisTreeSignature)ParserTreeFilterFunctionExecutionFilter AnonymousFunctionExecutionFilter)	ValueNameAbstractNameDefinitionAnonymousParamName	ParamNameNameWrapper)ContextualizedNode	NO_VALUESValueSet	TreeValueValueWrapper)LazyKnownValuesLazyKnownValueLazyTreeValue)ValueContextTreeContextMixin)iterable)parser_utils)get_yield_exprs)values_from_qualified_namesTupleGenericManagerc                   @   s0   e Zd ZdZdZdd Zedd Zdd Zd	S )

LambdaNamez<lambda>functionc                 C   s   || _ |j| _d S N)_lambda_valueparent_context)selfZlambda_value r*   T/var/www/html/lang_env/lib/python3.10/site-packages/jedi/inference/value/function.py__init__   s   zLambdaName.__init__c                 C   s
   | j jjS r&   )r'   	tree_node	start_posr)   r*   r*   r+   r.   "   s   
zLambdaName.start_posc                 C   s   t | jgS r&   )r   r'   r/   r*   r*   r+   infer&   s   zLambdaName.inferN)	__name__
__module____qualname__string_nameapi_typer,   propertyr.   r0   r*   r*   r*   r+   r$      s    
r$   c                   @   s   e Zd Zdd ZdS )FunctionAndClassBasec                 C   sF   | j  r| j  }|d u rd S ||  f S | j  r!|  fS d S r&   )r(   is_classget_qualified_names
py__name__Z	is_module)r)   nr*   r*   r+   r9   +   s   



z(FunctionAndClassBase.get_qualified_namesN)r1   r2   r3   r9   r*   r*   r*   r+   r7   *   s    r7   c                   @   sj   e Zd ZdZdddZdd Zdd Zed	d
 Zdd Z	dd Z
dddZdd ZdddZdd ZdS )FunctionMixinr%   Nc                 c   s.    |   }| D ]}|j|dE d H  q	d S )N)origin_scope)py__class__Zexecute_with_valuesget_filters)r)   r=   clsinstancer*   r*   r+   r?   ;   s
   zFunctionMixin.get_filtersc                 C   s4   ddl m} |d u rt| gS t||| | gS )Nr   )BoundMethod)Zjedi.inference.value.instancerB   r   
as_context)r)   rA   Zclass_valuerB   r*   r*   r+   	py__get__@   s   
zFunctionMixin.py__get__c                    s    fdd j  D S )Nc                    s   g | ]}t  |jqS r*   )r   name.0paramr/   r*   r+   
<listcomp>H   s    z1FunctionMixin.get_param_names.<locals>.<listcomp>)r-   
get_paramsr/   r*   r/   r+   get_param_namesG   s   
zFunctionMixin.get_param_namesc                 C   s"   | j jdkr
t| S t| | j jS )Nlambdef)r-   typer$   r   rE   r/   r*   r*   r+   rE   K   s   zFunctionMixin.namec                 C   s   dS )NTr*   r/   r*   r*   r+   is_functionQ      zFunctionMixin.is_functionc                 C   s   | j jS r&   )rE   r4   r/   r*   r*   r+   r:   T   s   zFunctionMixin.py__name__Tc                    s   | j j}|d u r3dd  |  }| }| }|  dd fdd| D   }|d u r2|S n|jdd}|  | j j	d	 jdd }|d
 | S )Nc                 S   sJ   | j }|   }|d ur|d| 7 }| jd ur#|d| jjdd 7 }|S )Nz: =FZinclude_prefix)r4   r0   get_type_hintdefault_nodeget_code)r;   s
annotationr*   r*   r+   param_name_to_strZ   s   
z6FunctionMixin.get_type_hint.<locals>.param_name_to_strz(%s), c                       g | ]} |qS r*   r*   )rG   r;   rW   r*   r+   rI   f   s    z/FunctionMixin.get_type_hint.<locals>.<listcomp>FrQ      z -> )
r-   rV   rC   r0   rR   r:   joinrK   rT   children)r)   add_class_inforeturn_annotationfunction_executionresultZreturn_hintbodyr*   rZ   r+   rR   W   s   	zFunctionMixin.get_type_hintc                 C   s   |  |}| S r&   )rC   r0   )r)   	argumentsr`   r*   r*   r+   
py__call__r   s   
zFunctionMixin.py__call__c                 C   s   |d u rt | S t| |S r&   )AnonymousFunctionExecutionFunctionExecutionContext)r)   rc   r*   r*   r+   _as_contextv   s   
zFunctionMixin._as_contextc                 C   s   dd |   D S )Nc                 S   s   g | ]}t |qS r*   r
   rG   fr*   r*   r+   rI   |       z0FunctionMixin.get_signatures.<locals>.<listcomp>)get_signature_functionsr/   r*   r*   r+   get_signatures{      zFunctionMixin.get_signaturesr&   T)r1   r2   r3   r5   r?   rD   rK   r6   rE   rN   r:   rR   rd   rg   rl   r*   r*   r*   r+   r<   8   s    



r<   c                   @   s0   e Zd Zedd Zdd Zdd Zdd Zd	S )
FunctionValuec                    sx    fddt t|} s r$j s s|}|r:t|t tfdd|D S |S )Nc                    s*     rtj| dS  j| dS )N)r(   r-   )r8   MethodValueinference_state)r-   )r@   contextr(   r*   r+   create   s   z*FunctionValue.from_context.<locals>.createc                    rY   r*   r*   rh   )rs   r*   r+   rI      rj   z.FunctionValue.from_context.<locals>.<listcomp>)list_find_overload_functionsr8   Zis_instancer(   OverloadedFunctionValuereversed)r@   rr   r-   Zoverloaded_funcsr%   r*   )r@   rr   rs   r(   r+   from_context   s   zFunctionValue.from_contextc                 C   s   t | jdd\}|S )NtypesFunctionType)r!   rq   )r)   cr*   r*   r+   r>      s   zFunctionValue.py__class__c                 C      | j S r&   )r(   r/   r*   r*   r+   get_default_param_context      z'FunctionValue.get_default_param_contextc                 C   s   | gS r&   r*   r/   r*   r*   r+   rk      r~   z%FunctionValue.get_signature_functionsN)r1   r2   r3   classmethodrx   r>   r}   rk   r*   r*   r*   r+   ro      s    
 ro   )	metaclassc                       s$   e Zd Z fddZdd Z  ZS )FunctionNameInClassc                    s   t  | || _d S r&   )superr,   _class_context)r)   class_contextrE   	__class__r*   r+   r,         
zFunctionNameInClass.__init__c                 C   
   | j  S r&   )r   	get_valuer/   r*   r*   r+   get_defining_qualified_value      
z0FunctionNameInClass.get_defining_qualified_value)r1   r2   r3   r,   r   __classcell__r*   r*   r   r+   r      s    r   c                       s<   e Zd Z fddZdd Zdd Ze fddZ  ZS )	rp   c                    s$   t  j|g|R i | || _d S r&   )r   r,   r   )r)   rq   r   argskwargsr   r*   r+   r,      s   
zMethodValue.__init__c                 C   r|   r&   )r   r/   r*   r*   r+   r}      r~   z%MethodValue.get_default_param_contextc                 C   s$   | j  }|d u rd S ||  f S r&   )r   r9   r:   )r)   namesr*   r*   r+   r9      s   
zMethodValue.get_qualified_namesc                    s   t | jt jS r&   )r   r   r   rE   r/   r   r*   r+   rE      s   zMethodValue.name)	r1   r2   r3   r,   r}   r9   r6   rE   r   r*   r*   r   r+   rp      s    rp   c                   @   sl   e Zd Zdd Zeede dddZdd Z	eje
g ddd	d
ZdddZdd Zdd ZdS )BaseFunctionExecutionContextc                 C   s   t r&   )NotImplementedErrorr/   r*   r*   r+   infer_annotations   rO   z.BaseFunctionExecutionContext.infer_annotations)defaultFc           	   	   C   s  | j }|jdkr| |jd S |rt}t| j|}n|  }|r#|S |t	| j
O }| }|D ][}|rE|tdd | |D O }q1t| ||}|tju rXtd| n&z|j}W n tyt   t| jd}|t|gO }Y n
w || |d O }|tju rtd|  |S q1|S )	NrL   c                 s       | ]}|  V  qd S r&   r0   rG   
lazy_valuer*   r*   r+   	<genexpr>   
    
zABaseFunctionExecutionContext.get_return_values.<locals>.<genexpr>zReturn unreachable: %sNone   zReturn reachable: %s)r-   rM   Z
infer_noder]   r   r    rq   r   r   infer_return_types_valueZiter_return_stmtsr   	from_sets_get_yield_lazy_valuer	   Zreachability_checkZUNREACHABLEr   dbgAttributeErrorr   builtin_from_nameZ	REACHABLE)	r)   check_yieldsfuncdefZ	value_setreturnsrcheckr]   ctxr*   r*   r+   get_return_values   s@   



z.BaseFunctionExecutionContext.get_return_valuesc                 c   st    |j dkrt| jd}t|V  d S |jd }|j dkr2t| |jd }| |E d H  d S t	| |V  d S )Nkeywordr   r   Z	yield_arg)
rM   r   r   rq   r   r]   r   r0   iterater   )r)   Z
yield_exprr   nodecnr*   r*   r+   r      s   



z2BaseFunctionExecutionContext._get_yield_lazy_valuec              
   c   s   dd t | j| jD }g }d }|D ]Z\}}|j}|jdkr"|j}|jdkrH|| jkrHt|rH||kr?|d d | n,|||gf n#|| jkrV|d |gf n| jdd}|rht	|d	t
d
dV   d S |}q|D ]^\}}	|d u r|	D ]
}| |E d H  qzqp| }
t| |
}| |}t|}|D ]1}t|jd j| i}| || |	D ]
}| |E d H  qW d    n1 sw   Y  qqpd S )Nc              
   S   s"   g | ]}|t |d dddfqS )for_stmtr   Z
while_stmtZif_stmt)r   Zsearch_ancestor)rG   yr*   r*   r+   rI   	  s
    
zFBaseFunctionExecutionContext.get_yield_lazy_values.<locals>.<listcomp>Zsuiter   r   r   T)r   r   inf)minmax)r    rq   r-   parentrM   r   Zfor_stmt_defines_one_nameappendr   r   floatr   Zget_testlistr   r0   r   rt   strr]   valueZpredefine_names)r)   is_asyncZfor_parentsZyields_orderZlast_for_stmtZyield_r   r   ry   ZyieldsZ
input_noder   Zorderedr   dctZyield_in_same_for_stmtr*   r*   r+   get_yield_lazy_values  sT   


z2BaseFunctionExecutionContext.get_yield_lazy_valuesc                 C   s   t dd |  D S )Nc                 s   r   r&   r   r   r*   r*   r+   r   6  r   zBBaseFunctionExecutionContext.merge_yield_values.<locals>.<genexpr>)r   r   r   )r)   r   r*   r*   r+   merge_yield_values5  s   
z/BaseFunctionExecutionContext.merge_yield_valuesc                 C   s   t t| j| jS r&   )boolr    rq   r-   r/   r*   r*   r+   is_generator;  rm   z)BaseFunctionExecutionContext.is_generatorc                    s   | j }| jjjdv }ddlm  |rU|  r6|jd}| j	dd}|
 tft fdd|D  S |jd	}|  }|
 ttft fd
d|D  S |  rf|  sftt|| gS |  S )z4
        Created to be used by inheritance.
        )Z
async_stmtZasync_funcdefr   )GenericClassAsyncGeneratorT)r   c                 3       | ]
} |t V  qd S r&   r"   rG   r{   r   Zgenericsr*   r+   r   N  s
    
z5BaseFunctionExecutionContext.infer.<locals>.<genexpr>	Coroutinec                 3   r   r&   r"   r   r   r*   r+   r   W  s    
)rq   r-   r   rM   Zjedi.inference.gradual.baser   r   Ztyping_moduleZpy__getattribute__r   r>   r   r   Zexecute_annotationr   r   r   	Generator)r)   rq   Zis_coroutineZasync_generator_classesZyield_valuesZasync_classesZreturn_valuesr*   r   r+   r0   >  s4   z"BaseFunctionExecutionContext.inferN)F)r1   r2   r3   r   r   r   r   Zexecution_recursion_decoratorr   r   iterr   r   r   r0   r*   r*   r*   r+   r      s    (
.r   c                       s6   e Zd Z fddZd
ddZdd Zdd	 Z  ZS )rf   c                       t  | || _d S r&   )r   r,   
_arguments)r)   Zfunction_valuerc   r   r*   r+   r,   c  r   z!FunctionExecutionContext.__init__Nc                 c   s    t | | j||| jdV  d S )N)until_positionr=   rc   )r   r   r   r)   r   r=   r*   r*   r+   r?   g  s   z$FunctionExecutionContext.get_filtersc                 C   s   ddl m} || j| jS )Nr   )r   )Z!jedi.inference.gradual.annotationr   r   r   )r)   r   r*   r*   r+   r   o  s   z*FunctionExecutionContext.infer_annotationsc                    s    fdd j j D S )Nc                    s   g | ]}t  j|j jqS r*   )r   r   rE   r   rF   r/   r*   r+   rI   t  s    z<FunctionExecutionContext.get_param_names.<locals>.<listcomp>)r   r-   rJ   r/   r*   r/   r+   rK   s  s   

z(FunctionExecutionContext.get_param_namesNN)r1   r2   r3   r,   r?   r   rK   r   r*   r*   r   r+   rf   b  s
    
rf   c                   @   s&   e Zd Zdd ZdddZdd ZdS )	re   c                 C   s   t S r&   )r   r/   r*   r*   r+   r   {  s   z,AnonymousFunctionExecution.infer_annotationsNc                 c   s    t | | j||dV  d S )N)r   r=   )r   r   r   r*   r*   r+   r?     s   z&AnonymousFunctionExecution.get_filtersc                 C   r   r&   )r   rK   r/   r*   r*   r+   rK     r   z*AnonymousFunctionExecution.get_param_namesr   )r1   r2   r3   r   r?   rK   r*   r*   r*   r+   re   z  s    
re   c                       s6   e Zd Z fddZdd Zdd Zd
dd	Z  ZS )rv   c                    r   r&   )r   r,   _overloaded_functions)r)   r%   Zoverloaded_functionsr   r*   r+   r,     r   z OverloadedFunctionValue.__init__c                 C   sp   t jd| jdd g }|  D ]}|j|}|| ||r'|   S q| j	j
r.tS tdd |D S )NzExecute overloaded function %sZBLUE)colorc                 s   r   r&   r   )rG   Zfer*   r*   r+   r         z5OverloadedFunctionValue.py__call__.<locals>.<genexpr>)r   r   Z_wrapped_valuerl   r   rC   r   Zmatches_signaturer0   rq   Zis_analysisr   r   r   )r)   rc   Zfunction_executions	signaturer`   r*   r*   r+   rd     s   

z"OverloadedFunctionValue.py__call__c                 C   r|   r&   )r   r/   r*   r*   r+   rk     r~   z/OverloadedFunctionValue.get_signature_functionsTc                 C   s   dd dd | jD  S )Nz	Union[%s]rX   c                 s   r   r&   )rR   rh   r*   r*   r+   r     r   z8OverloadedFunctionValue.get_type_hint.<locals>.<genexpr>)r\   r   )r)   r^   r*   r*   r+   rR     s   z%OverloadedFunctionValue.get_type_hintrn   )r1   r2   r3   r,   rd   rk   rR   r   r*   r*   r   r+   rv     s
    rv   c                 c   s    dd }|j dkrd S ||r|V  	 t| |jd}||jj}t|ts)J |s-d S d}|D ]}|jj	}|j dkrG||rG|}d}|V  q1|sLd S q)Nc                 S   sb   | j jdkr/| j jd }|jdkr|g}n|j}|D ]}|jd }|jdkr.|jdkr. dS qdS )	NZ	decoratedr   	decoratorr   rE   overloadTF)r   rM   r]   r   )r   Z
decoratorsr   Zdotted_namer*   r*   r+   _is_overload_decorated  s   

z8_find_overload_functions.<locals>._is_overload_decoratedrL   T)r   Fr   )
rM   r   r.   getrE   r   
isinstancert   Z	tree_namer   )rr   r-   r   filterr   foundrE   r   r*   r*   r+   ru     s4   
ru   N)9Zparso.pythonr   Zjedir   Zjedi.inference.cacher   r   Zjedi.inferencer   r   r   r	   Zjedi.inference.signaturer   Zjedi.inference.filtersr   r   r   Zjedi.inference.namesr   r   r   r   r   Zjedi.inference.base_valuer   r   r   r   r   Zjedi.inference.lazy_valuer   r   r   Zjedi.inference.contextr   r   Zjedi.inference.valuer   r   Zjedi.inference.parser_cacher    Zjedi.inference.helpersr!   Zjedi.inference.gradual.genericsr#   r$   r7   r<   ro   r   rp   r   rf   re   rv   ru   r*   r*   r*   r+   <module>   s<    G-	 