o
    ï›hß�  ã                   @   s‚  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'œZ4d(d)„ e4 5¡ D ƒZ6d*d+„ Z7d,d-„ Z8d.d/„ Z9e'e
d0�d1d2„ ƒZ:ej;e7d3d4„ ƒƒZ<d5d6„ Z=d7d8„ Z>e7d[d9d:„ƒZ?ej;d[d;d<„ƒZ@d=d>„ ZAed?d@„ ƒZBdAdB„ ZCdCdD„ ZDdEdF„ ZEdGdH„ ZFdIdJ„ ZGdKdL„ ZHdMdN„ ZIdOdP„ ZJe3 K¡ dQdR„ ƒZLe'ƒ dSdT„ ƒZMdUdV„ ZNG dWdX„ dXeƒZOdYdZ„ ZPdS )\z&
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>>ú&ú|ú^c                 C   s"   i | ]\}}|d |dd…  “qS )Ú__ré   N© )Ú.0ÚkÚvr=   r=   úPc:\Users\shubh\Videos\agent\nova\Lib\site-packages\jedi/inference/syntax_tree.pyÚ
<dictcomp>2   s    ÿrB   c                    s   ‡ fd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                    sš   | j }| j}z-|j|  d7  < d}| jd u r"|  ¡ |ju r"|d9 }|j| |kr2t d|¡ tW S W n t	yA   d|j|< Y nw ˆ | g|¢R i |¤ŽS )Né   i,  éd   z+In value %s there were too many inferences.)
Ú	tree_nodeÚinference_stateZinferred_element_countsÚparent_contextÚ	get_valueÚbuiltins_moduler   Úwarningr   ÚKeyError)ÚcontextÚargsÚkwargsÚnrF   Úmaximum©Úfuncr=   rA   Úwrapper@   s    
þÿz$_limit_value_infers.<locals>.wrapperr=   )rR   rS   r=   rQ   rA   Ú_limit_value_infers7   s   	rT   c              	      sú  t | tƒr
t| |ƒS |}|d ur%|j}|jdv rnt |¡r!d }n|d us| j |¡}|d u rñ|rñ|jdkrñ| j	j
rñ|jd }i g}|j|jkrÀt|ƒ}t|ƒ}dd„ |D ƒ‰ t‡ fdd„|D ƒƒrÀ|D ][}| j	 | |¡}	t|	ƒdkrµt|ƒt|	ƒ dkrˆt d	|¡ i g} n8t|ƒ}
g }|	D ]#}t|
ƒ}t|ƒD ]\}}| ¡ ||< t|gƒ|| |j< qš||7 }q�qd|D ]}|	||j< q·qdt|ƒdkrìt}|D ]}|  ||¡� |t| |ƒO }W d   ƒ n1 säw   Y  qÊ|S t| |ƒS |røt| |ƒS t| |ƒS )
N)Úif_stmtÚfor_stmtrU   rC   c                 S   s   g | ]}|j ‘qS r=   ©Úvalue)r>   Úer=   r=   rA   Ú
<listcomp>u   s    zinfer_node.<locals>.<listcomp>c                 3   s   � | ]}|j ˆ v V  qd S ©NrW   )r>   Úi©Zstr_element_namesr=   rA   Ú	<genexpr>v   s   € zinfer_node.<locals>.<genexpr>é   z,Too many options for if branch inference %s.)Ú
isinstancer    Ú_infer_nodeÚparentÚtyper   Zis_scopeÚpredefined_namesÚgetrF   Zis_analysisÚchildrenÚ	start_posÚend_posr   ÚanyÚinferÚlenr   ÚdbgÚlistÚ	enumerateÚcopyr   rX   r   Úpredefine_namesÚ_infer_node_if_inferred)rL   ÚelementrU   Úpredefined_if_name_dictZif_stmt_testZ
name_dictsZif_namesZelement_namesZif_nameZdefinitionsZoriginal_name_dictsZ
definitionZnew_name_dictsr\   Z	name_dictÚresultr=   r]   rA   Ú
infer_nodeX   sh   



