
    f                     &   d Z ddl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	m
Z
mZmZ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 ddlmZmZ ddlmZ ddlmZm Z m!Z!m"Z"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l0m1Z1 ddl2m3Z3 ddddddd d!d"d#d$d%d&d'Z4e4jk                         D  ci c]  \  } }| d(|d)d z    c}} Z6d* Z7d+ Z8d, Z9 e'e
-      d.        Z:ejv                  e7d/               Z<d0 Z=d1 Z>e7dDd2       Z?ejv                  dDd3       Z@d4 ZAed5        ZBd6 ZCd7 ZDd8 ZEd9 ZFd: ZGd; ZHd< ZId= ZJ e3j                         d>        ZL e'       d?        ZMd@ ZN G dA dBe      ZOdC ZPyc c}} w )Ez&
Functions inferring the syntax tree.
    N)tree)debug)parser_utils)ValueSet	NO_VALUESContextualizedNodeiterator_to_value_setiterate_values)LazyTreeValue)compiled)	recursion)analysis)imports)	arguments)
ClassValueFunctionValue)iterable)ListModificationDictModification)TreeInstance)	is_string
is_literal	is_numberget_names_of_nodeis_big_annoying_library)COMPARISON_OPERATORS)inference_state_method_cache)VersionInfo)
annotation)TreeNameDefinition)CompForContext)	Decoratee)plugin_manager__add____sub____mul__
__matmul____truediv____floordiv____mod____pow__
__lshift__
__rshift____and____or____xor__)+-*@/z//%**z<<z>>&|^__r   c                       fd}|S )a{  
    This is for now the way how we limit type inference going wild. There are
    other ways to ensure recursion limits as well. This is mostly necessary
    because of instance (self) access that can be quite tricky to limit.

    I'm still not sure this is the way to go, but it looks okay for now and we
    can still go anther way in the future. Tests are there. ~ dave
    c                 t   | j                   }| j                  }	 |j                  |xx   dz  cc<   d}| j                  !| j	                         |j
                  u r|dz  }|j                  |   |kD  rt        j                  d|       t        S 	  | g|i |S # t        $ r d|j                  |<   Y &w xY w)N   i,  d   z+In value %s there were too many inferences.)
	tree_nodeinference_stateinferred_element_countsparent_context	get_valuebuiltins_moduler   warningr   KeyError)contextargskwargsnrB   maximumfuncs         U/var/www/cvtools/html/venv/lib/python3.12/site-packages/jedi/inference/syntax_tree.pywrapperz$_limit_value_infers.<locals>.wrapper@   s    !11	;33A6!;6G%%-))+/N/NN
 366q9GCKQO   D
 G-d-f--  	;9:O33A6	;s   A3B B76B7 )rN   rP   s   ` rO   _limit_value_infersrR   7   s    .* N    c                    t        | t              rt        | |      S |}|6|j                  }|j                  dv rnt        j                  |      rd }n|6| j                  j                  |      }||r|j                  dk(  r| j                  j                  r|j                  d   }i g}|j                  |j                  kD  r't        |      }t        |      }|D cg c]  }|j                   c}t!        fd|D              r|D ]  }	| j                  j#                  | |	      }
t%        |
      dkD  rt%        |      t%        |
      z  dkD  rt'        j(                  d|       i g} nt+        |      }g }|
D ]T  }t+        |      }t-        |      D ]4  \  }}|j/                         ||<   t1        |g      ||   |	j                  <   6 ||z  }V |D ]  }|
||	j                  <     t%        |      dkD  r9t2        }|D ],  }| j5                  ||      5  |t        | |      z  }d d d        . |S t7        | |      S |rt        | |      S t7        | |      S c c}w # 1 sw Y   exY w)N)if_stmtfor_stmtrU   r?   c              3   :   K   | ]  }|j                   v   y wNvalue).0istr_element_namess     rO   	<genexpr>zinfer_node.<locals>.<genexpr>v   s     BA177//Bs      z,Too many options for if branch inference %s.)
isinstancer!   _infer_nodeparenttyper   is_scopepredefined_namesgetrB   is_analysischildren	start_posend_posr   rZ   anyinferlenr   dbglist	enumeratecopyr   r   predefine_names_infer_node_if_inferred)rI   elementrU   predefined_if_name_dictif_stmt_test
name_dictsif_nameselement_nameseif_namedefinitionsoriginal_name_dicts
definitionnew_name_dictsr\   	name_dictresultr]   s                    @rO   
infer_noder   X   s   '>*7G,,G

..<<22  )G 
 &66::7C &7	)g.E.E.Q.Q''*T

 |333 )6H-g6M2? @Q @BBB' CG")"9"9"?"?"QK ;'!+z?S-==B!II&TV]^ +-J!.2:.>+%'
*5 9J-12E-FN09.0I Z94=NN4Dq 1CKZLCYq 1'-- @Z '.8J9 *4 CI7BIgmm4C1C4 z?QF' <	,,Wi@ <k'7;;F< << M*7G<<"w00*7G<<Q !A>< <s   &I I%%I.	c                     |}|8|j                   }| j                  j                  |      }|t        | |      S |8t	        | |      S )zA
    TODO This function is temporary: Merge with infer_node.
    )rb   re   rf   ra   _infer_node_cached)rI   rt   rb   ru   s       rO   rs   rs      sY     F

")":":">">v"F".w00	 

 gw//rS   )defaultc                     t        | |      S rX   )ra   )rI   rt   s     rO   r   r      s    w((rS   c                    t        j                  d||j                  |        | j                  }|j                  }|dv rt        | |      S |dk(  r t        t        j                  | |      g      S |dk(  rt        | |      S |dv r|j                  d   }|j                  dd  }d}|j                  d	k(  r"|j                  d
k(  rd}|j                  d      }| j                  |      }t        |      D ]>  \  }}	|	dk(  r'| j                  ||dz            }
t        | ||	|
      } nt!        | ||	      }@ |r|j#                         j%                         S |S |dv r!t        t'        j(                  || |      g      S |dv r@| j                  |j                  d         }|j                  d d D ]  }t+        ||      } |S |dk(  r=| j                  |j                  d         | j                  |j                  d         z  S |dk(  r`|j                  dk7  r1|j,                  }t/        dt1        |j                        d|d      t        t3        j4                  |d      g      S |dk(  rEt        | |j                  d         }|j                  dd d   D ]  }|j7                  ||       } |S |dk(  r| j                  |j                  d         S |dk(  r1t9        j:                  | |j                  d         j=                         S |dk(  rt?        |j                        rv|j                  d   j                  dk(  rZ|j                  d   j                  d   }| j                  |      j7                  d      jA                         }|j%                         S tB        S |dk(  r| j                  |j                  d         S tE        | |      S ) Nzinfer_node %s@%s in %s)namenumberstringatomstringskeywordfstringlambdef	expr_stmt)power	atom_exprr   r?   Fr   awaitTr7   )testlist_star_exprtestlist)not_testfactortestoperatorz...zunhandled operator z in  Ellipsisdotted_namer<   )name_context
