TL im6ddlmZddlmZddlmZddlmZddlm Z m Z ddl m Z ddl mZmZdZe d j#zZd Zd Zd Z ddZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%y ))dedent) split_lines)debug)RefactoringError) RefactoringEXPRESSION_PARTS) indent_block)function_is_classmethodfunction_is_staticmethodsuite file_inputz_atom testlist_star_expr testlist test lambdef lambdef_nocond keyword name number string fstringct|||}tjd|t|\}}|s t ||dzt |z} |t ||| |i} t|| S)NzExtracting nodes: %s = ) _find_nodesrdbg_is_expression_with_errorr_expression_nodes_to_string_replacer) inference_statepath module_nodenamepos until_posnodes is_expressionmessagegenerated_codefile_to_node_changess b/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/jedi/api/refactoring/extract.pyextract_variabler"st  S) 4E II$e,6u=M7 w''E\$?$FFN (5$"LM (< ==c|td|Dry|djtvrdd|djzfSy)z8 Returns a tuple (is_expression, error_string). c3^K|]%}|jdk(xr|j'yw)rN)type is_definition).0nodes r! z,_is_expression_with_error..#s* JD499  74#5#5#7 7 Js+-)Fz,Cannot extract a name that defines somethingrFzCannot extract a "%s")T)anyr&_VARIABLE_EXCTRACTABLErs r!rrsB JE JJD Qx}}22-a === r#c|j|d}||jdk(r#|j}||j|k(r|}t |r |j }|j jdk(r|j j }|j jt vr)|j }|j jt vr)|g}n|j|k(r|j}||}t |r |j }|j|d}|j|kDr|j}| td|}|j|jkr&|j }|j|jkr&t|||}t|dk(r!|jdvr|djdgS|S) zd Looks up a module and tries to find the appropriate amount of nodes that are in there. T)include_prefixesoperatortrailerz!Cannot extract anything from that) return_stmt yield_exprr) get_leaf_for_positionr& get_next_leaf start_pos_is_not_extractable_syntaxparentrend_posget_previous_leafr!_remove_unwanted_expression_nodeslenchildren)rrr start_node next_leafrend_leaf parent_nodes r!rr+s 2232NJ ??j ("002I$)<)<)C& %j 1#**J    ! !Y .#**11J$$(88#**J$$(88     $"002I$&  &j 1#**J44YQU4V    )113H&'JKK !!H$4$44%,,K!!H$4$442+sIN  5zQ:??.KKa!!!$%% Lr#Nct|d}||j}|dj}t|jd}||ur|||ddt ||ddzg|dddj |} i} ||ur | |z| |d<n=| |j} n|t |dz} | |z| |d<| |jz| |<|ddD]} d| | < | S)NrTkeepends r+r3)_get_parent_definitionget_first_leafrprefixr join_get_indentationvalue) rexpression_replacement extractedrinsert_before_leafremaining_prefix definitionfirst_node_leaflinesextracted_prefixreplacement_dctpr)s r!rras)(a1J!'668Ah--/O *11D AE,,  ')E#2J E"I6=>E"RLwwu~O,,$47M$Ma!  #&&A #3E!H#==A$%(>$>a!.>ASAYAY.Y*+ab # "# r#cDdjdt|DS)Nr+c3LK|]\}}|j|dk7yw)rinclude_prefixNget_code)r(ins r!r*z._expression_nodes_to_string..s#RA1::Q!V:4Rs"$)rL enumerater.s r!rrs 77R5AQR RRr#c|d}t|j|ddz \}}||jdzdjd|ddDz}||fS)Nrr3Fr[r+c3<K|]}|jyw)Nr])r(r`s r!r*z)_suite_nodes_to_string..s21!**,2s)_split_prefix_atrJr^rL)rrr`rK part_of_codecodes r!_suite_nodes_to_stringrgsi aA+A,<,<,>A KFL !**E*: : ''2ab 2 2 3D 4<r#c|jd|z }t|jd}dj|d| dj|| dfS)zU Returns a tuple of the leaf's prefix, split at the until_line position. rTrEr+N)r8rrKrL)leaf until_linesecond_line_countrUs r!rdrds] q)J6  d 3E 775,,,- .?P>P>Q8R0S SSr#cNt|jjdS)NrG)rrJrKr)s r!rMrMs! t**,33 4R 88r#cv|-|jjtvr|S|j}|-td)z8 Returns the statement where a node is defined. zWe should never even get here)r:r&_DEFINITION_SCOPESNotImplementedErrorrms r!rIrIsA   ;;  1 1K{{   = >>r#c|j}|dv}|tvs|r|j}t|D],\}}|j|kDs|}|jdk(r|dz}nt t t|D]H\}}|j|ks|} |jdk(r| dz } ||dD]} t| r| dz } nn| dz}|s&t|d|||ddt|d|||dd|S|gS)z~ This function makes it so for `1 * 2 + 3` you can extract `2 + 3`, even though it is not part of the expression. r r1r3NrrG) r&rr?rar;reversedlistr8r9r=) rCrrtyp is_suite_partrr_r` start_index end_indexn2s r!r=r=s=   C22M -$$e$ DAqyy3 66Z'1$K   T)E"234 DAq{{Y& 66Z'NI )B1"5!Q    k)a-0:58S)TE!AJ:59c9UE"#J =r#cb|jdk(xs|jdk(xr|jdvS)Nr1keyword)NoneTrueFalse)r&rNrms r!r9r9s5 99 " R 99 ! Qdjj8Q&QRr#c Rt|j||}t|sJt|\}}|j |d} | j } t t|| |\} } | jrd} n&t| j| }|j} |rdt|zdz}d}d}nt|d}|s=| r9t t| |dj|dj| xs| dgng} t!||\}}|dj#}t%||d\}}||z }t'|}|sdj)| }|d|zdzz }t+|r|ddn|d}d}| rzt-| jsM| j/j1}t|r$|dj2}| Dcgc] }||k7s | } }t5| jrd}n|dz }|d |d dj)|| n|g| zd t7|}|dn|d z|zd dj)| d }|r|}n|r d|zdz}n dz|zdz}t9||||| |}|sj:z||<||i}t=||Scc}w)Nrzreturn rHFrGz, r+z @classmethod zdef (z): .)r)r tree_noder>rcreate_contextis_bound_methodrs_find_inputs_and_outputs is_module_get_code_insertion_noderJr_is_node_ending_return_stmt_find_needed_output_variablesr:r;rgr7rdrrL_check_for_non_extractablesr get_valueget_param_names string_namer r rrNr)rrmodule_contextrrrrr_contextrparamsreturn_variablesrQr) code_blockrRhas_ending_return_stmt after_leaffirstsecondoutput_var_str decorator self_paramfunction_param_namesrX function_code function_call replacementrWr s r!extract_functionrs  00#y AE u::07M1++E!H5G--/O#$<^WV[$\]F !'(9(9?K!002!eS'I$*2Y,,. (Yq\B ve J' %!YY'78N )n4t; ;J .Dcr %PIJ'(9(9:#*#4#4#6#F#F#H '(1!4@@ %+?qJ!?? "7#4#4 5(Id    J.&ZL64IJZ M!zC'74? &M# !#m3d:K(50=@4GKuk=#13CEO &,z/?/?&? # /2 (< ==?@s  J$$J$c|D]} |j}t|y#t$r7|jdk(r t d|jdk(r t dY]wxYw)Nreturnz:Can only extract return statements if they are at the end.yieldz Cannot extract yield statements.)r?rAttributeErrorrNr)rr`r?s r!rr(sw  2 2zzH ( 1 2 Kww("&PRRww'!&'IJJ"  Ks !=A! A!c|D]f}|jdk(s|jjr-|j|ury|j||jcxkr|krcyyy)NparamTF)api_typeparent_contextrget_root_contextr8)rnamesrlastrs r!_is_name_inputr6sm ==G #4+>+>+H+H+J$$&n<~~%et~~.L.L/M  r#c~|dj}|dj}g}g}t|D]}|jr!||vs|j |j 4|j |vsC|j ||j}|rt||||sp|j |j ||fS)NrrG)r8r;_find_non_global_namesr'appendrNgotor) rrrrrinputsoutputsrname_definitionss r!rr@s !H  E 9  D FG&u- .    7"tzz*zz'#*<<dnn#E ').:JESWXMM$**- . 7?r#c#K|D]D} |j}|jdk(r|jddk(r2t|Ed{Fy7#t$r|jdk(r|YhwxYww)Nr2rrr)r?r&rr)rr)r?s r!rrUsy 8 8}}H yyI%$--*:c*A-h7 7 7 8 8 yyF"  s3A1 A0A1A A1A.+A1-A..A1c|r t|r?|jjdk7r&|j}|jjdk7r&|jjdvr%|j}|jjdvr%|S)Nr) async_funcdef decorated async_stmt)r r:r&)r)rs r!rrdst 6t<kk,.;;Dkk,. ++  J J{{ ++  J J Kr#c#K|jD]w}|j|krt|}t|gD]K}|j r|j |vs#|j |j |j Myyw)z Searches everything after at_least_pos in a node and checks if any of the return_variables are used in there and returns those. N)r?r8setrr'rNremove)r search_node at_least_posrr)rs r!rrns $$! >>L ( /0*D62 !D%%'DJJ:J,J '' 3jj  ! !sA B  B .B c^|j}|dk(rt|jdS|dk(S)N simple_stmtrr4)r&rr?)r)ts r!rr~s2 AM*4==+;<< r#)NN)&textwraprparsorjedirjedi.api.exceptionsrjedi.api.refactoringrr jedi.commonr jedi.parser_utilsr r rosplitr-r"rrrrrgrdrMrIr=r9rrrrrrrrr#r!rs0>$O-)*+0573 > 3n8<BST9?!HR T>n 2* 8 ! r#