
    Mh&J                        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 Zd Zd+dZ d Z!d Z"d Z# G d de$          Z%d Z&d Z'd Z(d+dZ) G d d           Z*d! Z+d" Z,d# Z-d$ Z. ed%          d&             Z/d' Z0d,d)Z1d* 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)pathhas_dotnamec                 ,    |                      |          S N)
startswith)string	like_names     P/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/jedi/api/helpers.py_start_matchr      s    Y'''    c                     t          |          dk    r|| v S |                     |d                   }|dk    r#t          | |dz   d          |dd                    S dS )N   r   F)lenfind_fuzzy_match)r   r   poss      r   r"   r"      sf    
9~~F""
++il
#
#C
axxF3788,im<<<5r   Fc                 F    |rt          | |          S t          | |          S r   )r"   r   )r   r   fuzzys      r   matchr&   &   s*     /FI...FI...r   c                 &    t          | d           S )Nc                 \    t          | j        pd          | j        pd| j        pd| j        fS )N r   )strmodule_pathlinecolumnr   )xs    r   <lambda>z$sorted_definitions.<locals>.<lambda>/   s1    s1=+>B'?'?'(v{'(x}1'(v'/ r   )key)sorted)defss    r   sorted_definitionsr3   -   s%    $ / / 0 0 0 0r   c                 ,   |                      |          }|	|j        dv rG||d         dz
           }t          j        d|d |d                                                d          S |j        dvrdS |j        d |d         |j        d         z
           S )N)r   
error_leafr   r   z(?!\d)\w+$|$)r   keywordr)   )get_leaf_for_positiontyperesearchgroupvalue	start_pos)module_nodelinespositionleafr,   s        r   get_on_completion_namerB   5   s    ,,X66D|ty$<<< Xa[1_%y$||*<==CCAFFF	-	-	-r:6x{T^A%66677r   c                     | |d         dz
  |d                  }|d         d |d                  |d<   |d         |d         d          |d<   d                     |          S )Nr   r   r)   )join)
code_linesr=   end_posr?   s       r   	_get_coderH   C   sb    y|a'
23Eb	+71:+&E"IQx	!&E!H775>>r   c                   $    e Zd Zed             ZdS )OnErrorLeafc                     | j         d         S Nr   )argsselfs    r   r5   zOnErrorLeaf.error_leafN   s    y|r   N)__name__
__module____qualname__propertyr5    r   r   rJ   rJ   M   s-          X  r   rJ   c                    |j         |k    r|                                }|dS |j        dk    }|j        dk    r#|                                }|dS |j        dk    #|j        dk    s|j        dk    r(|j         d         |d         k     rdS t          |          |}	 |j        j        dv rn|j        }|r|j         d         |d         k    rdS t          | |                                |          S )	Nr)   newliner5   r   r   T)
file_inputsuitesimple_stmtr   )r=   get_previous_leafr8   rJ   parentrH   get_start_pos_of_prefix)rF   rA   r@   is_after_newline	user_stmts        r   _get_code_for_stackr_   S   s*    ~!!%%''<2yI-
)y
 
 %%''<2 )y
 
 
 yL  DI$9$9>!x{**2 $		)$(NNN!(I	)
  	"1%33 r Y%F%F%H%H(SSSr   c                 n     G d dt                      fd}t          t          |||                    }d|dz   z   }t           j        d          }	 |                     ||                     n# $ r
 |j        cY S w xY wt          d	t           ||                    z            )
zU
    Returns the possible node names (e.g. import_from, xor_test or yield_stmt).
    c                       e Zd ZdS )/get_stack_at_position.<locals>.EndMarkerReachedN)rP   rQ   rR   rT   r   r   EndMarkerReachedrb      s        r   rc   c              3   
  K                        |           }|D ]g}|j        k    r
             |j                                      r
             |j                                      r|V               |V  hd S r   )	_tokenizer   prefixendswith)codetokenstokenrc   grammarsafewords      r   tokenize_without_endmarkerz9get_stack_at_position.<locals>.tokenize_without_endmarker   s       ""4(( 
	 
	E|x''&&(((&&x00 &&(((&&x00 &&(((
	 
	r   )ZZZ_USER_WANTS_TO_COMPLETE_HERE_WITH_JEDI T)error_recovery)ri   z7This really shouldn't happen. There's a bug in Jedi:
%s)		Exceptionr   r_   r	   _pgen_grammarparsestackSystemErrorlist)	rk   rF   rA   r#   rm   rh   prc   rl   s	   `      @@r   get_stack_at_positionrx   {   s       9         " %j$<<==D ;H#: Dw$T:::A	11$778888   w
B
))$//
0
0	1  s   A= =BBc                 l   |j         dk    r|                     ||          S |j        }t          }|j         dk    r|                    |j                  }n^|j         dk    rt          ||          }nBt          |t          j                  rt          ||          S |j         dv rt          |           S |S )Nr   atomtrailer)fstring_stringfstring_startfstring_end)r8   inferr[   r   
infer_noder   
isinstancer
   Literalr   r   )inference_statecontextrA   r[   definitionss        r   r   r      s    yF$$Wd333[FK{f((55			!	!($77	D$,	'	' 5'4(((	H	H	H#O444r   c              #      K   | D ]l}|                                 rRt          t          |                                |                    }d}|r|D ]}|j        d}|r|V  _|E d {V  h|V  md S )N)follow_builtin_importsFT)	is_importrv   filter_follow_importsgotor=   )namesr   r   	new_namesfound_builtinnew_names         r   r   r      s        >> 	2		'=    I "M% - ) - -H)1(, %



$$$$$$$$$JJJJ# r   c                   h    e Zd Zd Zed             Zed             Zed             Zd Z	d Z
d ZdS )	CallDetailsc                 0    || _         || _        || _        d S r   )bracket_leaf	_children	_position)rO   r   childrenr@   s       r   __init__zCallDetails.__init__   s    (!!r   c                 B    t          | j        | j                  d         S rL   _get_index_and_keyr   r   rN   s    r   indexzCallDetails.index       !$.$.AA!DDr   c                 B    t          | j        | j                  d         S )Nr   r   rN   s    r   keyword_name_strzCallDetails.keyword_name_str   r   r   c                 P    t          t          | j        | j                            S r   )rv   _iter_argumentsr   r   rN   s    r   _list_argumentszCallDetails._list_arguments   s    ODNDNCCDDDr   c                    d}t                      }d}|                                 }|s|rdS d S d}t          |          D ]K\  }\  }}}	||	|dk    z  z  }|r|dz   t          |          k    r|	r|                    |           F|dz  }Lt          |          D ]\  }}
|
                                }|s8|t          j        k    r|c S |t          j        t          j	        fv r
||k    r|c S ||dk    r|dk    ry|
j
        |vr\|t          j        k    s|t          j        k    r<||k    r6|r|c S |	r|
j
        |k    r|c S n|
j
                            |          r|c S |t          j        k    r|c S d S )Nr   rD   F   r   )setr   	enumerater    addget_kindr   VAR_POSITIONALPOSITIONAL_OR_KEYWORDPOSITIONAL_ONLYstring_nameKEYWORD_ONLYr   VAR_KEYWORD)rO   param_namespositional_count
used_names
star_countrM   is_kwargi	key_start	had_equal
param_namekinds               r   calculate_indexzCallDetails.calculate_index   s   UU

##%% 	 qt5>t__ 		. 		.1A1
Iy	Z1_55H .q5CII%%  ."y1111(A-(&{33 	 	MAz&&((D !9333HHHI;Y=VWWW,,, $Z1__
a);;!Y%;;; $	(G G G!1Q!6!6! !   %%1Y>>#$HHH ? &1<<YGG %#$HHH9000HHHtr   c              #   j   K   t          |                                           D ]\  }}}|r|r|V  d S r   )rv   r   )rO   r   r   r   s       r   iter_used_keyword_argumentsz'CallDetails.iter_used_keyword_arguments  sS      04T5I5I5K5K0L0L 	  	 ,J	9  Y  	  	 r   c                 f    d}|                                  d d         D ]\  }}}|s|r n|dz  }|S )Nr   rD   r   )r   )rO   countr   r   r   s        r   count_positional_argumentsz&CallDetails.count_positional_arguments  sV    040D0D0F0Fss0K 	 	,J	9 Y QJEEr   N)rP   rQ   rR   r   rS   r   r   r   r   r   r   r   rT   r   r   r   r      s        " " "
 E E XE E E XE E E ^E1 1 1f     
    r   r   c              #     K   fd}fd| D             }|d         j         dk    r#t          |d         j                  E d {V  d S d}d}t          |          D ]\  }}|j         dk    rd}|j        d         }|j        d	         }	|	d
k    r4|	j        k     r|j         dk    rd|j        dfV  nwd ||          dfV  nf|dv r#t          |j                   ||	          dfV  n?|                                }
|
j         dk    r|
j        k    rd ||
          dfV  ndV  d}|j         dk    re|j        d d d         D ].}|j         dk    rd	}|j        d	         }| ||          dfV  d}/t          t          |j                  dz            }@t          |t          j                  r|j        dk    r|s	|ddfV  d}d}tt          |t          j                  r|j        dv rt          |j                  }|d
k    r3|d         r+d}||d	z
           }|j         dk    rd|j        dfV  ndV  d}|s2|d         j         dk    r| ||d                   dfV  d S |ddfV  d S d S )Nc                 d    | j         dk    rd S | j        d d         | j        d         z
           S )Nr   r   )r8   r<   r=   )r   r@   s    r   remove_after_posz)_iter_arguments.<locals>.remove_after_pos"  s8    94z:8A;):::;;r   c                 *    g | ]}|j         k     |S rT   r=   .0cr@   s     r   
<listcomp>z#_iter_arguments.<locals>.<listcomp>(  %    ???!h(>(>A(>(>(>r   rD   arglistFr   argumentTr   =r   )*z**)r   NFtestlist_star_exprr   	star_expr,r)   )r8   r   r   r   r=   r<   r    get_first_leafboolr   r
   
PythonLeaf)nodesr@   r   nodes_beforeprevious_node_yielded
stars_seenr   nodefirstsecond
first_leafnbefores    `           r   r   r   !  s     < < < < < @???u???LB	))"<#3#<hGGGGGGGGG!J\** , ,49
""$(!M!$E]1%F}}#h..5:3G3GU[$.....--e44e;;;;;+%%%+&&(8(8(@(@%GGGGG "0022
?f,,1E1Q1Q--j995@@@@@((((JJY...]33Q3'  6[((!"J
1A "2"21"5"5u<<<<

$(T]););a)?$@$@!!do.. 	4:3D3D(  "e++++
$)!!do.. 
	4:3L3LTZJJS[[\"-[$(!!!a%(F{f$$t+++++$$$$J  ( F**..|B/?@@%GGGGGGb%''''''	( (r   c                 j   fd| D             }|d         j         dk    rt          |d         j                  S d}|d         }|j         dk    r:|j        d         dk    r)|j        d         j        k    r|j        d         j        }n|dk    r|d	         j        }|                    d
          |fS )zG
    Returns the amount of commas and the keyword argument string.
    c                 *    g | ]}|j         k     |S rT   r   r   s     r   r   z&_get_index_and_key.<locals>.<listcomp>h  r   r   rD   r   Nr   r   r   r   r   )r8   r   r   rG   r<   r   )r   r@   r   key_strlasts    `   r   r   r   d  s     @???u???LB	))!,r"2";XFFFGDyJ4=#3s#:#:a (H44-"(	r"(c""G++r   c                 F   t          t          t          | j                                      D ]q\  }}|dk    rf|j        |k    r[|dk    rU| j        |d          }|                                }|B|j        dk    s|j        j        dv rt          |||z   |          c S rd S )N(r   r   )r{   rz   )	reversedrv   r   r   rG   rZ   r8   r[   r   )r   additional_childrenr@   r   elementr   r   s          r   &_get_signature_details_from_error_noder   y  s    "4	$-(@(@#A#ABB 
V 
Vwc>>go99eaii }UVV,H,,..D|yF""dk&6:M&M&M"7H7J,JHUUUUU
V 
Vr   c                    |                      |d          }|j        |k    r|                                }|d S |j        }|!|j        dv rd S g }t          |j                  D ]R}|j        |k     rE|j        dk    r$t          |||          }||c S |j        |dd<   <|                    d|           S|j        dk    r|j        d         dk    s|j        dk    r||j        d	         dk    rk||j        d
         u r||j	        k    sQ|                                }|d S t          |j        dk    r|j        d         n|j        d	         |j        |          S |j        }|!d S )NT)include_prefixes)funcdefclassdef	decorated
async_stmt
error_noder   r{   r   	decoratorr   rD   )r7   r=   rZ   r[   r8   r   r   r   insertrG   r   )moduler@   rA   r   r   r   results          r   get_signature_detailsr     s   ''4'HHD ~!!%%''<4 ;D

9JJJ 4 $-(( 	1 	1A{X%%6\))C. F )%/0z'!,#**1a000 9	!!dmA&6#&=&=9++a0@C0G0G
 DM"---(dl2J2J--//<4"(,	Y(>(>DM!$$DMRSDTM   {K 
N 4r   call_signatures_validityc              #     K   |d         dz
  }||         d|d                  }||j         d         |         }d                    ||gz             }t          j        d|t          j                  }	|                                                                }
|
dV  n|
|	|j         fV  t          | ||                                          V  dS )z'This function calculates the cache key.r   r   Nr)   z.*\()	r=   rE   r9   r&   DOTALLget_root_context
py__file__r   rZ   )r   r   r   rF   user_pos
line_indexbefore_cursorother_lineswholebefore_bracketr+   s              r   cache_signaturesr     s       !qJz*<HQK<8M\3A6zABKGGK=/122EXgubi88N**,,7799K



NL,BCCCC
&&((      r   c                 >     t                     d fd	            }|S )Nc                    |"t          t          | j                  d          n|}d|cxk     rt          | j                  k    sn t          d          | j        |dz
           }t          |          }|                    d          r|dz  }n|                    d          r|dz  }||n|}d|cxk    r|k    sn t          d||||fz             | ||g|R i |S )Nr   r   z)`line` parameter is not in a valid range.z
r   
zH`column` parameter (%d) is not in a valid range (0-%d) for line %d (%r).)maxr    _code_lines
ValueErrorrg   )rO   r,   r-   rM   kwargsline_stringline_lenfuncs          r   wrapperz%validate_line_column.<locals>.wrapper  s>   04s3t'((!,,,$D1111C 0111111HIII&tax0{##'' 	MHH!!$'' 	MH#^V''''x'''' 8!'4;FF G G G tD$8888888r   )NNr   )r  r  s   ` r   validate_line_columnr	    s8    
4[[9 9 9 9 9 [9$ Nr   Tc                      fd}t          t          j                                                                                             }|s fdfd|D             }t          ||          S )zZ
    Returns a dictionary with name parts as keys and their call paths as
    values.
    c                 >    |                                  }r|po| S r   )is_definition)r   is_defr   
referencess     r   def_ref_filterz(get_module_names.<locals>.def_ref_filter  s+    ##%%%vB)BF
Br   c                 V    t          |           }|r|j        dk    r|j        }|d fv S )Nr   )r   r8   r[   )r   parent_scoper   s     r   is_module_scope_namez.get_module_names.<locals>.is_module_scope_name  s<    +D11L 3 1\ A A+2FD>11r   c                 *    g | ]} |          |S rT   rT   )r   r   r  s     r   r   z$get_module_names.<locals>.<listcomp>  s*    ===q%9%9!%<%<====r   )rv   r   from_iterableget_used_namesvaluesfilter)r   
all_scopesr   r  r  r   r  s   ` ``  @r   get_module_namesr    s    
C C C C C C $V%:%:%<%<%C%C%E%EFFGGE >	2 	2 	2 	2 	2 >===E===.%(((r   c                 r    |                      d          \  }}}|dk    rd}||                    d          fS )Nro   deffunction.)
rpartitionsplit)r   r8   _dotted_namess       r   split_search_stringr"    sA     OOC00D!\u}}##C((((r   )F)TF)3__doc__r9   collectionsr   textwrapr   	itertoolsr   	functoolsr   inspectr   parso.python.parserr	   parso.pythonr
   jedi.inference.base_valuer   jedi.inference.syntax_treer   jedi.inference.helpersr   jedi.inference.compiledr   
jedi.cacher   r   jedi.parser_utilsr   r   r   r"   r&   r3   rB   rH   rq   rJ   r_   rx   r   r   r   r   r   r   r   r   r	  r  r"  rT   r   r   <module>r1     s    
			 " " " " " "                         & & & & & &       / / / / / / 1 1 1 1 1 1 5 5 5 5 5 5 8 8 8 8 8 8 ; ; ; ; ; ; ; ; . . . . . . *.0K0K0KLL( ( (  / / / /0 0 08 8 8      )   %T %T %TP' ' 'T  (   *P P P P P P P Pf@( @( @(F, , ,*V V V4 4 4n 011  21*  .) ) ) )6) ) ) ) )r   