eval_input	annassign
yield_expr	yield_arg__iter__namedexpr_test)#r   rn   ri   rB   rc   
infer_atomr   r   from_contextinfer_expr_stmtrh   rZ   popr   rp   _infer_comparisoninfer_trailerpy__await__py__stop_iteration_returnsr   SequenceLiteralValueinfer_factorrb   AssertionErrorreprr   builtin_from_namepy__getattribute__r   infer_annotationexecute_annotationrm   execute_with_valuesr   infer_or_test)rI   rt   rB   typfirst_childrh   	had_await	value_setr\   trailerrightr   origin	next_name
generatorss                  rO   ra   ra      s    
II&1B1BGL--O
,,C
SS'7++			33GWEFGG		w00	&	&&&q)##AB'	y([->->'-II",,q/K&&{3	%h/ 
	CLQ$**8AE?;-		 %gy'BI
	C ((*EEGG	3	366QXYZ[[	&	&&&w'7'7';<	(("- 	:H$Y9I	:	""7#3#3A#67$$W%5%5b%9:; 	<	
	==E!^^F 4CVX^!_``33OZPQRR		w(8(8(;<	 ))!$Q$/ 	VI!44YW4UI	V		!!'"2"21"566		**7G4D4DQ4GH!	"		w W%5%5a%8%=%=%L&&q)2215G ++G4##J/0C0C0E 88:: 	 	 !!'"2"21"566Wg..rS   c                    |j                   d d \  }}|dk(  rd }|dk(  r6|j                   \  }}}|j                  t        | |      t        | |            S t	        j
                  d||       |dk(  r|j                  | |      S |dk(  s
J d|z         t        j                  | j                  | ||      }|j                  |      S )	Nr<   )[zinfer_trailer: %s in %s.)r   name_or_str(ztrailer_op is actually %s)rh   get_item_infer_subscript_listr   r   rn   r   r   TreeArgumentsrB   execute)rI   atom_valuesr   
trailer_opnode_rJ   s          rO   r   r     s    ''+Js{S%..
D!##!'40w0
 	

 			+WkB11$  2  
 $N&AJ&NN$**7+B+BGTSZ[D&&t,,rS   c                 ~   | j                   }j                  dk(  rt        j                  ddd      xs }|j                  dk(  r%t	        fd|j                         D              s}n|j                  dk(  r}|j                  }t              rd}| j                  |      S j                  dk(  rWj                  d	v r*t        t        j                  |j                        g      S j                  d
k(  rt        S J dz         t        t        j                        rE|j                   j#                  j                        }t        t        j$                  ||      g      S j                  dk(  rIt'        | j(                  d         }j(                  dd D ]  }t'        | |      }t+        | |d|      } |S j                  dk(  rt        j,                  |      S j(                  }|d   dk(  rOt/        |      dk(  sA|d   j                  dk(  rt/        |d   j(                        dkD  s| j1                  |d         S 	 |d   j(                  d   }	|	dk(  r	 |d   j(                  d   }	|	j                  dv r!t        t5        j6                  ||       g      S |d   }
	 |
j(                  }|d   dk(  r%|
dk(  sd|v sd|v rt5        j:                  ||       }nt5        j<                  ||       }t        |g      S # t2        $ r Y w xY w# t2        t8        f$ r Y w xY w# t8        $ r g }Y w xY w)z
    Basically to process ``atom`` nodes. The parser sometimes doesn't
    generate the node (because it has just one child). In that case an atom
    might be a name or a literal as well.
    r   r   r   rU   c              3   z   K   | ]2  }|j                   j                   cxk  xr |j                  k  nc  4 y wrX   )ri   rj   )r[   rL   r   s     rO   r^   zinfer_atom.<locals>.<genexpr>%  s*     `Qq{{dnn@qyy@@`s   8;Npositionr   )FalseTrueNoneyieldzCannot infer the keyword %sr   r   r?   r1   r   r   r<   testlist_comp:   )comp_forsync_comp_for{}r7   )rB   rc   r   search_ancestorrk   get_test_nodesri   _is_annotation_namer   rZ   r   r   r   r   r`   Literalcompiled_subprocesssafe_literal_evalcreate_simple_objectr   rh   r   get_string_value_setrm   r   
IndexErrorr   comprehension_from_atomAttributeErrorDictLiteralValuer   )rI   r   statestmtr   r   r   r   cr   
array_nodearray_node_c	new_values    `           rO   r   r     s4    ##EyyF##D+y)LTPT99	!`$J]J]J_``YY)#D>>t$ H))$)BB	i	::22X77tzzJKLLZZ7" :3d::u	D$,,	'**<<TZZH66ufEFGG	i	wa(89	mmAB' 	JFw/E)'9c5II	J 	i	,,U33MMQ43;s1v{1o5 1/!3%%ad++	t}}Q'H 3 t}}Q/H }} ==!A!A7D" !  
 qT
	%..L Q43;J#-1D#|3 11%$GI 55eWdKI$$' "  N+ 		&  	L	s6   L 'L
 .L. 
	LLL+*L+.L<;L<c                     t        j                  | j                  |      5 }|r<|$t        j                  | ||      }|r|cd d d        S t        | ||      cd d d        S 	 d d d        t        S # 1 sw Y   t        S xY wrX   )r   execution_allowedrB   r   "find_type_from_comment_hint_assign_infer_expr_stmtr   )rI   r   	seek_nameallowedpep0484_valuess        rO   r   r   o  s    		$	$W%<%<d	C >w$AA'4QZ[ !)> > $GT9=> >> > s   A/
