o
    ï›h&J  ã                   @   sz  d Z 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 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 edg d¢ƒZdd„ Zdd„ Zd=dd„Z dd„ Z!dd„ Z"dd„ Z#G dd „ d e$ƒZ%d!d"„ Z&d#d$„ Z'd%d&„ Z(d=d'd(„Z)G d)d*„ d*ƒZ*d+d,„ Z+d-d.„ Z,d/d0„ Z-d1d2„ Z.ed3ƒd4d5„ ƒZ/d6d7„ Z0d>d9d:„Z1d;d<„ Z2dS )?z
Helpers for the API
é    N)Ú
namedtuple)Údedent)Úchain©Úwraps)Ú	Parameter)ÚParser)Útree)Ú	NO_VALUES)Ú
infer_atom)Úinfer_call_of_leaf)Úget_string_value_set)Úsignature_time_cacheÚmemoize_method)Úget_parent_scopeÚCompletionParts)ÚpathZhas_dotÚnamec                 C   s
   |   |¡S ©N)Ú
startswith)ÚstringÚ	like_name© r   úFc:\Users\shubh\Videos\agent\nova\Lib\site-packages\jedi/api/helpers.pyÚ_start_match   s   
r   c                 C   sL   t |ƒdkr
|| v S |  |d ¡}|dkr$t| |d d … |dd … ƒS dS )Né   r   F)ÚlenÚfindÚ_fuzzy_match)r   r   Úposr   r   r   r      s   r   Fc                 C   s   |rt | |ƒS t| |ƒS r   )r   r   )r   r   Zfuzzyr   r   r   Úmatch&   s   

r    c                 C   s   t | dd„ d�S )Nc                 S   s$   t | jpdƒ| jp
d| jpd| jfS )NÚ r   )ÚstrÚmodule_pathÚlineÚcolumnr   )Úxr   r   r   Ú<lambda>/   s
    ýz$sorted_definitions.<locals>.<lambda>)Úkey)Úsorted)Zdefsr   r   r   Úsorted_definitions-   s   r*   c                 C   st   |   |¡}|d u s|jdv r%||d d  }t d|d |d … ¡ d¡S |jdvr,dS |jd |d |jd  … S )N)r   Ú
error_leafr   r   z(?!\d)\w+$|$)r   Úkeywordr!   )Úget_leaf_for_positionÚtypeÚreÚsearchÚgroupÚvalueÚ	start_pos)Zmodule_nodeÚlinesÚpositionÚleafr$   r   r   r   Úget_on_completion_name5   s   

r7   c                 C   sR   | |d d |d … }|d d |d … |d< |d |d d … |d< d  |¡S )Nr   r   éÿÿÿÿr!   )Újoin)Ú
code_linesr3   Úend_posr4   r   r   r   Ú	_get_codeC   s   
r<   c                   @   s   e Zd Zedd„ ƒZdS )ÚOnErrorLeafc                 C   s
   | j d S ©Nr   )Úargs©Úselfr   r   r   r+   N   s   
zOnErrorLeaf.error_leafN)Ú__name__Ú
__module__Ú__qualname__Úpropertyr+   r   r   r   r   r=   M   s    r=   c                 C   sÈ   |j |kr| ¡ }|d u rdS |jdk}|jdkr(| ¡ }|d u r#dS |jdks|jdks2|jdkrA|j d |d k r=dS t|ƒ‚|}	 |jjdv rKn|j}qD|r\|j d |d kr\dS t| | ¡ |ƒS )	Nr!   Únewliner+   r   r   T)Z
file_inputZsuiteZsimple_stmtr   )r3   Úget_previous_leafr.   r=   Úparentr<   Zget_start_pos_of_prefix)r:   r6   r5   Zis_after_newlineZ	user_stmtr   r   r   Ú_get_code_for_stackS   s0   