ú

úÿÿ€


ru   c                 C   sB   |}|dur|j }| j |¡}|durt| |ƒS |dust| |ƒS )zA
    TODO This function is temporary: Merge with infer_node.
    N)rb   rd   re   ra   Ú_infer_node_cached)rL   rr   rb   rs   r=   r=   rA   rq       s   
ü
rq   )Údefaultc                 C   s
   t | |ƒS r[   )ra   )rL   rr   r=   r=   rA   rv   ­   s   
rv   c                 C   sÀ  t  d||j| ¡ | j}|j}|dv rt| |ƒS |dkr%tt | |¡gƒS |dkr.t	| |ƒS |dv r…|j
d }|j
dd … }d}|jd	krQ|jd
krQd}| d¡}|  |¡}t|ƒD ] \}}	|	dkrt|  ||d  ¡}
t| ||	|
ƒ} nt| ||	ƒ}qZ|rƒ| ¡  ¡ S |S |dv r“tt || |¡gƒS |dv r°|  |j
d ¡}|j
d d… D ]}t||ƒ}q¦|S |dkrÄ|  |j
d ¡|  |j
d ¡B S |dkrä|jdkrÛ|j}tdt|jƒ|f ƒ‚tt |d¡gƒS |dk�rt| |j
d ƒ}|j
dd d… D ]	}|j|| d�}qù|S |dk�r|  |j
d ¡S |dk�r"t | |j
d ¡ ¡ S |dk�rNt|j
ƒ�rL|j
d jdk�rL|j
d j
d }|  |¡ d¡  ¡ }| ¡ S t!S |dk�r[|  |j
d ¡S t"| |ƒS )Nzinfer_node %s@%s in %s)ÚnameÚnumberÚstringÚatomÚstringsÚkeywordÚfstringÚlambdefÚ	expr_stmt)ÚpowerÚ	atom_exprr   rC   Fr}   ÚawaitTr7   )Ztestlist_star_exprZtestlist)Znot_testÚfactoréÿÿÿÿÚtestÚoperatorz...zunhandled operator %s in %s ÚEllipsisZdotted_namer<   )Úname_contextZ
eval_inputÚ	annassignZ
yield_exprZ	yield_argÚ__iter__Únamedexpr_test)#r   rl   rg   rF   rc   Ú
infer_atomr   r   Úfrom_contextÚinfer_expr_stmtrf   rX   Úpopru   rn   Ú_infer_comparisonÚinfer_trailerÚpy__await__Úpy__stop_iteration_returnsr   ÚSequenceLiteralValueÚinfer_factorrb   ÚAssertionErrorÚreprr   Úbuiltin_from_nameÚpy__getattribute__r   Úinfer_annotationÚexecute_annotationrk   Úexecute_with_valuesr   Úinfer_or_test)rL   rr   rF   ÚtypZfirst_childrf   Z	had_awaitÚ	value_setr\   ÚtrailerÚrightr‡   ÚoriginZ	next_nameÚ
generatorsr=   r=   rA   ra   ²   sŠ   




üÿ



ÿ

ÿ

