§
    ŒŸj   ã                   ó$  — d 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 ddlmZ dZd„ Zej        ed„ ¦   «         ¦   «         Z ed¬¦  «        ed„ ¦   «         ¦   «         Zd„ Zd„ Zd„ Z dS )aß  
One of the really important features of |jedi| is to have an option to
understand code like this::

    def foo(bar):
        bar. # completion here
    foo(1)

There's no doubt wheter bar is an ``int`` or not, but if there's also a call
like ``foo('str')``, what would happen? Well, we'll just show both. Because
that's what a human would expect.

It works as follows:

- |Jedi| sees a param
- search for function calls named ``foo``
- execute these calls and check the input.
é    )Úsettings)Údebug)Úget_parent_scope)Úinference_state_method_cache)ÚTreeArguments)Úget_executed_param_names)Úis_stdlib_path)Úto_list)Úinstance)ÚValueSetÚ	NO_VALUES)Ú#get_module_contexts_containing_name)Ú	recursioné   c                 ó   ‡ — ˆ fd„}|S )Nc                 ó(  •— | j         }t          j        || j        ¦  «        5 }|rN|xj        dz  c_        	  ‰| |¦  «        |xj        dz  c_        cd d d ¦  «         S # |xj        dz  c_        w xY wt
          cd d d ¦  «         S # 1 swxY w Y   d S )Né   )Úinference_stater   Úexecution_allowedÚ	tree_nodeÚdynamic_params_depthr   )Úfunction_valueÚparam_indexÚinfÚallowedÚfuncs       €új/var/www/finuniver-perm.ru/html/student/venv/lib/python3.11/site-packages/jedi/inference/dynamic_params.pyÚwrapperz"_avoid_recursions.<locals>.wrapper&   s  ø€ ØÔ,ˆÝÔ(¨¨nÔ.FÑGÔGð 
	È7ð ð 2ØÐ(Ô(¨AÑ-Ð(Ô(ð2Ø˜4 °Ñ<Ô<àÐ,Ô,°Ñ1Ð,Ô,ð
	ð 
	ð 
	ð 
	ñ 
	ô 
	ð 
	ð 
	øð Ð,Ô,°Ñ1Ð,Ô,Ð,Ð,Ð,Ð,Ýð
	ð 
	ð 
	ð 
	ñ 
	ô 
	ð 
	ð 
	ð 
	ð 
	ð 
	ð 
	øøøð 
	ð 
	ð 
	ð 
	ð 
	ð 
	s(   £B·AÁBÁA1Á1	BÂBÂB© )r   r   s   ` r   Ú_avoid_recursionsr    %   s#   ø€ ðð ð ð ð ð €Nó    c                 ó   ‡ ‡— ‰ j         j        st          S ‰ j        }‰                      ¦   «                              ¦   «         }|�t          |¦  «        rt          S |j        dk    rt          |¦  «        }|€t          S n|j	        j
        }t          j        d|d¬¦  «         ‰                      ¦   «         }t          |||¦  «        }t          j        ˆ ˆfd„|D ¦   «         ¦  «        }t          j        dd¬¦  «         |S )a:  
    A dynamic search for param values. If you try to complete a type:

    >>> def func(foo):
    ...     foo
    >>> func(1)
    >>> func("")

    It is not known what the type ``foo`` without analysing the whole code. You
    have to look for all calls to ``func`` to find out what ``foo`` possibly
    is.
    NÚlambdefzDynamic param search in %s.ÚMAGENTA)Úcolorc              3   óh   •K  — | ],}t          ‰|¦  «        ‰                              ¦   «         V — Œ-d S )N)r   Úinfer)Ú.0Ú	argumentsr   r   s     €€r   ú	<genexpr>z'dynamic_param_lookup.<locals>.<genexpr>\   sY   øè è € ð  ð  ð õ 	!Ø˜Iñ	
ô 	
à
ô	ç’u‘w”wð ð  ð  ð  ð  ð  r!   zDynamic param result finished)r   Údo_dynamic_params_searchr   r   Úget_root_contextÚ
py__file__r	   ÚtypeÚ_get_lambda_nameÚnameÚvaluer   ÚdbgÚ_search_function_argumentsr   Ú	from_sets)r   r   ÚfuncdefÚpathÚstring_nameÚmodule_contextÚarguments_listÚvaluess   ``      r   Údynamic_param_lookupr;   6   s'  øø€ ð Ô)ÔBð ÝÐàÔ&€Gà×*Ò*Ñ,Ô,×7Ò7Ñ9Ô9€DØÐ�N¨4Ñ0Ô0Ðõ
 Ðà„|�yÒ Ð Ý& wÑ/Ô/ˆØÐÝÐð ð ”lÔ(ˆÝ	„IÐ+¨[À	ÐJÑJÔJÐJà#×4Ò4Ñ6Ô6€NÝ/°ÀÈÑUÔU€NÝÔð  ð  ð  ð  ð  ð (ð	 ñ  ô  ñ ô €Fõ 
„IÐ-°YÐ?Ñ?Ô?Ð?Ø€Mr!   N)Údefaultc           	   #   ó¢  K  — |}|dk    r(t          |¦  «        }|j        dk    r|j        j        }|}d}d}| j        }t
          j        rt          || g|d¬¦  «        }n| g}|D ]j}	t          |	|¦  «        D ]R\  }
}|dz  }||j	        z  t          k    r  dS |	                     |
¦  «        }t          ||||
|¦  «        D ]}d	}|V — Œ	ŒS|r dS ŒkdS )
z(
    Returns a list of param names.
    Ú__init__ÚclassdefFr   é   )Úlimit_reductionr   NT)r   r.   r0   r1   r   r   Ú dynamic_params_for_other_modulesr   Ú_get_potential_nodesr   ÚMAX_PARAM_SEARCHESÚcreate_contextÚ_check_name_for_execution)r8   r5   r7   Úcompare_nodeÚclsÚfound_argumentsÚir   Úmodule_contextsÚfor_mod_contextr0   ÚtrailerÚrandom_contextr)   s                 r   r3   r3   f   sL  è è € ð €LØ�jÒ Ð Ý˜wÑ'Ô'ˆØŒ8�zÒ!Ð!Øœ(œ.ˆKØˆLà€OØ	€AØ$Ô4€OåÔ0ð +Ý=Ø˜nÐ-¨{àð
ñ 
ô 
ˆˆð *Ð*ˆà*ð ð ˆÝ1°/À;ÑOÔOð 	 ð 	 ‰MˆD�'Ø�‰FˆAð
 �?Ô7Ñ7Õ:LÒLÐLØ���à,×;Ò;¸DÑAÔAˆNÝ6Ø# ^°\À4ÈñRô Rð  ð  �	à"&�Ø����ð ð ð 	ØˆFˆFð	ð%ð r!   c                 ó¸   — | j         }|j        dk    rGt          |                     ¦   «         d ¦  «        }|dk    r|j        d         }|j        dk    r|j        S d S )NÚ	expr_stmtú=r   r0   )Úparentr.   ÚnextÚyield_operatorsÚchildrenr1   )ÚnodeÚstmtÚfirst_operatorÚfirsts       r   r/   r/   –   sb   € ØŒ;€DØ„y�KÒÐÝ˜d×2Ò2Ñ4Ô4°dÑ;Ô;ˆØ˜SÒ Ð Ø”M !Ô$ˆEØŒz˜VÒ#Ð#Ø”{Ð"àˆ4r!   c              #   óÜ   K  — 	 | j                              ¦   «         |         }n# t          $ r Y d S w xY w|D ]4}|                     ¦   «         }|j        }|j        dk    r|dk    r||fV — Œ5d S )NrM   ú()r   Úget_used_namesÚKeyErrorÚget_next_leafrR   r.   )Úmodule_valueÚfunc_string_nameÚnamesr0   ÚbracketrM   s         r   rC   rC   ¢   s¢   è è € ðØÔ&×5Ò5Ñ7Ô7Ð8HÔIˆˆøÝð ð ð Øˆˆðøøøð ð  ð  ˆØ×$Ò$Ñ&Ô&ˆØ”.ˆØŒ<˜9Ò$Ð$¨°Cª¨Ø˜�-ÐÐÐøð	 ð  s   „$ ¤
2±2c           	   #   óÌ  ‡ ‡‡K  — ddl m} ˆˆ ˆfd„}‰                      ‰|¦  «        D �]9}|j        }||k    r ||¦  «        V — Œt	          |j        |¦  «        �r|j        dk    rú|j                             ¦   «         }	t          |	¦  «        dk    rŒl|	d                              ¦   «         }
d„ |
D ¦   «         |gk    r¢‰ 	                    ¦   «         }| 
                     ||¦  «        ¦  «        }t          ||	d         j        ¦  «        }|D ]R\  }Š|j        |j        cxk     r|j        k     r1n Œ$|                     |¦  «        }t!          ‰ |||‰¦  «        E d {V —† ŒS�Œ;d S )Nr   )ÚBaseFunctionExecutionContextc                 ó  •— ‰j         d         }|dk    rd }t          ‰‰|‰¦  «        }ddlm} | j        j        dk    r(t          j        ‰| j        | |¦  «        } |||¦  «        S |  	                    ¦   «         r || j        |¦  «        }|S )Nr   ú)r   )ÚInstanceArgumentsr?   )
rU   r   Újedi.inference.value.instancerg   r   r.   r   ÚTreeInstanceÚparent_contextÚis_bound_method)r1   ÚarglistÚargsrg   Úcreated_instanceÚcontextr   rM   s        €€€r   Úcreate_argsz._check_name_for_execution.<locals>.create_args²   s¸   ø€ ØÔ" 1Ô%ˆØ�cŠ>ˆ>ØˆGÝ˜_¨g°wÀÑHÔHˆØCÐCÐCÐCÐCÐCØŒ?Ô :Ò-Ð-Ý'Ô4ØØÔ$ØØñ	 ô  Ðð %Ð$Ð%5°tÑ<Ô<Ð<à×$Ò$Ñ&Ô&ð ?Ø(Ð(¨¬¸Ñ>Ô>�ØˆKr!   r5   r   c                 ó   — g | ]	}|j         ‘Œ
S r   )r   )r(   Úvs     r   ú
<listcomp>z-_check_name_for_execution.<locals>.<listcomp>Ò   s   € Ð,Ð,Ð, �”Ð,Ð,Ð,r!   )Újedi.inference.value.functionrd   r'   r   Ú
isinstancerj   r.   Úget_param_namesÚlenr,   Ú
as_contextrC   r7   Ú	start_posÚend_posrE   rF   )r   ro   rG   r0   rM   rd   rp   r1   Ú
value_nodeÚparam_namesr:   r8   Úexecution_contextÚpotential_nodesrN   s   ``  `          r   rF   rF   ¯   së  øøøè è € ØJÐJÐJÐJÐJÐJðð ð ð ð ð ð ð& !×&Ò& w°Ñ5Ô5ð ñ ˆØ”_ˆ
Ø˜:Ò%Ð%Ø�+˜eÑ$Ô$Ð$Ð$Ð$Ð$Ý˜Ô,Ð.JÑKÔKñ 	Ø Ô%¨Ò2Ð2ð  Ô.×>Ò>Ñ@Ô@ˆKÝ�;ÑÔ 1Ò$Ð$ØØ  ”^×)Ò)Ñ+Ô+ˆFØ,Ð, VÐ,Ñ,Ô,°°Ò>Ð>à!(×!9Ò!9Ñ!;Ô!;�Ø$)×$4Ò$4°[°[ÀÑ5GÔ5GÑ$HÔ$HÐ!Ý"6°~À{ÐSTÄ~ÔGaÑ"bÔ"b�Ø%4ð 	ð 	‘M�D˜'Ø!Ô+¨d¬nÐQÐQÒQÐQ¸zÔ?QÒQÐQÐQÐQÐQØ):×)IÒ)IÈ$Ñ)OÔ)O˜Ý#<Ø+Ø*Ø(Ø Ø#ñ$ô $ð ð ð ð ð ð ð øùð+ð r!   )!Ú__doc__Újedir   r   Újedi.parser_utilsr   Újedi.inference.cacher   Újedi.inference.argumentsr   Újedi.inference.paramr   Újedi.inference.helpersr	   Újedi.inference.utilsr
   Újedi.inference.valuer   Újedi.inference.base_valuer   r   Újedi.inference.referencesr   Újedi.inferencer   rD   r    Úincrease_indentr;   r3   r/   rC   rF   r   r!   r   ú<module>rŒ      s�  ððð ð& Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø .Ð .Ð .Ð .Ð .Ð .Ø =Ð =Ð =Ð =Ð =Ð =Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø (Ð (Ð (Ð (Ð (Ð (Ø )Ð )Ð )Ð )Ð )Ð )Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø IÐ IÐ IÐ IÐ IÐ IØ $Ð $Ð $Ð $Ð $Ð $ð Ð ðð ð ð" ÔØð+ð +ñ Ôñ Ôð+ð\ Ð dÐ+Ñ+Ô+Øð+ð +ñ 	„ñ ,Ô+ð+ð\	ð 	ð 	ð
 ð 
 ð 
 ð1ð 1ð 1ð 1ð 1r!   