A//A=c                 |    d }t        j                  d||       |j                         } j                  |      |rt	         |      }t        |      t        |j                         d      } ||      \  }|dvxr |j                  dk(  }|s|r|j                  d      d   j                  }	 j                  |	|j                  	      }
|r fd
t        fd|
D              n&t        j                  |      }|j                  dd |_
        t        j                   |d      }||j                  dk(  rȉrt#        j$                  |      r|j'                         }t)         |      }t+        |j-                         j/                  |            }|D ]e  }|j0                  d   j                  |j-                         i} j3                  ||      5   j                  |      }t5         |
||      }
ddd       g |
nt5         |
|      t        j                  d       S # 1 sw Y   xY w)aD  
    The starting point of the completion. A statement always owns a call
    list, which are the calls, that a statement does. In case multiple
    names are defined in the statement, `seek_name` returns the result for
    this name.

    expr_stmt: testlist_star_expr (annassign | augassign (yield_expr|testlist) |
                     ('=' (yield_expr|testlist_star_expr))*)
    annassign: ':' test ['=' test]
    augassign: ('+=' | '-=' | '*=' | '@=' | '/=' | '%=' | '&=' | '|=' | '^=' |
                '<<=' | '>>=' | '**=' | '//=')

    :param stmt: A `tree.ExprStmt`.
    c                    | j                   d   }|j                  dvry|j                   d   }|j                  dk7  st        |j                         dk7  ry|j                   d   }|j                   d   dk(  |j                   d   fS )	Nr   )r   r   )FNr   r<   r   r   r?   )rh   rc   rm   )r   r   r   r   s       rO   check_setitemz'_infer_expr_stmt.<locals>.check_setitem  s    MM!$	>>!77!!!$99#i&8&8"9Q">$$R("c)7+;+;A+>>>rS   zinfer_expr_stmt %s (%s)N)=Nr   T)include_setitemr   r   c                     t              }| j                  dk(  rt        | |      S | j                  dk(  rt        | |      S | S )Ndictro   )ContextualizedSubscriptListNode