ra   c                 C   sž   |j d d… \}}|dkrd }|dkr%|j \}}}| t| |ƒt| |ƒ¡S t d||¡ |dkr7|j| |d�S |dksAJ d| ƒ‚t | j	| ||¡}| 
|¡S )	Nr<   ú)ú[zinfer_trailer: %s in %sÚ.)r‰   Zname_or_strú(ztrailer_op is actually %s)rf   Zget_itemÚ_infer_subscript_listr   r   rl   rš   r   ZTreeArgumentsrF   Úexecute)rL   Zatom_valuesr¡   Z
trailer_opÚnodeÚ_rM   r=   r=   rA   r’     s$   þþ
r’   c              	      sŒ  | j }ˆ jdkr>t ˆ ddd¡pˆ }|jdkr't‡ fdd„| ¡ D ƒƒs&ˆ }n|jdkr.ˆ }|j}tˆ ƒr7d}| jˆ |d�S ˆ jd	kr_ˆ j	d
v rRt
t |ˆ j	¡gƒS ˆ j	dkrYtS J dˆ  ƒ‚tˆ tjƒru|j ˆ j	¡}t
t ||¡gƒS ˆ jdkršt| ˆ jd ƒ}ˆ jdd… D ]}t| |ƒ}t| |d|ƒ}q‰|S ˆ jdkr¤t |¡S ˆ j}|d dkrÊt|ƒdksÊ|d jdkrÃt|d jƒdksÊ|  |d ¡S z	|d jd }	W n ttfyÞ   Y n(w |	dkröz	|d jd }	W n	 tyõ   Y nw |	jdv �rt
t || ˆ ¡gƒS |d }
z|
j}W n t�y   g }Y nw |d dk�r:|
dk�s2d|v �s2d|v �r:t || ˆ ¡}nt || ˆ ¡}t
|gƒS )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.
    rx   r€   r   rU   c                 3   s.   � | ]}|j ˆ j   ko|jk n  V  qd S r[   )rg   rh   )r>   rO   ©r{   r=   rA   r^   %  s   €, zinfer_atom.<locals>.<genexpr>N©Úpositionr}   )ÚFalseÚTrueÚNoneÚyieldFzCannot infer the keyword %sr|   r   rC   r1   r~   r¨   r<   Ztestlist_compú:é   )Úcomp_forÚsync_comp_forÚ{Ú}r7   )rF   rc   r   Úsearch_ancestorri   Zget_test_nodesrg   Ú_is_annotation_namerš   rX   r   r   r™   r   r`   ÚLiteralZcompiled_subprocessZsafe_literal_evalÚcreate_simple_objectr�   rf   r‘   Zget_string_value_setrk   ru   Ú
IndexErrorÚAttributeErrorr   Zcomprehension_from_atomZDictLiteralValuer•   )rL   r{   ÚstateÚstmtr¯   rz   r    r¢   Úcr¶   Z
array_nodeZarray_node_cÚ	new_valuer=   r­   rA   r�     sz   

€







ÿÿÿ
ÿ"

r�   c                 C   s~   t  | j|¡�.}|r-|d ur t | ||¡}|r |W  d   ƒ S t| ||ƒW  d   ƒ S W d   ƒ tS 1 s8w   Y  tS r[   )r   Zexecution_allowedrF   r   Z"find_type_from_comment_hint_assignÚ_infer_expr_stmtr   )rL   rÁ   Ú	seek_nameÚallowedZpep0484_valuesr=   r=   rA   r�   o  s   ÿú
ø
ÿ	÷	r�   c              	      s²  dd„ }t  d||¡ | ¡ }ˆ  |¡‰|r tˆ |ƒ}t|ˆƒ‰t| ¡ dƒ}||ƒ\}‰|dvo5|jdk}|s:|rÑ|j	dd�d	 j
}	ˆ j|	|jd
�}
|ra‡ ‡‡fdd„‰t‡fdd„|
D ƒƒ‰npt |¡}|j
dd… |_
t |d¡}|durÊ|jdkrÊˆrÊt |¡rÊ| ¡ }tˆ |ƒ}t| ¡  |¡ƒ}|D ].}|jd j
| ¡ i}ˆ  ||¡� ˆ  |¡}tˆ |
||ƒ}
W d  ƒ n1 sÁw   Y  q˜|
‰ntˆ |
|ˆƒ‰t  dˆ¡ ˆS )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                 S   s`   | j d }|jdvrdS |j d }|jdkst|j ƒdkrdS |j d }|j d dk|j d fS )	Nr   )r‚   r�   )FNrx   r<   r…   r¦   rC   )rf   rc   rk   )rÁ   r‚   rx   r¡   r=   r=   rA   Úcheck_setitem�  s   