ýýrI   c                    s�   G dd„ dt ƒ‰ ‡ ‡‡fdd„}tt|||ƒƒ}d‰|d ˆ }tˆjdd�}z
|j||ƒd	� W n ˆ y=   |j Y S w td
t||ƒƒ ƒ‚)zU
    Returns the possible node names (e.g. import_from, xor_test or yield_stmt).
    c                   @   s   e Zd ZdS )z/get_stack_at_position.<locals>.EndMarkerReachedN)rB   rC   rD   r   r   r   r   ÚEndMarkerReached   s    rJ   c                 3   sZ   � ˆ  | ¡}|D ]"}|jˆkrˆ ƒ ‚|j ˆ¡rˆ ƒ ‚|j ˆ¡r'|V  ˆ ƒ ‚|V  qd S r   )Ú	_tokenizer   ÚprefixÚendswith)ÚcodeÚtokensÚtoken©rJ   ÚgrammarZsafewordr   r   Útokenize_without_endmarker‚   s   €

öz9get_stack_at_position.<locals>.tokenize_without_endmarkerZ)ZZZ_USER_WANTS_TO_COMPLETE_HERE_WITH_JEDIú T)Zerror_recovery)rO   z7This really shouldn't happen. There's a bug in Jedi:
%s)	Ú	Exceptionr   rI   r   Z_pgen_grammarÚparseÚstackÚSystemErrorÚlist)rR   r:   r6   r   rS   rN   Úpr   rQ   r   Úget_stack_at_position{   s    
ÿ
ÿÿr[   c                 C   s~   |j dkr|  ||¡S |j}t}|j dkr| |j¡}|S |j dkr)t||ƒ}|S t|tjƒr4t	||ƒS |j dv r=t
| ƒS |S )Nr   ÚatomÚtrailer)Zfstring_stringZfstring_startZfstring_end)r.   ÚinferrH   r
   Z
infer_noder   Ú
isinstancer	   ÚLiteralr   r   )Úinference_stateÚcontextr6   rH   Údefinitionsr   r   r   r^   ¥   s   

	
ø
û

r^   c                 c   sj   � | D ]/}|  ¡ r/tt| ¡ |d�ƒ}d}|r#|D ]	}|jd u r"d}q|r)|V  q|E d H  q|V  qd S )N)Úfollow_builtin_importsFT)Z	is_importrY   Úfilter_follow_importsZgotor3   )Únamesrd   r   Z	new_namesZfound_builtinÚnew_namer   r   r   re   ¹   s$   €þ
€ïre   c                   @   sP   e Zd Zdd„ Zedd„ ƒZedd„ ƒZedd„ ƒZd	d
„ Z	dd„ Z
dd„ ZdS )ÚCallDetailsc                 C   s   || _ || _|| _d S r   )Úbracket_leafÚ	_childrenÚ	_position)rA   ri   Úchildrenr5   r   r   r   Ú__init__Ï   s   
zCallDetails.__init__c                 C   ó   t | j| jƒd S r>   ©Ú_get_index_and_keyrj   rk   r@   r   r   r   ÚindexÔ   ó   zCallDetails.indexc                 C   rn   )Nr   ro   r@   r   r   r   Úkeyword_name_strØ   rr   zCallDetails.keyword_name_strc                 C   s   t t| j| jƒƒS r   )rY   Ú_iter_argumentsrj   rk   r@   r   r   r   Ú_list_argumentsÜ   rr   zCallDetails._list_argumentsc                 C   s\  d}t ƒ }d}|  ¡ }|s|rdS d S d}t|ƒD ]&\}\}}}	||	|dkB O }|r+q|d t|ƒkr?|	r;| |¡ q|d7 }qt|ƒD ]g\}}
|
 ¡ }|sg|tjkrW|  S |tjtj	fv rg||krg|  S |d uro|dkrs|dkr«|
j
|vr¢|tjks†|tjkr¢||kr¢|rŒ|  S |	r˜|
j
|kr—|  S n
|
j
 |¡r¢|  S |tjkr«|  S qDd S )Nr   r8   Fé   r   )Úsetru   Ú	enumerater   ÚaddZget_kindr   ÚVAR_POSITIONALÚPOSITIONAL_OR_KEYWORDÚPOSITIONAL_ONLYZstring_nameÚKEYWORD_ONLYr   ÚVAR_KEYWORD)rA   Zparam_namesZpositional_countZ
used_namesÚ
star_countr?   Zis_kwargÚiÚ	key_startÚ	had_equalÚ
param_nameÚkindr   r   r   Úcalculate_indexà   sV   €




