TL idZddlmZddlmZddlmZddlmZddlm Z ddl m Z ddl m Z dd lmZdd lmZdd lmZmZdd lmZdd lmZdZdZej6edZededZdZdZdZ y)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) recursioncfd}|S)NcF|j}tj||j5}|r=|xjdz c_ |||xjdzc_cdddSt cdddS#|xjdzc_wxYw#1swYyxYw)N)inference_staterexecution_allowed tree_nodedynamic_params_depthr )function_value param_indexinfallowedfuncs c/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/jedi/inference/dynamic_params.pywrapperz"_avoid_recursions..wrapper&s,,  ( (n.F.F G 7((A-(2 <,,1,    ,,1,  s)BA=B.B=BBB )rrs` r_avoid_recursionsr %s  NcjjstSj}j j }|t |rtS|jdk(rt|}|tS|jj}tjd|dj }t|||}tjfd|D}tjdd|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. lambdefzDynamic param search in %s.MAGENTA)colorc3XK|]!}t|j#yw)N)rinfer).0 argumentsrrs r z'dynamic_param_lookup..\s9   ! I  uw  s'*zDynamic param result finished)rdo_dynamic_params_searchr rget_root_context py__file__r type_get_lambda_namenamevaluerdbg_search_function_argumentsr from_sets)rrfuncdefpath string_namemodule_contextarguments_listvaluess`` rdynamic_param_lookupr;6s  ) ) B B&&G  * * , 7 7 9D N40 ||y &w/   ll((  II+[ J#446N/UN    (  F  II-Y? Mr!N)defaultc #K|}|dk(r2t|}|jdk(r|jj}|}d}d}|j}t j rt||g|d}n|g}|D]c} t| |D]N\} } |dz }||jztkDry| j| } t|| || | D]} d }|  P|scyyw) z( Returns a list of param names. __init__classdefFr)limit_reductionrNT) rr.r0r1rr dynamic_params_for_other_modulesr_get_potential_nodesrMAX_PARAM_SEARCHEScreate_context_check_name_for_execution)r8r5r7 compare_nodeclsfound_argumentsirmodule_contextsfor_mod_contextr0trailerrandom_contextr)s rr3r3fs  Lj w' 88z !((..KLO A$44O00= n-{  ***1/;O MD' FA ?777:LL,;;DAN6#^\4R "&  "  's CCCc|j}|jdk(rIt|jd}|dk(r*|jd}|jdk(r |j Sy)N expr_stmt=rr0)parentr.nextyield_operatorschildrenr1)nodestmtfirst_operatorfirsts rr/r/s[ ;;D yyKd224d; S MM!$EzzV#{{" r!c#K |jj|}|D]:}|j}|j}|j dk(s/|dk(s5||f<y#t$rYywxYww)NrM()rget_used_namesKeyError get_next_leafrRr.) module_valuefunc_string_namenamesr0bracketrMs rrCrCs|&&5578HI $$&.. <<9 $C-    s3A0A!0A0A0 A0! A-*A0,A--A0c #Kddlm}fd}j|D]@}|j}||k(r || t |j |s7|j dk(sG|j j} t| dk7rp| dj} | D cgc]} | jc} |gk(sj} |j||} t| | dj}|D]Z\}|j|jcxkr|jks0n3| j|}t!|||Ed{\Cycc} w7w)Nr)BaseFunctionExecutionContextc*jd}|dk(rd}t|}ddlm}|jj dk(r+t j|j||}|||S|jr||j |}|S)Nr)r)InstanceArgumentsr?) rUrjedi.inference.value.instancergrr.r TreeInstanceparent_contextis_bound_method)r1arglistargsrgcreated_instancecontextrrMs r create_argsz._check_name_for_execution..create_argss""1% c>G_gwHC ??  : -'44$$    %%5t< <$$&(>Kr!r5r)jedi.inference.value.functionrdr'r isinstancerjr.get_param_nameslenr, as_contextrCr7 start_posend_posrErF)rrorGr0rMrdrpr1 value_node param_namesr:vr8execution_contextpotential_nodesrNs`` ` rrFrFs_J&!&&w5__ : %e$ $ ,,.J K %%2 ..>>@K;1$ ^))+F%+, ,>!(!9!9!;$)$4$4[5G$H!"6~{ST~GaGa"b%4 MD'!++dnnQz?Q?QQ):)I)I$)O#<+*( # $ %-s8AE1E1,AE1,E*?E1A1E19&E1E/ E1)!__doc__jedirrjedi.parser_utilsrjedi.inference.cacherjedi.inference.argumentsrjedi.inference.paramrjedi.inference.helpersr jedi.inference.utilsr jedi.inference.valuer jedi.inference.base_valuer r jedi.inference.referencesrjedi.inferencerrDr increase_indentr;r3r/rCrFrr!rrs&.=291()9I$"++\d++ ,+\   1r!