z'_infer_expr_stmt.<locals>.check_setitemzinfer_expr_stmt %s (%s)N)ú=Nr‡   T)Úinclude_setitemr   r®   c                    s:   t ˆ ˆƒ}| jdkrt| ˆ|ƒS | jdkrt| ˆ|ƒS | S )NÚdictrm   )ÚContextualizedSubscriptListNodeÚ
array_typer   r   )r@   rÂ   )rL   Úsubscriptlistr    r=   rA   Úto_mod©  s   


z _infer_expr_stmt.<locals>.to_modc                 3   s   � | ]}ˆ |ƒV  qd S r[   r=   )r>   r@   )rÎ   r=   rA   r^   ±  ó   € z#_infer_expr_stmt.<locals>.<genexpr>r…   rV   rC   zinfer_expr_stmt result %s)r   rl   Zget_rhsru   r   Úcheck_tuple_assignmentsÚnextZyield_operatorsrc   Zget_defined_namesrX   rš   rg   r   ro   r   rº   r   Zfor_stmt_defines_one_nameZget_testlistr   rm   rj   Úiteraterf   rp   r‘   )rL   rÁ   rÅ   rÇ   ÚrhsrO   Zfirst_operatorZ
is_setitemZis_annassignrx   Úleft_valuesr‡   rV   r«   ÚcnZorderedÚ
lazy_valueÚdctÚtr=   )rL   rÍ   rÎ   r    rA   rÄ   }  sH   




ÿ

þ€rÄ   c                 C   sÄ   t |jƒ}|  t|ƒ¡}|D ]K}t|ƒ}|jdkr$d dd„ |jD ƒ¡}|dv rOtdd„ |D ƒƒ}|dhkr@|dkr?|  |¡}q|d	hkrN|dkrN|  |¡}qt| |||  |¡ƒ}qt 	d
|¡ |S )NZcomp_opú c                 s   s   � | ]}|j V  qd S r[   rW   ©r>   rÂ   r=   r=   rA   r^   Ñ  s   € z infer_or_test.<locals>.<genexpr>)ÚandÚorc                 s   ó   � | ]}|  ¡ V  qd S r[   )Ú
py__bool__)r>   Úleftr=   r=   rA   r^   Õ  rÏ   TrÛ   Fzinfer_or_test types %s)
Úiterrf   ru   rÑ   rc   ÚjoinÚsetr‘   r   rl   )rL   Zor_testÚiteratorÚtypesr‡   r¢   Z
left_boolsr=   r=   rA   rž   Ë  s*   



€

€ÿrž   c                 c   s|   � | D ]8}|dkrt |ƒr| ¡ V  q|dkr8| ¡ }|du r.t|jj d¡ ¡ ƒ ¡ V  qt	 
|j| ¡V  q|V  qdS )z6
    Calculates `+`, `-`, `~` and `not` prefixes.
    r2   ÚnotNÚbool)r   ÚnegaterÞ   rm   rF   rI   rš   rœ   r�   r   r½   )r    r‡   rX   Úbr=   r=   rA   r–   ä  s"   €
€ÿÿôr–   c                 C   sF   t }|D ]}t|ƒrt | |jj¡}|| ¡ O }q|t|gƒO }q|S r[   )r   r   r   r™   rx   Ústring_namer�   r   )rF   rt   Z
new_resultrŸ   Úclsr=   r=   rA   Ú_literals_to_typesø  s   rë   c                    s²   ˆ j ‰tˆtƒrˆ}ntˆjƒ}|rˆs!|ptˆptB }tˆ|ƒS |dkr9tdd„ t |ˆ¡D ƒƒr9t	 
|ˆf¡S t|ƒtˆƒ dkrJtˆ|ˆB ƒS t	 
‡ ‡‡‡fdd„|D ƒ¡S )Nr9   c                 s   s    � | ]}|  ¡ p| ¡ V  qd S r[   )Úis_classÚis_compiled)r>   rX   r=   r=   rA   r^     s
   € ÿ