ÿ
€zCallDetails.calculate_indexc                 c   s,   � t |  ¡ ƒD ]\}}}|r|r|V  qd S r   )rY   ru   )rA   r   r�   r‚   r   r   r   Úiter_used_keyword_arguments  s   €€þz'CallDetails.iter_used_keyword_argumentsc                 C   s:   d}|   ¡ d d… D ]\}}}|s|r |S |d7 }q
|S )Nr   r8   r   )ru   )rA   Úcountr   r�   r‚   r   r   r   Úcount_positional_arguments  s   
ÿz&CallDetails.count_positional_argumentsN)rB   rC   rD   rm   rE   rq   rs   r   ru   r…   r†   rˆ   r   r   r   r   rh   Î   s    


3rh   c                 #   sZ  � ‡ fdd„}‡ fdd„| D ƒ}|d j dkr$t|d jˆ ƒE d H  d S d}d}t|ƒD ]ß\}}|j d	kr�d
}|jd }|jd }	|	dkr`|	jˆ k rW|j dkrWd|jd
fV  n3d||ƒdfV  n*|dv rpt|jƒ||	ƒdfV  n| ¡ }
|
j dkr‡|
jˆ kr‡d||
ƒdfV  ndV  d}q,|j dkr½|jd d d… D ]}|j dkr¨d}|jd }|||ƒdfV  d}qštt|jƒd ƒ}q,t	|t
jƒrÕ|jdkrÕ|sÒ|ddfV  d}d}q,t	|t
jƒræ|jdv ræt|jƒ}q,|dk�r|d �rd
}||d  }|j dk�rd|jd
fV  ndV  d}q,|�s+|d j dk�r#|||d ƒdfV  d S |ddfV  d S d S )Nc                    s*   | j dkrd S | jd ˆ d | jd  … S )Nr   r   )r.   r2   r3   )r   ©r5   r   r   Úremove_after_pos"  s   
z)_iter_arguments.<locals>.remove_after_posc                    ó   g | ]	}|j ˆ k r|‘qS r   ©r3   ©Ú.0Úcr‰   r   r   Ú
<listcomp>(  ó    z#_iter_arguments.<locals>.<listcomp>r8   ÚarglistFr   ÚargumentTr   ú=r   )Ú*z**)r   NFZtestlist_star_exprrv   Z	star_exprú,r!   )r.   rt   rl   rx   r3   r2   r   Zget_first_leafÚboolr_   r	   Z
PythonLeaf)Únodesr5   rŠ   Únodes_beforeZprevious_node_yieldedZ
stars_seenr€   ÚnodeÚfirstÚsecondZ
first_leafÚnÚbeforer   r‰   r   rt   !  sh   €





€ürt   c                    s’   ‡ fdd„| D ƒ}|d j dkrt|d jˆ ƒS d}|d }|j dkr9|jd dkr9|jd jˆ kr9|jd	 j}n	|dkrB|d
 j}| d¡|fS )zG
    Returns the amount of commas and the keyword argument string.
    c                    r‹   r   rŒ   r�   r‰   r   r   r�   h  r‘   z&_get_index_and_key.<locals>.<listcomp>r8   r’   Nr“   r   r”   r   éþÿÿÿr–   )r.   rp   rl   r;   r2   r‡   )r˜   r5   r™   Zkey_strÚlastr   r‰   r   rp   d  s   
rp   c                 C   s„   t tt| jƒƒƒD ]6\}}|dkr?|j|kr?|dkr?| j|d … }| ¡ }|d u r*q	|jdks5|jjdv r?t||| |ƒ  S q	d S )Nú(r   r   )r]   r\   )	ÚreversedrY   rx   rl   r;   rG   r.   rH   rh   )rš   Úadditional_childrenr5   rq   Úelementrl   r   r   r   r   Ú&_get_signature_details_from_error_nodey  s   €ör¥   c                 C   s>  | j |dd�}|j|kr| ¡ }|d u rd S |j}|d ur�|jdv r$d S g }t|jƒD ](}|j|k rS|jdkrMt|||ƒ}|d urE|  S |j|dd…< q+| d|¡ q+|jdkr`|jd dksl|jdkr–|jd	 dkr–||jd
 u rx||j	ks–| ¡ }|d u r‚d S t