array_typer   r   )vr   rI   subscriptlistr   s     rO   to_modz _infer_expr_stmt.<locals>.to_mod  sJ    3G]K<<6)+Ay!<<\\V++Ay!<<rS   c              3   .   K   | ]  } |        y wrX   rQ   )r[   r   r  s     rO   r^   z#_infer_expr_stmt.<locals>.<genexpr>  s      @q @s   r   rV   r?   zinfer_expr_stmt result %s)r   rn   get_rhsr   r    check_tuple_assignmentsnextyield_operatorsrc   get_defined_namesrZ   r   ri   r   rq   r   r   r   for_stmt_defines_one_nameget_testlistr   ro   rl   iteraterh   rr   r   )rI   r   r   r   rhsrL   first_operator
is_setitemis_annassignr   left_valuesr   rV   r   cnordered
lazy_valuedcttr   r  r   s   `                  @@@rO   r   r   }  s!    ? 
II'y9
,,.C""3'Iw	2+Ay9	$..0$7N -d 3J!4Z9L9LPZ9ZLz%%d%;A>DD000O ! @K @@Iyy0H%^^CR0HN++D*=H#(C	$>>xH  ,,.'6rxxz11"56") [J#,,Q/55z7G7G7IJC 003? [#..s3&7hXY&Z[ [[
 (	-g{HiX		II)95[ [s    H22H;	c           	         t        |j                        }| j                  t        |            }|D ]  }t        |      }|j                  dk(  r"dj                  d |j                  D              }|dv rOt        d |D              }|dhk(  r|dk(  sa| j                  |      }s|dhk(  sz|dk7  s| j                  |      }t        | ||| j                  |            } t        j                  d	|       |S )
Ncomp_opr   c              3   4   K   | ]  }|j                     y wrX   rY   )r[   r   s     rO   r^   z infer_or_test.<locals>.<genexpr>  s     CACs   )andorc              3   <   K   | ]  }|j                           y wrX   )
py__bool__)r[   lefts     rO   r^   z infer_or_test.<locals>.<genexpr>  s     A4T__.A   Tr  Fzinfer_or_test types %s)
iterrh   r   r  rc   joinsetr   r   rn   )rI   or_testiteratortypesr   r   
left_boolss          rO   r   r     s    G$$%HtH~.E AX==I%xxC1B1BCCH }$A5AAJdV#u$#..u5Ew&u$#..u5E &guh&-&8&8&?AE!A$ 
II&.LrS   c              #      K   | D ]g  }|dk(  rt        |      s|j                          '|dk(  r8|j                         }| yt        j                  |j
                  |        d| i yw)z6
    Calculates `+`, `-`, `~` and `not` prefixes.
    r2   notN)r   negater  r   r   rB   )r   r   rZ   bs       rO   r   r     sp     
  
s?lln$  "Ay//0E0E1uMMK
s   A0AA0c                     t         }|D ]Z  }t        |      r>t        j                  | |j                  j
                        }||j                         z  }L|t        |g      z  }\ |S rX   )r   r   r   r   r   string_namer   r   )rB   r   
new_resultr   clss        rO   _literals_to_typesr-    sh     J *c? ,,_chh>R>RSC#1133J(C5/)J* rS   c                      j                   t        t              r}nt        j                        }|rs!|xs t        xs t        z  }t        |      S |dk(  r=t        d t        j                  |      D              rt        j                  |f      S t        |      t              z  dkD  rt        |z        S t        j                   fd|D              S )Nr9   c              3   `   K   | ]&  }|j                         xs |j                          ( y wrX   )is_classis_compiled)r[   rZ   s     rO   r^   z$_infer_comparison.<locals>.<genexpr>  s0      % 	/E--//%s   ,.   c           	   3   J   K   | ]  }D ]  }t        ||         y wrX   )_infer_comparison_part)r[   r  r   rI   r   right_valuesr   s      rO   r^   z$_infer_comparison.<locals>.<genexpr>  s;      &)&  'ugtXuM&M&s    #)rB   r`   strrZ   r   r-  all	itertoolschainr   	from_setsrm   )rI   r  r   r5  operator_strr   r   s   ` ``  @rO   r   r     s    ##E(C 8>>*l*|/HyI!%00		 %__[,?% "
 !!;"=>>
 {c,//!3%e[<-GHH%% &'&  rS   c                    t        j                  | ddd      }|y|j                  dv r=|j                  }|.|j                  | j                  cxk  xr |j
                  k  S c S y|j                  dk(  r`|j                  }t        |      dkD  rF|d   j                  dk(  r4|d   j                  | j                  cxk  xr |d   j
                  k  S c S y)Nparamfuncdefr   F)r=  r>  r?   r   )r   r   rc   r   ri   rj   rh   rm   )r   ancestorannr   s       rO   r   r   #  s    ##D'9kJH}},,!!?==DNN@S[[@@@@
 	 
+	%q6A:!A$)){2Q4>>T^^BadllBBBBrS   c                      | j                   dk(  S )Nro   r   rY   s    rO   _is_listrC  3  s    v%%rS   c                      | j                   dk(  S )NtuplerB  rY   s    rO   	_is_tuplerF  7  s    w&&rS   c                 @    t        j                  | t        |            S rX   )r   r   r6  )rB   bool_s     rO   _bool_to_valuerI  ;  s    %%os5zBBrS   c                 2   t        | t        j                        sy g }| j                         D ]V  }t        |t              s y |j
                  }|j                  dk7  r y 	 |j                  t        |j                               X |S # t        $ r Y  y w xY w)Nr   )r`   r   r   
py__iter__r   datarc   appendintrZ   
ValueError)rZ   numbersr  r   s       rO   _get_tuple_intsrQ  ?  s    eX::;G&&( 	
*m499 	NN3tzz?+	 N  		s   !$B			BBc                    t        |      }t        |      }t        |t              r|}nt        |j                        }|dk(  rct        |t        j
                        st        |      rt        |g      S t        |t        j
                        st        |      rt        |g      S |dk(  r||r|st        |      rt        |      r|j                  ||      S t        |      rt        |      st        |      rkt        |      r_t        t	        j                  | ||f      g      S |dk(  r|r5|r2|j                  ||      S |dk(  rt        |g      S |t        v r|j                         r&|j                         r|j                  ||      }|r|S |dv r/t        |   }	 |	||      }
|dv |
k(  rt        t        | |
      g      S t        |t              rct!        |      }|Vt#        j$                  j                  |   | j&                  j(                  t+        |            }t        t        | |      g      S t        t        | d      t        | d      g      S |d	v rt,        S d
 }|dv r4||k7  r/ ||      s' ||      sd}t/        j0                  |d||||fz         |j3                         s|j3                         rt,        S t4        |   }|j7                  |      }|r|j9                  |      }|r|S |s/t:        |   }|j7                  |      }|j9                  |      }|r|S t        ||g      }t=        j>                  d||       |S )Nr3   r1   r2   r6   )isz!===zis not)rS  rT  TF)inznot inc                 V    t        | t              xr | j                  j                  dv S )z4Checks if a Jedi object is either a float or an int.)rN  float)r`   r   r   r*  )objs    rO   checkz%_infer_comparison_part.<locals>.check  s)    #|, 5HH  $44	5rS   )r1   r2   z7TypeError: unsupported operand type(s) for +: %s and %sztype-error-operationz Used operator %s resulting in %s) r   r`   r6  rZ   r   Sequencer   r   execute_operationrC  rF  MergedArrayr   r1  rI  r   rQ  r   accessenvironmentversion_inforE  r   r   addr0  operator_to_magic_methodr   r    reverse_operator_to_magic_methodr   rn   )rB   rI   r  r   r   l_is_numr_is_numstr_operatorr   	operationrH  r_  bool_resultrY  messagemethod_namemagic_methodsreverse_method_names                     rO   r4  r4  P  s%   HH(C 8>>*sdH--.)D/TF##x001Yu5EUG$$		IdO	%8H))%>>d^9T?yQVGWX11/D%=QRSS		))%>>		 	-	-%"3"3"5++E<@F;;0>	!$. !L0U:#^OU%K$LMM$,.u5+"*//"F"Fx"P'33@@l+#K $^O[%Q$RSS?D1?E2
  	 
)	)5 z!h(&:4[E%LKW4he},	. }}%..**<8K++K8M2259M>|L001DE2248MtUm$F	II0(FCMrS   c                 "   t         }|j                         j                  }||j                         j	                  |j
                  g       }d}|D ]  }|j                  }|j                  dk(  s|j                  d   j                  dk(  s<t        j                  |      |j                  k(  }	|	sad}|t        j                  ||j                  d   j                  d         j                         z  } |r|S g }