ÿz$_infer_comparison.<locals>.<genexpr>é   c                 3   s*   � | ]}ˆD ]}t ˆˆ |ˆ|ƒV  qqd S r[   )Ú_infer_comparison_part)r>   rß   r¢   ©rL   r‡   Úright_valuesrÀ   r=   rA   r^     s   € ýþÿ)rF   r`   ÚstrrX   r   rë   ÚallÚ	itertoolsÚchainr   Ú	from_setsrk   )rL   rÔ   r‡   rñ   Zoperator_strrt   r=   rð   rA   r‘     s    



þþr‘   c                 C   sª   t  | ddd¡}|d u rdS |jdv r+|j}|d ur)|j| j  ko&|jk S   S dS |jdkrS|j}t|ƒdkrS|d jdkrS|d j| j  koP|d jk S   S dS )NÚparamÚfuncdefr€   F)r÷   rø   rC   rŠ   )r   rº   rc   r   rg   rh   rf   rk   )rx   ZancestorÚannrÂ   r=   r=   rA   r»   %  s   

ü&r»   c                 C   ó
   | j dkS )Nrm   ©rÌ   rW   r=   r=   rA   Ú_is_list5  ó   
rü   c                 C   rú   )NÚtuplerû   rW   r=   r=   rA   Ú	_is_tuple9  rý   rÿ   c                 C   s   t  | t|ƒ¡S r[   )r   r™   rò   )rF   Úbool_r=   r=   rA   Ú_bool_to_value=  s   r  c              	   C   sv   t | tjƒsd S g }|  ¡ D ]*}t |tƒs d S |j}|jdkr# d S z
| t|j	ƒ¡ W q t
y8   Y  d S w |S )Nry   )r`   r   r•   Z
py__iter__r
   Údatarc   ÚappendÚintrX   Ú
ValueError)rX   ÚnumbersrÖ   r«   r=   r=   rA   Ú_get_tuple_intsA  s   

ÿr  c                 C   s¶  t |ƒ}t |ƒ}t|tƒr|}nt|jƒ}|dkr8t|tjƒs#t|ƒr(t|gƒS t|tjƒs2t|ƒr7t|gƒS n¶|dkrj|r@|sHt|ƒrNt|ƒrN| ||¡S t	|ƒrVt	|ƒs^t
|ƒrit
|ƒritt | ||f¡gƒS n„|dkry|rx|rx| ||¡S nu|dkr‚t|gƒS |tv râ| ¡ r™| ¡ r™| ||¡}|r˜|S n=|dv r´t| }	|	||ƒ}
|dv |
kr´tt| |
ƒgƒS t|tƒrÖt|ƒ}|d urÖtjj| | jjt|ƒƒ}tt| |ƒgƒS tt| dƒt| dƒgƒS |d	v rî| j d
¡ ¡ S dd„ }|dv �r||k�r||ƒ�s||ƒ�sd}t |d||||f ¡ | ¡ �s| ¡ �r tS t| }| |¡}|�r6| |¡}|�r6|S |�sLt| }| |¡}| |¡}|�rL|S t||gƒ}t  !d||¡ |S )Nr3   r1   r2   r6   )Úisz!=ú==zis not)r  r	  TF)Úinznot inræ   c                 S   s   t | tƒo
| jjdv S )z4Checks if a Jedi object is either a float or an int.)r  Úfloat)r`   r   rx   ré   )Úobjr=   r=   rA   ÚcheckŒ  s   

ÿz%_infer_comparison_part.<locals>.check)r1   r2   z7TypeError: unsupported operand type(s) for +: %s and %sztype-error-operationz Used operator %s resulting in %s)"r   r`   rò   rX   r   ÚSequencer   r   Zexecute_operationrü   rÿ   ZMergedArrayr   rí   r  r   r  r   ÚaccessÚenvironmentÚversion_inforþ   rI   rš   rœ   r   Úaddrì   r   Úoperator_to_magic_methodr�   Ú reverse_operator_to_magic_methodr   rl   )rF   rL   rß   r‡   r¢   Zl_is_numZr_is_numZstr_operatorrt   Z	operationr   r  Zbool_resultr  ÚmessageÚmethod_nameZmagic_methodsZreverse_method_namer=   r=   rA   rï   R  s–   



