o
    ˷eW                     @   s6  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
 d dlmZmZ d dlmZmZ d d	l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 d dlm Z  d dl!m"Z"m#Z# d dl$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* d dl+m,Z, d dl-m.Z. d dl/m0Z0m1Z1 G dd deZ2G dd deZ3G dd de(Z4G dd de)Z5G dd deZ6G dd de6Z7G dd de6Z8G d d! d!e8Z9G d"d# d#e8Z:G d$d% d%e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 d0d1 d1eZAG d2d3 d3e,ZBG d4d5 d5e#ZCd6S )7    )abstractproperty)search_ancestor)debug)settings)compiled)CompiledValueFilter)values_from_qualified_namesis_big_annoying_library)AbstractFilter AnonymousFunctionExecutionFilter)	ValueNameTreeNameDefinition	ParamNameNameWrapper)Value	NO_VALUESValueSetiterator_to_value_setValueWrapper)LazyKnownValueLazyKnownValues)inference_state_method_cache)ValuesArgumentsTreeArgumentsWrapper)FunctionValueFunctionMixinOverloadedFunctionValueBaseFunctionExecutionContextFunctionExecutionContextFunctionNameInClass)ClassFilter)get_dynamic_array_instance)function_is_staticmethodfunction_is_classmethodc                       s,   e Zd Z fddZdd Zdd Z  ZS )InstanceExecutedParamNamec                    s   t  j||d d || _d S )N	argumentssuper__init__	_instance)selfinstancefunction_value	tree_name	__class__ T/var/www/ideatree/venv/lib/python3.10/site-packages/jedi/inference/value/instance.pyr)      s   