|jdkr�|jd n|jd	 |j|ƒS |j}|d usd S )NT)Zinclude_prefixes)ZfuncdefZclassdefZ	decoratedÚ
async_stmtZ
error_noder   r]   r¡   Ú	decoratorrv   r8   )r-   r3   rG   rH   r.   r¢   rl   r¥   Úinsertr;   rh   )Úmoduler5   r6   rš   r£   r�   Úresultr   r   r   Úget_signature_details‡  sH   



ÿ€ýÛ'r«   Zcall_signatures_validityc                 c   s”   � |d d }|| d|d … }||j d |… }d ||g ¡}t d|tj¡}	| ¡  ¡ }
|
du r8dV  n|
|	|j fV  t| || ¡ ƒV  dS )z'This function calculates the cache key.r   r   Nr!   z.*\()	r3   r9   r/   r    ÚDOTALLZget_root_contextZ
py__file__r^   rG   )ra   rb   ri   r:   Zuser_posÚ
line_indexZbefore_cursorZother_linesZwholeZbefore_bracketr#   r   r   r   Úcache_signatures¾  s   €
ýr®   c                    s   t ˆ ƒd‡ fdd„	ƒ}|S )Nc                    sÖ   |d u rt t| jƒdƒn|}d|  k rt| jƒks#tdƒ‚ tdƒ‚| j|d  }t|ƒ}| d¡r8|d8 }n	| d¡rA|d8 }|d u rG|n|}d|  krS|ks^n td||||f ƒ‚ˆ | ||g|¢R i |¤ŽS )Nr   r   z)`line` parameter is not in a valid range.z
rv   Ú
zH`column` parameter (%d) is not in a valid range (0-%d) for line %d (%r).)Úmaxr   Z_code_linesÚ
ValueErrorrM   )rA   r$   r%   r?   ÚkwargsÚline_stringZline_len©Úfuncr   r   ÚwrapperÕ  s$   ÿ


ÿÿz%validate_line_column.<locals>.wrapper)NNr   )rµ   r¶   r   r´   r   Úvalidate_line_columnÔ  s   r·   Tc                    sP   ‡ ‡fdd„}t t ˆ ¡  ¡ ¡ƒ}|s#‡fdd„‰‡fdd„|D ƒ}t||ƒS )zZ
    Returns a dictionary with name parts as keys and their call paths as
    values.
    c                    s   |   ¡ }ˆ r|pˆo| S r   )Zis_definition)r   Zis_def)rc   Ú
referencesr   r   Údef_ref_filterð  s   z(get_module_names.<locals>.def_ref_filterc                    s(   t | ƒ}|r|jdkr|j}|ˆ d fv S )Nr¦   )r   r.   rH   )r   Zparent_scope)r©   r   r   Úis_module_scope_nameû  s   z.get_module_names.<locals>.is_module_scope_namec                    s   g | ]}ˆ |ƒr|‘qS r   r   )rŽ   r�   )rº   r   r   r�     s    z$get_module_names.<locals>.<listcomp>)rY   r   Úfrom_iterableZget_used_namesÚvaluesÚfilter)r©   Z
all_scopesrc   r¸   r¹   rf   r   )rc   rº   r©   r¸   r   Úget_module_namesë  s   
r¾   c                 C   s*   |   d¡\}}}|dkrd}|| d¡fS )NrT   ÚdefÚfunctionÚ.)Ú
rpartitionÚsplit)r   r.   Ú_Zdotted_namesr   r   r   Úsplit_search_string  s   rÅ   )F)TF)3Ú__doc__r/   Úcollectionsr   Útextwrapr   Ú	itertoolsr   Ú	functoolsr   Úinspectr   Zparso.python.parserr   Zparso.pythonr	   Zjedi.inference.base_valuer
   Zjedi.inference.syntax_treer   Zjedi.inference.helpersr   Zjedi.inference.compiledr   Z
jedi.cacher   r   Zjedi.parser_utilsr   r   r   r   r    r*   r7   r<   rU   r=   rI   r[   r^   re   rh   rt   rp   r¥   r«   r®   r·   r¾   rÅ   r   r   r   r   Ú<module>   sJ    
	
(*
SC7