ÿ €€
ÿ


þþÿÿ

ÿ



rï   c                 C   s$  t }| ¡ j}|d urg| ¡  |jg ¡}d}|D ]J}|j}|jdkrb|jd jdkrbt	 
|¡|jk}	|jd }
|	rbd}|
jd jdkrR|
jd j|jkrR|jrR|j}|t ||jd jd ¡ ¡ O }q|rg|S g }|jddd�}|d u r¬|j}|jdkr�| |¡}| ¡ r‡t S t| ¡ ƒ}| |j¡}t d	d
„ |D ƒ¡S |jdvr¬| |¡}t||ƒS |j}|dkr¾t |||¡}|r¾|S |dkrÍt |||¡}|rÍ|S |dv �rz|j| |j }W |S  t�y   t||jd ƒ}t| ¡ ||jjdkd�}t||ƒ}t||ƒ}Y |S w |dk�rt |||ƒ}|S |dk�rA| !| "|¡¡}|jjdk�r8| #d¡}| $¡ }| %¡  &¡ S | #d¡}| $¡ S |dv �rNt' (||¡}|S |dv �rZt)||ƒ}|S |dk�rn| !| *¡  *¡ ¡}| $¡ }|S |dk�rwt }|S |dk�r€t }|S |dk�rŒt!||ƒ}|S t+d| ƒ‚)NFr€   rC   rŠ   Trx   )Zimport_name_alwaysrÉ   Zglobal_stmtc                 s   rÝ   r[   )rj   )r>   rx   r=   r=   rA   r^   Ú  rÏ   z&tree_name_to_values.<locals>.<genexpr>)Zimport_fromÚimport_namerV   Z	with_stmt)rV   r¶   r·   rµ   Z
async_stmt)Zcontextualized_nodeÚis_asyncÚ
__aenter__Ú	__enter__)rø   ÚclassdefZtry_stmtr÷   Zdel_stmtrŒ   zShould not happen. type: %s),r   Zget_root_contextrE   Zget_used_namesre   rX   rb   rc   rf   r   Zget_parent_scoperG   r   r›   rœ   Zget_definitionZcreate_contextZ	is_modulerÑ   Zget_filtersr   rö   r�   Zfind_type_from_comment_hint_forZ find_type_from_comment_hint_withrd   rK   r   r	   rj   r   rÐ   r�   ru   Zget_test_node_from_namerš   r�   r“   r”   r   Zinfer_importÚ_apply_decoratorsZget_previous_siblingr  )rF   rL   Z	tree_namer    Zmodule_nodeÚnamesZfound_annotationrx   r€   Zcorrect_scopeZ
ann_assignrä   r«   rÂ   ÚfilterrŸ   rÕ   Z	for_typesrO   Zvalue_managersZenter_methodsÚcoroÚ
exceptionsr=   r=   rA   Útree_name_to_values¯  s¼   

ÿÿþ€





)Ø
ý
 Ø
	
ã



ð