z"InstanceExecutedParamName.__init__c                 C   s   t | jgS N)r   r*   r+   r1   r1   r2   infer       zInstanceExecutedParamName.inferc                 C      dS NTr1   r4   r1   r1   r2   matches_signature#      z+InstanceExecutedParamName.matches_signature)__name__
__module____qualname__r)   r5   r9   __classcell__r1   r1   r/   r2   r$      s    r$   c                       s(   e Zd Z fddZ fddZ  ZS )AnonymousMethodExecutionFilterc                       t  j|i | || _d S r3   r'   r+   r,   argskwargsr/   r1   r2   r)   (      
z'AnonymousMethodExecutionFilter.__init__c                    sT   |j dkr#t| jjrt| j | j|S t| jjs#t| j| j|S t 	||S Nr   )
position_indexr#   _function_value	tree_noder$   r*   py__class__r"   r(   _convert_param)r+   paramnamer/   r1   r2   rJ   ,   s   
z-AnonymousMethodExecutionFilter._convert_param)r;   r<   r=   r)   rJ   r>   r1   r1   r/   r2   r?   '   s    r?   c                       s.   e Zd Z fddZdddZdd Z  ZS )	AnonymousMethodExecutionContextc                       t  | || _d S r3   r(   r)   r,   )r+   r,   valuer/   r1   r2   r)   >      
z(AnonymousMethodExecutionContext.__init__Nc                 c   s    t | j| | j||dV  d S )N)until_positionorigin_scope)r?   r,   _value)r+   rR   rS   r1   r1   r2   get_filtersB   s   
z+AnonymousMethodExecutionContext.get_filtersc                 C   s,   t | j }t| j| j|d j|d< |S rE   )listrT   get_param_namesr$   r,   r.   )r+   param_namesr1   r1   r2   rW   I   s   z/AnonymousMethodExecutionContext.get_param_names)NN)r;   r<   r=   r)   rU   rW   r>   r1   r1   r/   r2   rM   =   s    
rM   c                       s   e Zd Z fddZ  ZS )MethodExecutionContextc                    r@   r3   rO   rA   r/   r1   r2   r)   U   rD   zMethodExecutionContext.__init__)r;   r<   r=   r)   r>   r1   r1   r/   r2   rY   T   s    rY   c                       s   e Zd ZdZ f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d Zdd Zd ddZ fddZd! fdd	Zdd Z  ZS )"AbstractInstanceValuer,   c                    s   t  || || _d S r3   )r(   r)   class_value)r+   inference_stateparent_contextr[   r/   r1   r2   r)   ]   s   
zAbstractInstanceValue.__init__c                 C   r7   r8   r1   r4   r1   r1   r2   is_instancec   r:   z!AbstractInstanceValue.is_instancec                 C   s
   | j  S r3   )r[   get_qualified_namesr4   r1   r1   r2   r_   f   s   
z)AbstractInstanceValue.get_qualified_namesc                 C      | j S r3   r[   r4   r1   r1   r2   get_annotated_class_objecti      z0AbstractInstanceValue.get_annotated_class_objectc                 C   r`   r3   ra   r4   r1   r1   r2   rI   l   rc   z!AbstractInstanceValue.py__class__c                 C   s   d S r3   r1   r4   r1   r1   r2   
py__bool__o      z AbstractInstanceValue.py__bool__c                 C   s   t r3   )NotImplementedErrorr4   r1   r1   r2   rL   s   re   zAbstractInstanceValue.namec                    s*     d  j} fdd| D S )N__call__c                       g | ]}|  qS r1   bind).0sr4   r1   r2   
<listcomp>y       z8AbstractInstanceValue.get_signatures.<locals>.<listcomp>)py__getattribute__	py__get__r[   get_signatures)r+   
call_funcsr1   r4   r2   rq   w   s   z$AbstractInstanceValue.get_signaturesc                 C   s,   | j ddD ]}||}|r|  S qg S )NF)include_self_names)rU   get)r+   rL   filternamesr1   r1   r2   get_function_slot_names{   s   
z-AbstractInstanceValue.get_function_slot_namesc                    s   t  fdd|D S )Nc                 3   s    | ]
}|  j  V  qd S r3   )r5   execute_with_valuesrk   rL   inferred_argsr1   r2   	<genexpr>   s
    
z?AbstractInstanceValue.execute_function_slots.<locals>.<genexpr>)r   	from_sets)r+   rv   r{   r1   rz   r2   execute_function_slots   s   z,AbstractInstanceValue.execute_function_slotsTc                 C   s   |   S r3   )
py__name__)r+   add_class_infor1   r1   r2   get_type_hint   s   z#AbstractInstanceValue.get_type_hintc                    s>   |  d}|st ||S t|g t fdd|D S )N__getitem__c                 3       | ]
}|   V  qd S r3   r5   executery   rB   r1   r2   r|          z6AbstractInstanceValue.py__getitem__.<locals>.<genexpr>)rw   r(   py__getitem__r   r   r}   )r+   index_value_setcontextualized_noderv   r/   r   r2   r      s   

z#AbstractInstanceValue.py__getitem__Nc                    s0    dst  S  fdd}| S )N__iter__c                  3   s&     D ]
} |  E d H  qd S r3   )r~   
py__next__)	generatorr   iter_slot_namesr+   r1   r2   iterate   s   z1AbstractInstanceValue.py__iter__.<locals>.iterate)rw   r(   
py__iter__)r+   r   r   r/   r   r2   r      s
   
z AbstractInstanceValue.py__iter__c                 C      d| j j| jf S )Nz
<%s of %s>)r0   r;   r[   r4   r1   r1   r2   __repr__      zAbstractInstanceValue.__repr__)Tr3   )r;   r<   r=   api_typer)   r^   r_   rb   rI   rd   r   rL   rq   rw   r~   r   r   r   r   r>   r1   r1   r/   r2   rZ   Z   s"    



rZ   c                       s:   e Zd Z fddZdddZedd Zd	d
 Z  ZS )CompiledInstancec                    s   t  ||| || _d S r3   )r(   r)   
_argumentsr+   r\   r]   r[   r&   r/   r1   r2   r)      s   
zCompiledInstance.__init__NTc                 c   s2    |   }|j|dd}|D ]}t| |V  qd S NT)rS   r^   )rb   rU   CompiledInstanceClassFilter)r+   rS   rs   r[   class_filtersfr1   r1   r2   rU      s   zCompiledInstance.get_filtersc                 C   s   t | | jjjS r3   )r   CompiledValueNamer[   rL   string_namer4   r1   r1   r2   rL         zCompiledInstance.namec                 C   r7   )NFr1   r4   r1   r1   r2   is_stub   r:   zCompiledInstance.is_stubr8   )	r;   r<   r=   r)   rU   propertyrL   r   r>   r1   r1   r/   r2   r      s    
	
r   c                       sf   e Zd Zedd Zedd ZdddZe d	d
 Zdd Z	dddZ
 fddZdd Z  ZS )_BaseTreeInstancec                 C   s(   | j  }|dv r| j  r|S d S )N)rV   setdict)r[   r   r]   get_root_contextis_builtins_moduler+   rL   r1   r1   r2   
array_type   s   
z_BaseTreeInstance.array_typec                 C   s   t | | jjjS r3   )r   r[   rL   r.   r4   r1   r1   r2   rL      s   z_BaseTreeInstance.nameNTc                 c   s    |   }|r| D ]}| st| || |V  q|j|dd}|D ]}t|tr3t| |V  q%t|t	r?t
| |V  q%|V  q%d S r   )rb   	py__mro__is_compiledSelfAttributeFilter
as_contextrU   
isinstancer    InstanceClassFilterr   r   )r+   rS   rs   r[   clsr   r   r1   r1   r2   rU      s$   

z_BaseTreeInstance.get_filtersc                 C   sh   |}	 |}t |dd}|j|u r.t||}t| ||}|jjdkr)|| j}n| }nq|	|S )NTfuncdefclassdefr)   )
r   rH   r   from_contextBoundMethodrL   rP   r   r   create_context)r+   class_contextnodenew	func_nodefuncbound_methodcontextr1   r1   r2   create_instance_context   s   

z)_BaseTreeInstance.create_instance_contextc                 C   sH   |   rtS t| j|}t| jrtS | dp| d}| ||S )z
        Since nothing was inferred, now check the __getattr__ and
        __getattribute__ methods. Stubs don't need to be checked, because
        they don't contain any logic.
        __getattr____getattribute__)	r   r   r   create_simple_objectr\   r	   r]   rw   r~   )r+   r   rL   rv   r1   r1   r2   py__getattribute__alternatives   s   
	
z0_BaseTreeInstance.py__getattribute__alternativesc                 c   s8    d}|  |}|rt| |V  d S td|  d S )N__next__z(Instance has no __next__ function in %s.)rw   r   r~   r   warning)r+   r   rL   next_slot_namesr1   r1   r2   r     s   

z_BaseTreeInstance.py__next__c                    s2   |  d}|st  S t fdd|D S )Nrg   c                 3   r   r3   r   ry   r%   r1   r2   r|     r   z/_BaseTreeInstance.py__call__.<locals>.<genexpr>)rw   r(   
py__call__r   r}   )r+   r&   rv   r/   r%   r2   r     s   
z_BaseTreeInstance.py__call__c                 C   sj   | j  D ]}|| ||}|tur|  S q| d}|r0|du r)t| jd}| |||S t	| gS )z"
        obj may be None.
        __get__NNone)
r[   r   py__get__on_classNotImplementedrw   r   builtin_from_namer\   r~   r   )r+   r,   r[   r   resultrv   r1   r1   r2   rp     s   

z_BaseTreeInstance.py__get__r8   r3   )r;   r<   r=   r   r   rL   rU   r   r   r   r   r   rp   r>   r1   r1   r/   r2   r      s    





r   c                       sR   e Zd Z fddZedddd Zdd Zd	d
 Z fddZdd Z	  Z
S )TreeInstancec                    sJ   |  dv r|  rtjrt| |}t ||| || _|j	| _	d S )N)rV   r   )
r   r   r   r   dynamic_array_additionsr!   r(   r)   r   rH   r   r/   r1   r2   r)   2  s   

zTreeInstance.__init__N)defaultc           
      C   s   ddl m}m} t| | j}| jd D ]C}|jj	}|d u s*|j
dks*||s+qt| | j |j}||}||||}|rY| j||j||\}	tjd|	dd |	  S qd S )Nr   )py__annotations__infer_type_vars_for_executionr)   r   zInferred instance value as %sBLUE)color)!jedi.inference.gradual.annotationr   r   InstanceArgumentsr   r[   ro   rq   rP   rH   typer9   r   r   define_genericsr   dbg)
r+   r   r   rB   	signaturer   r   all_annotationstype_var_dictdefinedr1   r1   r2   _get_annotated_class_objectA  s&   z(TreeInstance._get_annotated_class_objectc                 C   s   |   p| jS r3   )r   r[   r4   r1   r1   r2   rb   [     z'TreeInstance.get_annotated_class_objectc                 C   sv   t }| jdkr9t| j D ]*\}\}}|d u r*|dkr*|tdd | D O }|r8|tt	| j
|gO }q|S )Nr   r   c                 s   s"    | ]}|j d kr| V  qdS r   N)r   get_key_values)rk   vr1   r1   r2   r|   c  s    
z.TreeInstance.get_key_values.<locals>.<genexpr>)r   r   	enumerater   unpackr   r}   r5   r   r   r\   )r+   valuesikeyr,   r1   r1   r2   r   ^  s   


zTreeInstance.get_key_valuesc                    sx   | j dkr6tt| j D ]'\}}|d u r+t fdd| D }|r*|  S q| kr5|   S qt 	 S )Nr   c                 3   s$    | ]}|j d kr| V  qdS r   )r   py__simple_getitem__)rk   	dct_valueindexr1   r2   r|   {  s    
z4TreeInstance.py__simple_getitem__.<locals>.<genexpr>)
r   reversedrV   r   r   r   r}   r5   r(   r   )r+   r   r   lazy_contextr   r/   r   r2   r   p  s   
z!TreeInstance.py__simple_getitem__c                 C   s   d| j j| j| jf S )Nz<%s of %s(%s)>)r0   r;   r[   r   r4   r1   r1   r2   r     s   zTreeInstance.__repr__)r;   r<   r=   r)   r   r   rb   r   r   r   r>   r1   r1   r/   r2   r   1  s    
r   c                   @   s   e Zd ZdZdS )AnonymousInstanceN)r;   r<   r=   r   r1   r1   r1   r2   r     s    r   c                   @   s   e Zd Zedd ZdS )CompiledInstanceNamec                 c   s2    | j  D ]}|jdkrt|V  q|V  qd S )Nfunction)_wrapped_namer5   r   CompiledBoundMethodr+   result_valuer1   r1   r2   r5     s   
zCompiledInstanceName.inferN)r;   r<   r=   r   r5   r1   r1   r1   r2   r     s    r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
r   c                 C      || _ || _d S r3   r*   _class_filter)r+   r,   r   r1   r1   r2   r)        
z$CompiledInstanceClassFilter.__init__c                 C      |  | j|S r3   _convertr   rt   r   r1   r1   r2   rt     r   zCompiledInstanceClassFilter.getc                 C      |  | j S r3   r   r   r   r4   r1   r1   r2   r        z"CompiledInstanceClassFilter.valuesc                 C   s   dd |D S )Nc                 S   s   g | ]}t |qS r1   )r   rk   nr1   r1   r2   rm     s    z8CompiledInstanceClassFilter._convert.<locals>.<listcomp>r1   r+   rv   r1   r1   r2   r     r   z$CompiledInstanceClassFilter._convertN)r;   r<   r=   r)   rt   r   r   r1   r1   r1   r2   r     s
    r   c                       sr   e Zd Z fddZdd Ze fddZdd Zd	d
 ZdddZ	dd Z
dd Z fddZdd Z  ZS )r   c                    s   t  | || _|| _d S r3   )r(   r)   r,   _class_context)r+   r,   r   r   r/   r1   r2   r)     s   
zBoundMethod.__init__c                 C   r7   r8   r1   r4   r1   r1   r2   is_bound_method  r:   zBoundMethod.is_bound_methodc                    s   t | jt jS r3   )r   r   r(   rL   r4   r/   r1   r2   rL     s   zBoundMethod.namec                 C   s   t | jdd\}|S )Ntypes
MethodType)r   r\   )r+   cr1   r1   r2   rI     s   zBoundMethod.py__class__c                 C   s   |d usJ t | j|S r3   )r   r,   r+   r&   r1   r1   r2   _get_arguments  s   zBoundMethod._get_argumentsNc                 C   s,   |d u r
t | j| S | |}t| j| |S r3   )rM   r,   r  rY   r  r1   r1   r2   _as_context  s   
zBoundMethod._as_contextc                 C   s0   t | jtr| j| |S | |}| S r3   )r   _wrapped_valuer   r   r  r   r5   )r+   r&   function_executionr1   r1   r2   r     s   
zBoundMethod.py__call__c                        fdd j  D S )Nc                       g | ]
}t  j j|qS r1   )r   r,   r   )rk   r   r4   r1   r2   rm     s    z7BoundMethod.get_signature_functions.<locals>.<listcomp>)r  get_signature_functionsr4   r1   r4   r2   r    s   
z#BoundMethod.get_signature_functionsc                    s    fddt   D S )Nc                    rh   r1   ri   rk   sigr4   r1   r2   rm     rn   z.BoundMethod.get_signatures.<locals>.<listcomp>)r(   rq   r4   r/   r4   r2   rq        zBoundMethod.get_signaturesc                 C   r   )Nz<%s: %s>)r0   r;   r  r4   r1   r1   r2   r     r   zBoundMethod.__repr__r3   )r;   r<   r=   r)   r   r   rL   rI   r  r  r   r  rq   r   r>   r1   r1   r/   r2   r     s    
r   c                   @   s   e Zd Zdd Zdd ZdS )r   c                 C   r7   r8   r1   r4   r1   r1   r2   r     r:   z#CompiledBoundMethod.is_bound_methodc                    r	  )Nc                    rh   r1   ri   r  r4   r1   r2   rm     rn   z6CompiledBoundMethod.get_signatures.<locals>.<listcomp>)r  rq   r4   r1   r4   r2   rq     r  z"CompiledBoundMethod.get_signaturesN)r;   r<   r=   r   rq   r1   r1   r1   r2   r     s    r   c                       s<   e Zd ZdZdd Zedd Zdd Z fdd	Z  Z	S )
SelfNamez9
    This name calculates the parent_context lazily.
    c                 C   s   || _ || _|| _d S r3   )r*   r   r.   )r+   r,   r   r.   r1   r1   r2   r)     s   
zSelfName.__init__c                 C   s   | j | j| jS r3   )r*   r   r   r.   r4   r1   r1   r2   r]     r   zSelfName.parent_contextc                 C   r`   r3   r*   r4   r1   r1   r2   get_defining_qualified_value  rc   z%SelfName.get_defining_qualified_valuec                    s^   t | jd}|d ur*|jd jdkr*ddlm} || j|jd jd  }|r*|S t 	 S )N	expr_stmt   	annassignr   )infer_annotation)
r   r.   childrenr   r   r  r]   execute_annotationr(   r5   )r+   stmtr  r   r/   r1   r2   r5     s   
zSelfName.infer)
r;   r<   r=   __doc__r)   r   r]   r  r5   r>   r1   r1   r/   r2   r    s    
r  c                       s8   e Zd Z fddZedd Zdd Zdd Z  ZS )	LazyInstanceClassNamec                    rN   r3   r'   )r+   r,   class_member_namer/   r1   r2   r)     rQ   zLazyInstanceClassName.__init__c                 c   s0    | j  D ]}|| j| j E d H  qd S r3   )r   r5   rp   r*   rI   r   r1   r1   r2   r5     s   zLazyInstanceClassName.inferc                 C   s   |    S r3   )r5   rq   r4   r1   r1   r2   rq     r6   z$LazyInstanceClassName.get_signaturesc                 C   r`   r3   r  r4   r1   r1   r2   r    rc   z2LazyInstanceClassName.get_defining_qualified_value)	r;   r<   r=   r)   r   r5   rq   r  r>   r1   r1   r/   r2   r    s    
r  c                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )r   z
    This filter is special in that it uses the class filter and wraps the
    resulting names in LazyInstanceClassName. The idea is that the class name
    filtering can be very flexible and always be reflected in instances.
    c                 C   r   r3   r   )r+   r,   class_filterr1   r1   r2   r)     r   zInstanceClassFilter.__init__c                 C   r   r3   r   r   r1   r1   r2   rt     r   zInstanceClassFilter.getc                 C   r   r3   r   r4   r1   r1   r2   r     r   zInstanceClassFilter.valuesc                        fdd|D S )Nc                    s   g | ]}t  j|qS r1   )r  r*   r   r4   r1   r2   rm   #  s    
