o
    Zh/                     @   s:  d dl 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mZ d dlmZmZmZ d d	lmZmZmZ d d
lmZ d dlmZ d&ddZG dd deZdd Zdd Z dd Z!G dd dZ"G dd de"Z#dd Z$G dd de#Z%G dd de#Z&G d d! d!e"Z'd'd"d#Z(d$d% Z)dS )(    N)zip_longest)tree)debug)PushBackIterator)analysis)LazyKnownValueLazyKnownValuesLazyTreeValueget_merged_lazy_value)	ParamNameTreeNameDefinitionAnonymousParamName)	NO_VALUESValueSetContextualizedNode)iterable)%inference_state_as_method_param_cachec              	   C   sV   |dkrdS | D ] }z|j }W n	 ty   Y qw | D ]}t| |d  qqdS )z"Helper method for static analysis.
   N   )
py__iter__AttributeErrortry_iter_contentinfer)typesdepthtypfZ
lazy_value r   O/var/www/html/lang_env/lib/python3.10/site-packages/jedi/inference/arguments.pyr      s   

r   c                   @   s   e Zd ZdS )
ParamIssueN)__name__
__module____qualname__r   r   r   r   r   "   s    r   c                    s    fdd}|S )aN  
    Transforms a function or method with arguments to the signature that is
    given as an argument clinic notation.

    Argument clinic is part of CPython and used for all the functions that are
    implemented in C (Python 3.7):

        str.split.__text_signature__
        # Results in: '($self, /, sep=None, maxsplit=-1)'
    c                    s    fdd}|S )Nc                    s>   zt t| j| }W n ty   t Y S w | g|R  S N)tupleiterate_argument_clinicinference_stater   r   )value	argumentsargs)clinic_stringfuncr   r   wrapper2   s   
z?repack_with_argument_clinic.<locals>.decorator.<locals>.wrapperr   )r+   r,   r*   )r+   r   	decorator1   s   z.repack_with_argument_clinic.<locals>.decoratorr   )r*   r.   r   r-   r   repack_with_argument_clinic&   s   r/   c                 c   s   t t|}t| }t|D ]x\}\}}}}	|	dkrEg }
|D ]\}}|dur2|||f  n|
| q!tt	| |
gV  |
 q|	dkrLt
 t|d\}}|dur^td t|du rp|sptd|t|| t|du rvtn| }|s|std| t|V  qdS )z;Uses a list with argument clinic information (see PEP 436).r   N   )NNzAKeyword arguments in argument clinic are currently not supported.z4TypeError: %s expected at least %s arguments, got %sz$argument_clinic "%s" not resolvable.)list_parse_argument_clinicr   unpack	enumerateZ	push_backappendr   r   Z	FakeTupleNotImplementedErrornextr   warningr   lenr   r   )r&   r(   r*   Zclinic_argsiteratorinameoptionalallow_kwargsstarsZlazy_valueskeyargumentZ	value_setr   r   r   r%   B   s>   

r%   c                 c   s    d}d}| rHt d| }| t|dd  } |ds d}q|p(t|d}|d}|d}||d  }||||fV  |rDd}| sd S d S )NFz%(?:(?:(\[),? ?|, ?|)(\**\w+)|, ?/)\]*r   r0   Tr   *)rematchr9   groupboolcount)stringr>   r=   rD   wordr?   r   r   r   r2   i   s"   


r2   c                   @   s   e Zd ZdddZdd ZdS )_AbstractArgumentsMixinNc                 C      t r#   r6   )selffuncdefr   r   r   r3         z_AbstractArgumentsMixin.unpackc                 C   s   g S r#   r   rM   r   r   r   get_calling_nodes   rO   z)_AbstractArgumentsMixin.get_calling_nodesr#   )r    r!   r"   r3   rQ   r   r   r   r   rJ      s    
rJ   c                   @   s   e Zd ZdZdZdZdS )AbstractArgumentsN)r    r!   r"   contextargument_nodetrailerr   r   r   r   rR      s    rR   c                 c   s    | d u rd S | j dkr| j dkr| jd dv sd| fV  d S t| j}|D ]H}|dkr-q&|dv rEt|d }|d us<J t|j|fV  q&|j dkri|jd dv rit|jdksZJ t|jd j|jd fV  q&d|fV  q&d S )NarglistrA   r   )rB   z**,r0   r   )typechildreniterr7   r9   r'   )rV   r:   childcr   r   r   unpack_arglist   s*   




r]   c                   @   sR   e Zd ZdddZee dd ZdddZdd	 Zd
d Z	dd Z
dd ZdS )TreeArgumentsNc                 C   s   || _ || _|| _|| _dS )zS
        :param argument_node: May be an argument_node or a list of nodes.
        N)rT   rS   _inference_staterU   )rM   r&   rS   rT   rU   r   r   r   __init__   s   