|j                  dd      }||j                  }|j                  dk(  rw|j                  |      }|j!                         rt         S t#        |j%                               }|j	                  |j
                        }t'        j(                  d |D              S |j                  d	vr|j                  |      }t+        ||      S |j                  }|d
k(  rt        j,                  |||      }
|
r|
S |dk(  rt        j.                  |||      }
|
r|
S |dv r	 |j0                  |   |j
                     }
|
S |dk(  rt?        |||      }
|
S |dk(  r|jA                  |jC                  |            }|j                  j                  dk(  r?|jE                  d      }|jG                         }|jI                         jK                         S |jE                  d      }|jG                         S |d	v rtM        jN                  ||      }
|
S |dv rtQ        ||      }
|
S |dk(  r?|jA                  |jS                         jS                               }|jG                         }
|
S |dk(  rt         }
|
S |dk(  rt         }
|
S |dk(  rtA        ||      }
|
S tU        d|z        # t2        $ rh t5        ||j                  d         }t7        |j9                         ||j                  j                  dk(        }t;        ||      }t=        ||      }
Y |
S w xY w)NFr   r?   r   T)import_name_alwaysr   global_stmtc              3   <   K   | ]  }|j                           y wrX   )rl   )r[   r   s     rO   r^   z&tree_name_to_values.<locals>.<genexpr>  s     %Etdjjl%Er  )import_fromimport_namerV   	with_stmt)rV   r   r   r   
async_stmt)contextualized_nodeis_async
__aenter__	__enter__)r>  classdeftry_stmtr=  del_stmtr   zShould not happen. type: %s)+r   get_root_contextrA   get_used_namesrf   rZ   rb   rc   rh   r   get_parent_scoper   r   r   get_definitioncreate_context	is_moduler  get_filtersr   r:  r   find_type_from_comment_hint_for find_type_from_comment_hint_withre   rH   r   r
   rl   r    r  r   r   get_test_node_from_namer   r   r   r   r   infer_import_apply_decoratorsget_previous_siblingrO  )rB   rI   	tree_namer   module_nodenamesfound_annotationr   r   correct_scoper#  r   r   filterr   r  	for_typesrL   value_managersenter_methodscoro
