o
    ˷e/                     @   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f
lazy_value r   O/var/www/ideatree/venv/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   r0   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	enumerate	push_backappendr   r   	FakeTupleNotImplementedErrornextr   warningr    lenr   r   )r'   r)   r+   clinic_argsiteratorinameoptionalallow_kwargsstarslazy_valueskeyargument	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   r1   Tr   *)rematchr<   groupboolcount)stringrB   rA   rJ   wordrC   r   r   r   r3   i   s"   


r3   c                   @   s   e Zd ZdddZdd ZdS )_AbstractArgumentsMixinNc                 C      t r$   r9   )selffuncdefr   r   r   r4         z_AbstractArgumentsMixin.unpackc                 C   s   g S r$   r   rS   r   r   r   get_calling_nodes   rU   z)_AbstractArgumentsMixin.get_calling_nodesr$   )r!   r"   r#   r4   rW   r   r   r   r   rP      s    
rP   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   rX      s    rX   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arglistrF   r   )rH   z**,r1   r   )typechildreniterr:   r<   r(   )r\   r>   childcr   r   r   unpack_arglist   s*   




rc   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)rZ   rY   _inference_stater[   )rS   r'   rY   rZ   r[   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_argsrY   ).0aelrT   rS   r   r   
<listcomp>   s    z(TreeArguments.unpack.<locals>.<listcomp>c                 S   s   g | ]}|d ur|qS r$   r   )rk   vr   r   r   ro      s    r1   rF      r   comp_for)defining_contextsync_comp_for_node
entry_node)rc   rZ   rY   
infer_noder2   r   r
   _star_star_dictr^   r_   r<   r7   r(   r	   r   GeneratorComprehensionre   r   )rS   rT   
named_args
star_countarrays	iteratorsvaluesdctrb   sync_comp_forcompr   rm   r   r4      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 )NrF   rq   r1   )rc   rZ   r^   r<   r_   )rS   rz   rF   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$   )r   
isinstancer   Namer   rY   )rS   r@   r   rz   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!   rZ   rV   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   )r   rd   r7   reversedr2   r   gotor<   r   r   get_executed_param_namer)   rZ   r   rY   r[   )rS   old_arguments_listr)   calling_namenamesexecuted_param_namer   r   r   rW      s.   



zTreeArguments.get_calling_nodesr$   )r!   r"   r#   rf   classmethodr   ri   r4   r   r   r   rW   r   r   r   r   rd      s    
	
'rd   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)rS   values_listr   r   r   rf        
zValuesArguments.__init__Nc                 c   s     | j D ]	}d t|fV  qd S r$   )r   r   )rS   rT   r}   r   r   r   r4     s   
zValuesArguments.unpackc                 C   r   r   )r   r!   r   rV   r   r   r   r     r   zValuesArguments.__repr__r$   )r!   r"   r#   rf   r4   r   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)rS   r)   r   r   r   rf     r   zTreeArgumentsWrapper.__init__c                 C      | j jS r$   )r   rY   rV   r   r   r   rY        zTreeArgumentsWrapper.contextc                 C   r   r$   )r   rZ   rV   r   r   r   rZ   !  r   z"TreeArgumentsWrapper.argument_nodec                 C   r   r$   )r   r[   rV   r   r   r   r[   %  r   zTreeArgumentsWrapper.trailerNc                 C   rQ   r$   rR   )rS   r,   r   r   r   r4   )  rU   zTreeArgumentsWrapper.unpackc                 C   s
   | j  S r$   )r   rW   rV   r   r   r   rW   ,  r   z&TreeArgumentsWrapper.get_calling_nodesc                 C   r   r   )r   r!   r   rV   r   r   r   r   /  r   zTreeArgumentsWrapper.__repr__r$   )r!   r"   r#   rf   propertyrY   rZ   r[   r4   rW   r   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)py__getattribute__r@   r(   r   addr   r   )rY   array
input_noderT   miter_r   r   r   rj   3  s   


rj   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   )jedi.inference.value.instancer   r   r@   string_namer   Sequence
array_typeexact_key_itemsr(   r   r   )rY   r   r   rT   r   r   r   r   r   rw   B  s   
rw   )r   r$   )*rI   	itertoolsr   parso.pythonr   jedir   jedi.inference.utilsr   jedi.inferencer   jedi.inference.lazy_valuer   r   r	   r
   jedi.inference.namesr   r   r   jedi.inference.base_valuer   r   r   jedi.inference.valuer   jedi.inference.cacher   r   	Exceptionr    r0   r&   r3   rP   rX   rc   rd   r   r   rj   rw   r   r   r   r   <module>   s0    
'g