z0InstanceClassFilter._convert.<locals>.<listcomp>r1   r   r1   r4   r2   r   "  s   
zInstanceClassFilter._convertc                 C   r   )Nz<%s for %s>)r0   r;   r   r4   r1   r1   r2   r   (  r   zInstanceClassFilter.__repr__N)	r;   r<   r=   r  r)   rt   r   r   r   r1   r1   r1   r2   r     s    r   c                       sH   e Zd ZdZ fddZdd Zdd Zdd	 Zd
d Zdd Z	  Z
S )r   zU
    This class basically filters all the use cases where `self.*` was assigned.
    c                    s   t  j|||dd || _d S )NT)r[   node_contextrS   r^   r'   )r+   r,   instance_classr  rS   r/   r1   r2   r)   0  s   
zSelfAttributeFilter.__init__c                    s0   | j j| j j  fdd|D }| |S )Nc                    s*   g | ]}|j   k r k rn n|qS r1   )	start_posr   endstartr1   r2   rm   ;  s   * z/SelfAttributeFilter._filter.<locals>.<listcomp>)_parser_scoper   end_pos_filter_self_namesr   r1   r!  r2   _filter9  s   
zSelfAttributeFilter._filterc                 c   sj    |D ]/}|j }|jdkr2t|j jdkr2|jd dkr2| r2| |r2| |j jd |r2|V  qd S )Ntrailer   r   .)parentr   lenr  is_definition_access_possible_is_in_right_scope)r+   rv   rL   r(  r1   r1   r2   r&  >  s   
z&SelfAttributeFilter._filter_self_namesc                    s2    j |}|j||jd}t fdd|D S )N)positionc                 3   s8    | ]}|j d ko|j jdko|jj ju V  qdS )rK   r   N)r   r.   get_definitionrF   r]   rH   r$  r   r4   r1   r2   r|   M  s    

