o
    ï›hº/  ã                   @   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   úNc:\Users\shubh\Videos\agent\nova\Lib\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†|s†t 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