zTreeArguments.__init__c                 O   s   | |i |S r#   r   )clsr)   kwargsr   r   r   create_cached   s   zTreeArguments.create_cachedc                 #   sN   g }t jD ]\} |dkr7j } fdd|D }tt| D ]}d tdd |D fV  q'q|dkrRj }|D ]}tj| E d H  qCq jdkr j	}t
|dkrq||d jtj|d f q j	d }	|	jd	kr|	j	d }	tjjj|	 j	d d
}
d t|
fV  qd tj fV  q|E d H  d S )Nr   c                    s   g | ]
}t j| qS r   )_iterate_star_argsrS   ).0aelrN   rM   r   r   
<listcomp>   s    z(TreeArguments.unpack.<locals>.<listcomp>c                 S   s   g | ]}|d ur|qS r#   r   )re   vr   r   r   ri      s    r0   rA      r   Zcomp_for)Zdefining_contextZsync_comp_for_nodeZ
entry_node)r]   rT   rS   Z
infer_noder1   r   r
   _star_star_dictrX   rY   r9   r5   r'   r	   r   ZGeneratorComprehensionr_   r   )rM   rN   Z
named_args
star_countZarrays	iteratorsvaluesdctr\   Zsync_comp_forcompr   rg   r   r3      sD   

"


zTreeArguments.unpackc                 c   sV    t | jD ]"\}}d }|jdkr"t|jdkr"|jd d d \}}|||fV  qd S )NrA   rk   r0   )r]   rT   rX   r9   rY   )rM   rm   rA   defaultr   r   r   _as_tree_tuple_objects   s   
z$TreeArguments._as_tree_tuple_objectsc                 c   s:    |   D ]\}}}|rt|tjsqt| j|V  qd S r#   )rs   
isinstancer   Namer   rS   )rM   r<   rr   rm   r   r   r   iter_calling_names_with_star   s   z*TreeArguments.iter_calling_names_with_starc                 C      d| j j| jf S Nz<%s: %s>)	__class__r    rT   rP   r   r   r   __repr__      zTreeArguments.__repr__c                 C   s   g }| }||vrKt |tsn=|| tt| D ]+}| }t|dkr) nt |d tr4g   S t |d t	s= n
|d 
 }|j} ||vs|jd urXt|j|jgS |jd uret|j|jgS g S )Nr   r   )rt   r^   r5   reversedr1   rv   Zgotor9   r   r   Zget_executed_param_namer(   rT   r   rS   rU   )rM   Zold_arguments_listr(   Zcalling_namenamesZexecuted_param_namer   r   r   rQ      s.   



zTreeArguments.get_calling_nodesr#   )r    r!   r"   r`   classmethodr   rc   r3   rs   rv   rz   rQ   r   r   r   r   r^      s    
	
'r^   c                   @   s&   e Zd Zdd ZdddZdd ZdS )	ValuesArgumentsc                 C   
   || _ d S r#   )_values_list)rM   Zvalues_listr   r   r   r`        
zValuesArguments.__init__Nc                 c   s     | j D ]	}d t|fV  qd S r#   )r   r   )rM   rN   ro   r   r   r   r3     s   
zValuesArguments.unpackc                 C   rw   rx   )ry   r    r   rP   r   r   r   rz     r{   zValuesArguments.__repr__r#   )r    r!   r"   r`   r3   rz   r   r   r   r   r     s    
r   c                   @   sR   e Zd Zdd Zedd Zedd Zedd Zdd
dZdd Z	dd Z
d	S )TreeArgumentsWrapperc                 C   r   r#   )_wrapped_arguments)rM   r(   r   r   r   r`     r   zTreeArgumentsWrapper.__init__c                 C      | j jS r#   )r   rS   rP   r   r   r   rS        zTreeArgumentsWrapper.contextc                 C   r   r#   )r   rT   rP   r   r   r   rT   !  r   z"TreeArgumentsWrapper.argument_nodec                 C   r   r#   )r   rU   rP   r   r   r   rU   %  r   zTreeArgumentsWrapper.trailerNc                 C   rK   r#   rL   )rM   r+   r   r   r   r3   )  rO   zTreeArgumentsWrapper.unpackc                 C   s
   | j  S r#   )r   rQ   rP   r   r   r   rQ   ,  r   z&TreeArgumentsWrapper.get_calling_nodesc                 C   rw   rx   )ry   r    r   rP   r   r   r   rz   /  r{   zTreeArgumentsWrapper.__repr__r#   )r    r!   r"   r`   propertyrS   rT   rU   r3   rQ   rz   r   r   r   r   r     s    



r   c                 c   sf    | ds|d urd|jj|f }tj| d||d z|j}W n
 ty*   Y d S w | E d H  d S )N__iter__z;TypeError: %s() argument after * must be a sequence, not %sztype-error-starmessage)Zpy__getattribute__r<   r'   r   addr   r   )rS   array
input_noderN   mZiter_r   r   r   rd   3  s   


rd   c                 C   sr   ddl m} t||r|jjdkri S t|tjr"|jdkr"| S |d ur7d|jj	|f }t
j| d||d i S )Nr   )CompiledInstancedictz9TypeError: %s argument after ** must be a mapping, not %sztype-error-star-starr   )Zjedi.inference.value.instancer   rt   r<   Zstring_namer   SequenceZ
array_typeZexact_key_itemsr'   r   r   )rS   r   r   rN   r   r   r   r   r   rl   B  s   
rl   )r   r#   )*rC   	itertoolsr   Zparso.pythonr   Zjedir   Zjedi.inference.utilsr   Zjedi.inferencer   Zjedi.inference.lazy_valuer   r   r	   r
   Zjedi.inference.namesr   r   r   Zjedi.inference.base_valuer   r   r   Zjedi.inference.valuer   Zjedi.inference.cacher   r   	Exceptionr   r/   r%   r2   rJ   rR   r]   r^   r   r   rd   rl   r   r   r   r   <module>   s0    
'g