z9SelfAttributeFilter._is_in_right_scope.<locals>.<genexpr>)_node_contextr   gotor   any)r+   	self_namerL   self_contextrv   r1   r4   r2   r/  J  s
   z&SelfAttributeFilter._is_in_right_scopec                    r  )Nc                    r
  r1   )r  r*   r2  ry   r4   r1   r2   rm   U  s    z6SelfAttributeFilter._convert_names.<locals>.<listcomp>r1   r   r1   r4   r2   _convert_namesT  r   z"SelfAttributeFilter._convert_namesc                 C   s   |S r3   r1   r   r1   r1   r2   _check_flowsW  r:   z SelfAttributeFilter._check_flows)r;   r<   r=   r  r)   r'  r&  r/  r7  r8  r>   r1   r1   r/   r2   r   ,  s    	
r   c                       s&   e Zd Z fddZdddZ  ZS )r   c                    rN   r3   rO   )r+   r,   r&   r/   r1   r2   r)   \  rQ   zInstanceArguments.__init__Nc                 c   s(    d t | jfV  | j|E d H  d S r3   )r   r,   _wrapped_argumentsr   )r+   r   r1   r1   r2   r   `  s   zInstanceArguments.unpackr3   )r;   r<   r=   r)   r   r>   r1   r1   r/   r2   r   [  s    r   N)Dabcr   
parso.treer   jedir   r   jedi.inferencer   jedi.inference.compiled.valuer   jedi.inference.helpersr   r	   jedi.inference.filtersr
   r   jedi.inference.namesr   r   r   r   jedi.inference.base_valuer   r   r   r   r   jedi.inference.lazy_valuer   r   jedi.inference.cacher   jedi.inference.argumentsr   r   jedi.inference.value.functionr   r   r   r   r   r   jedi.inference.value.klassr    #jedi.inference.value.dynamic_arraysr!   jedi.parser_utilsr"   r#   r$   r?   rM   rY   rZ   r   r   r   r   r   r   r   r   r  r  r   r   r   r1   r1   r1   r2   <module>   sF     Mr[
3/