exceptionss                         rO   tree_name_to_valuesr    s&   I**,66K**,00"E  		+DI~~,1C1CA1F1K1K{1Z , = =d CwGXGX X '+$!<!<!3!3A!6!?!?!B"((*+I		+ E##tT#RD|99%&&y1A{{} !  !--/*FJJy/E%%%Eu%EEEYY<<&&y1Aa++
))C
j::7D)TL
k;;GT9UL
77
	:,,T29??CER L? 
	y9< L; 
	 ++D,H,H,ST;;|+ +==lKM 446D##%@@BB&99+F0022	.	.$$Wi8" L! 
'	'!'40 L 

	 ''	(F(F(H(](](_`
..0 L 
 L 

	
 L	 
 	 7D) L 6<==O  	:#GT]]1-=>B&
$&))\9I
 #7I6A+Ay9E@ LQ	:s    N A-PPc           	         |j                   dk(  rt        | j                  | |      }nt        j                  | |      }t        |g      x}}t        |       r|S t        |j                               D ]D  }t        j                  d||d       t        j                         5  | j                  |j                  d         }|j                  dd }|r*t        j                  d	|      }||_        t#        | ||      }t%        |      s;|j'                  d
      }	|	dk7  rt        j(                  d||       |cddd       c S |j+                  t-        j.                  |g            }t%        |      s#t        j(                  d|       |cddd       c S 	 ddd       t        j                  d|d       G ||k7  r#t        |D 
cg c]  }
t1        |
|       c}
      S |S # 1 sw Y   NxY wc c}
w )z
    Returns the function, that should to be executed in the end.
    This is also the places where the decorators are processed.
    rx  )rD   rA   zdecorator: %s %sMAGENTA)colorr?   r<   r   r   F)include_prefixz	@runtime
zdecorator not found: %s on %sNz)not possible to resolve wrappers found %szdecorator end %s)rc   r   rB   r   r   r   r   reversedget_decoratorsr   rn   increase_indent_cmr   rh   r   
PythonNoderb   r   rm   get_coderG   r   r   ValuesArgumentsr"   )rI   r   decoratee_valueinitialvaluesdec
dec_valuestrailer_nodesr   coder   s              rO   r  r    s    yyJ$##"
 (44WdC 122Gfw'++-. ?		$c6C%%' 	 ++CLLO<JLL2.M//)]C!$*7JH
z?||5|9 <'MM"A3M!	 	$  ''	(A(A6((KLFv;I4P+	 	& '	. 			$fI>3?4 G11o6GHHM5	 	2 Hs   $BG%AG%	G1%G.	c                 V   d}| j                         D ]|  \  }}t        | j                  |      }|j                  |      }t	        |t
              rt        c S d}||k  r!	 t        |      }||j                  z  }||k  r!|j                         }~ |S # t        $ r t        cY c S w xY w)z(
    Checks if tuples are assigned.
    Nr   )assignment_indexesr   rD   r
  r`   slicer   r  maxStopIterationrl   )r   r   r  indexr   r  iteratedr\   s           rO   r  r  B  s     J..0 't 3 3T:$$R(eU#5j	$!(^
 Z^^# 5j $$&	%'&  ! !
 ! !s    BB('B(c                       e Zd Zd Zy)r   c                 B    t        | j                  | j                        S rX   )r   rI   r   )selfs    rO   rl   z%ContextualizedSubscriptListNode.infer^  s    $T\\499==rS   N)__name__
__module____qualname__rl   rQ   rS   rO   r   r   ]  s    >rS   r   c                    |dk(  r"t        t        j                  | ddd      g      S |j                  dk(  r|j                  d   dk(  sg }|j                  D ]t  }|dk(  r|r|j                  d       |j                  dk(  r8t        |j                        dk(  sE|j                  |j                  d          d|j                  |       v |dgd	t        |      z
  z  z  }t        t        j                  | g| g      S |j                  d
k(  r+t        t        j                  | j                  | |      g      S | j                  |      S )z,
    Handles slices in subscript nodes.
    r   N	subscriptr   r   sliceopr<   r?   r   r   )
r   r   Slicerc   rh   rM  rm   r   rB   r   )rI   r  r   els       rO   r   r   b  s,    |tTBCDD	{	"5>>!+<+C .. 	"BSyMM$'I%r{{#q(MM"++a.1b!	" 	4&AFO,,9&9:;;		&66w7N7NPWY^_`aa e$$rS   rX   )Q__doc__rq   r8  parso.pythonr   jedir   r   jedi.inference.base_valuer   r   r   r	   r
   jedi.inference.lazy_valuer   jedi.inferencer   r   r   r   r   jedi.inference.valuer   r   r   #jedi.inference.value.dynamic_arraysr   r   r   jedi.inference.helpersr   r   r   r   r   jedi.inference.compiled.accessr   jedi.inference.cacher   !jedi.inference.gradual.stub_valuer   jedi.inference.gradualr   jedi.inference.namesr    jedi.inference.contextr!   jedi.inference.value.decoratorr"   jedi.pluginsr#   ra  itemsrb  rR   r   rs   r   increase_indentra   r   r   r   r   r   r   r-  r   r   rC  rF  rI  rQ  r4  decorater  r  r  r   r   )kr   s   00rO   <module>r     s       * * 3 # $ # " $ : ) R -/ / ? = 9 - 3 1 4 ' 
				
	


			 " ":!?!?!A$AAuqu}$  
BE=P
0 i0) 1) K/  K/\-0R%j 
 
 J JZ2  "< &'C"Zz ] ]D .  .b6>&8 >
%a$s   F