ò	
ø
ú
ü
ÿr!  c           	   	      s|  |j dkrt| j| |d�‰ nt | |¡‰ tˆ gƒ }}t| ƒr!|S t| ¡ ƒD ]…}t	j
d||dd� t	 ¡ �f |  |jd ¡}|jdd… }|rWt d	|¡}||_t| ||ƒ}t|ƒsw|jd
d�}|dkrlt	 d||¡ |W  d  ƒ   S | t |g¡¡}t|ƒs•t	 d|¡ |W  d  ƒ   S W d  ƒ n1 sŸw   Y  t	j
d|dd� q'||kr¼t‡ fdd„|D ƒƒS |S )z†
    Returns the function, that should to be executed in the end.
    This is also the places where the decorators are processed.
    r  )rG   rE   zdecorator: %s %sZMAGENTA)ÚcolorrC   r<   r…   r¡   F)Zinclude_prefixz	@runtime
zdecorator not found: %s on %sNz)not possible to resolve wrappers found %szdecorator end %sc                    s   g | ]}t |ˆ ƒ‘qS r=   r!   rÚ   ©Zdecoratee_valuer=   rA   rZ   G  s    z%_apply_decorators.<locals>.<listcomp>)rc   r   rF   r   rŽ   r   r   ÚreversedZget_decoratorsr   rl   Zincrease_indent_cmru   rf   r   Z
PythonNoderb   r’   rk   Úget_coderJ   rª   r   ZValuesArguments)	rL   r«   ÚinitialÚvaluesÚdecZ
dec_valuesZtrailer_nodesr¡   Úcoder=   r#  rA   r    sH   
ý
ðëír  c              	   C   s�   d}|   ¡ D ]?\}}t| j|ƒ}| |¡}t|tƒrt  S d}||krAzt|ƒ}W n ty7   t Y   S w ||j	7 }||ks$| 
¡ }q|S )z(
    Checks if tuples are assigned.
    Nr   )Zassignment_indexesr   rG   rÒ   r`   Úslicer   rÑ   ÚStopIterationÚmaxrj   )rx   r    rÖ   Úindexr«   rÕ   Ziteratedr\   r=   r=   rA   rÐ   K  s"   

û
ö
rÐ   c                   @   s   e Zd Zdd„ ZdS )rË   c                 C   s   t | j| jƒS r[   )r©   rL   r«   )Úselfr=   r=   rA   rj   g  s   z%ContextualizedSubscriptListNode.inferN)Ú__name__Ú
__module__Ú__qualname__rj   r=   r=   r=   rA   rË   f  s    rË   c                 C   sê   |dkrt t | ddd¡gƒS |jdkr`|jd dks`g }|jD ](}|dkr.|s-| d¡ q |jdkrCt|jƒdkrB| |jd ¡ q | |¡ q |dgd	t|ƒ  7 }t tj| g|¢R Ž gƒS |jd
krpt t | j| |¡gƒS |  	|¡S )z,
    Handles slices in subscript nodes.
    r´   NZ	subscriptr   r§   Zsliceopr<   rC   rµ   rÍ   )
r   r   ÚSlicerc   rf   r  rk   r•   rF   ru   )rL   r-  rt   Úelr=   r=   rA   r©   k  s&   

€
€

r©   r[   )QÚ__doc__ro   rô   Zparso.pythonr   Zjedir   r   Zjedi.inference.base_valuer   r   r   r   r	   Zjedi.inference.lazy_valuer
   Zjedi.inferencer   r   r   r   r   Zjedi.inference.valuer   r   r   Z#jedi.inference.value.dynamic_arraysr   r   r   Zjedi.inference.helpersr   r   r   r   r   Zjedi.inference.compiled.accessr   Zjedi.inference.cacher   Z!jedi.inference.gradual.stub_valuer   Zjedi.inference.gradualr   Zjedi.inference.namesr   Zjedi.inference.contextr    Zjedi.inference.value.decoratorr"   Zjedi.pluginsr#   r  Úitemsr  rT   ru   rq   rv   Zincrease_indentra   r’   r�   r�   rÄ   rž   r–   rë   r‘   r»   rü   rÿ   r  r  rï   Zdecorater!  r  rÐ   rË   r©   r=   r=   r=   rA   Ú<module>   s–    óÿ!H
NUM
]
i
1