+
    em6                     
   ^ RI Ht ^ RIHt ^ RIHt ^ RIHt ^ RIH	t	H
t
 ^ RIHt ^ RIHtHt Rt]
RP#                  4       ,           tR	 tR
 tR tRR ltR tR tR tR tR tR tR tR tR tR t R t!R t"R t#R t$R t%R# )    )dedent)split_lines)debug)RefactoringError)RefactoringEXPRESSION_PARTS)indent_block)function_is_classmethodfunction_is_staticmethodz_atom testlist_star_expr testlist test lambdef lambdef_nocond keyword name number string fstringc                     \        W$V4      p\        P                  ! R V4       \        V4      w  rxV'       g   \	        V4      hVR,           \        V4      ,           p	V\        WcW4      /p
\        W
4      # )zExtracting nodes: %s = )_find_nodesr   dbg_is_expression_with_errorr   _expression_nodes_to_string_replacer   )inference_statepathmodule_nodenamepos	until_posnodesis_expressionmessagegenerated_codefile_to_node_changess   &&&&&&     >/usr/lib/python3/dist-packages/jedi/api/refactoring/extract.pyextract_variabler      si    )4E	II$e,6u=Mw''E\$?$FFN (5"LM==    c                    \         ;QJ d    R V  4       F  '       g   K   RM	  RM! R V  4       4      '       d   R# V ^ ,          P                  \        9  d   RRV ^ ,          P                  ,          3# R# )z0
Returns a tuple (is_expression, error_string).
c              3   n   "   T F+  qP                   R 8H  ;'       d    VP                  4       x  K-  	  R# 5i)r   N)typeis_definition).0nodes   & r   	<genexpr>,_is_expression_with_error.<locals>.<genexpr>#   s+     
JED99774#5#5#77Es   55TFzCannot extract a "%s")Fz,Cannot extract a name that defines something)T )anyr#   _VARIABLE_EXCTRACTABLEr   s   &r   r   r      sZ     s
JE
Jsss
JE
JJJDDQx}}22-a===Or    c                   V P                  VRR7      pVf   VP                  R8X  d(   VP                  4       pVe   VP                  V8X  d   Tp\	        V4      '       d   VP
                  pVP
                  P                  R8X  d   VP
                  P
                  pVP
                  P                  \        9   d   VP
                  pK-  V.pMVP                  V8X  d   VP                  4       pVe   Tp\	        V4      '       d   VP
                  pV P                  VRR7      pVP                  V8  d    VP                  4       pVf   \        R4      hTpVP                  VP                  8  d   VP
                  pK)  \        WqV4      p\        V4      ^8X  d-   VP                  R9   d   V^ ,          P                  ^,          .# V# )zX
Looks up a module and tries to find the appropriate amount of nodes that
are in there.
T)include_prefixesoperatortrailerz!Cannot extract anything from that)return_stmt
yield_expr)get_leaf_for_positionr#   get_next_leaf	start_pos_is_not_extractable_syntaxparentr   end_posget_previous_leafr   !_remove_unwanted_expression_nodeslenchildren)r   r   r   
start_node	next_leafr   end_leafparent_nodes   &&&     r   r   r   +   s   
 2232NJ??j("002I$)<)<)C&
%j11#**J!!Y.#**11J$$(88#**J $"002I$&
 &j11#**J 44YQU4V	)113H&'JKK !!H$4$44%,,K1+IN
 5zQ:??.KKa!!!$%%Lr    Nc                    \        V ^ ,          4      pVf   VP                  4       pV ^ ,          P                  4       p\        VP                  RR7      pWtJ d	   Ve   WXRR% \	        W(R,          4      R,           .VRR% RP                  V4      p	/ p
WtJ d   W,           W^ ,          &   MOVf   VP                  pMV\        V ^ ,          4      ,           pW,           W^ ,          &   WP                  ,           W&   V R,           F  pRW&   K	  	  V
# )r   NTkeepends
r)      NN)_get_parent_definitionget_first_leafr   prefixr	   join_get_indentationvalue)r   expression_replacement	extractedr   insert_before_leafremaining_prefix
definitionfirst_node_leaflinesextracted_prefixreplacement_dctpr&   s   &&&&&&       r   r   r   a   s    (a1J!'668Ah--/O*11DAE,')#2J "I6=>E"RLwwu~O,$4$Ma!#&&A #3E!H#==A$%$>a!.>AYAY.Y+b		 " r    c                 D    R P                  R \        V 4       4       4      # )r)   c              3   P   "   T F  w  rVP                  V^ 8g  R7      x  K  	  R# 5i)r   include_prefixNget_code)r%   ins   &  r   r'   ._expression_nodes_to_string.<locals>.<genexpr>   s&     RAQ1::Q!V:44AQs   $&)rK   	enumerater,   s   &r   r   r      s    77R5AQRRRr    c                     V ^ ,          p\        VP                  4       V^ ,          ^,
          4      w  r4WBP                  RR7      ,           RP                  R V R,           4       4      ,           pW53# )r   FrZ   r)   c              3   @   "   T F  qP                  4       x  K  	  R # 5i)Nr\   )r%   r_   s   & r   r'   )_suite_nodes_to_string.<locals>.<genexpr>   s     2	1**,,	s   rE   )_split_prefix_atrI   r]   rK   )r   r   r_   rJ   part_of_codecodes   &&    r   _suite_nodes_to_stringrh      sa    aA+A,<,<,>A
KF**E*::
''2b	2
23D<r    c                    V P                   ^ ,          V,
          p\        V P                  RR7      pRP                  VRV)  4      RP                  W2) R 4      3# )zI
Returns a tuple of the leaf's prefix, split at the until_line
position.
TrB   r)   N)r5   r   rJ   rK   )leaf
until_linesecond_line_countrT   s   &&  r   re   re      sZ     q)J6d3E775,,,-.>P>Q8R0SSSr    c                 V    \        V P                  4       P                  4      R,          # )rF   rG   )r   rI   rJ   r&   s   &r   rL   rL      s!    t**,334R88r    c                ~    V e0   V P                   P                  \        9   d   V # V P                   p K3  \        R4      h)z0
Returns the statement where a node is defined.
zWe should never even get here)r7   r#   _DEFINITION_SCOPESNotImplementedErrorrn   s   &r   rH   rH      s7     
;;11K{{
=
>>r    c                l   V P                   pVR9   pV\        9   g
   V'       Ed   V P                  p\        V4       F4  w  rgVP                  V8  g   K  TpVP                   R8X  d
   V^,          p M	  \        \        \        V4      4      4       F[  w  rgVP                  V8  g   K  Tp	VP                   R8X  d
   V	^,          p	WVR  F  p
\        V
4      '       d   V	^,          p	K   M	   M	  VXX	^,            pV'       g-   \        V^ ,          W4      VR&   \        VR,          W4      VRR% V# V .# )zr
This function makes it so for `1 * 2 + 3` you can extract `2 + 3`, even
though it is not part of the expression.
r/   N:r   rF   Nsuite
file_inputrG   )
r#   r   r<   ra   r8   reversedlistr5   r6   r:   )r@   r   r   typis_suite_partr   r^   r_   start_index	end_indexn2s   &&&        r   r:   r:      s'   
 

C22M
--$$e$DAyy366Z'1$K % T)E"234DA{{Y&	66Z'NI  )B1"55!Q		 $
  5 k)a-0:58STE#J:59cUE"#J=r    c                 |    V P                   R 8H  ;'       g'    V P                   R8H  ;'       d    V P                  R9  # )r/   keyword)NoneTrueFalse)r#   rM   rn   s   &r   r6   r6      s>    99
" R R99	!QQdjj8Q&QRr    c           	         \        VP                  WE4      p\        V4      '       g   Q h\        V4      w  rxVP	                  V^ ,          4      p	V	P                  4       p
\        \        W)V4      4      w  rV	P                  4       '       d   RpM&\        V	P                  V
4      pVP                  4       pV'       d   R\        V4      ,           R,           pRpRpM\        VR,          4      pV'       gV   V'       dL   \        \        V	V^ ,          P                  VR,          P                  V4      4      ;'       g    VR,          .M. p\!        Wd4      w  ppVR,          P#                  4       p\%        VV^ ,          4      w  ppVV,          p\'        V4      pV'       g)   RP)                  V4      pVRV,           R,           ,          p\+        V'       d   VRR MT4       RpRpV
'       d   \-        V	P                  4      '       g]   V	P/                  4       P1                  4       p\        V4      '       d.   V^ ,          P2                  pV Uu. uF  pVV8w  g   K  VNK  	  pp\5        V	P                  4      '       d   RpM	VR,          pV: RV: R	RP)                  Vf   TM	V.V,           4      : R
\7        V4      : 2pVf   RMVR,           V,           : R	RP)                  V4      : R2pV'       d   TpM0V'       d   RV,           R,           pMXR,           V,           R,           p\9        VVVVVV4      pV'       g   XXP:                  ,           VV&   VV/p\=        V V4      # u upi )r   Nzreturn rD   Fz, r)   z@classmethod
zdef (z):
.)r   rG   )r   	tree_noder;   r   create_contextis_bound_methodrw   _find_inputs_and_outputs	is_module_get_code_insertion_noderI   r   _is_node_ending_return_stmt_find_needed_output_variablesr7   r8   rh   r4   re   r   rK   _check_for_non_extractablesr   	get_valueget_param_namesstring_namer
   r	   r   rM   r   )r   r   module_contextr   r   r   r   r   _contextr   paramsreturn_variablesrP   r&   
code_blockrQ   has_ending_return_stmt
after_leaffirstsecondoutput_var_str	decorator
self_paramfunction_param_namesrW   function_codefunction_callreplacementrV   r   s   &&&&&&                         r   extract_functionr      s   00#AEu:::07M++E!H5G--/O#$<^V[$\]F !'(9(9?K!002!<U!CCdJ
!&!<U2Y!G% -=  $$Aab	!! 	%    )  )
 $B'("  (>e'I$*2Y,,.
(Yq\Bve
J'
%!YY'78N)n4t;;J  .Dcr
%PIJ'(9(9::#*#4#4#6#F#F#H '((1!4@@
%+?VqJ!!V?"7#4#455(Id
 			J.&ZL64IJZ 	M !zC'74??		&M #!#m3d:K(50=@4GKuk=#13CEO&,z/?/?&?
# /2(<==? @s   	M(M(c                     V  F  p VP                   p\        V4       K  	  R#   \         d=    TP                  R 8X  d   \	        R4      hTP                  R8X  d   \	        R4      h Kg  i ; i)returnz:Can only extract return statements if they are at the end.yieldz Cannot extract yield statements.N)r<   r   AttributeErrorrM   r   )r   r_   r<   s   &  r   r   r   (  sr    		2zzH (1   	Kww("&PR Rww'!&'IJJ "		Ks   $AA+*A+c                    V F{  pVP                   R 8X  g#   VP                  P                  4       '       d   K6  VP                  4       V Jd    R# VP                  e    W$P                  u;8:  d   V8  d   Ku    R#   R# 	  R# )paramTF)api_typeparent_contextr   get_root_contextr5   )r   namesr   lastr   s   &&&& r   _is_name_inputr   6  si    ==G#4+>+>+H+H+J+J$$&n<~~%e~~.L.L /M  r    c                    V^ ,          P                   pVR,          P                  p. p. p\        V4       F  pVP                  4       '       d&   Wv9  d   VP	                  VP
                  4       K<  K>  VP
                  V9  g   KQ  VP                  WwP                   4      pV'       d   \        WW44      '       g   K  VP	                  VP
                  4       K  	  WV3# )r   rG   )r5   r8   _find_non_global_namesr$   appendrM   gotor   )	r   r   r   r   r   inputsoutputsr   name_definitionss	   &&&      r   r   r   @  s    !HE9DFG&u-"tzz* # zz'#*<<nn#E ').EXXMM$**- . ?r    c              #     "   V  FN  p VP                   pVP                  R 8X  d   VP                   ^ ,          R8X  d   K;  \        V4       Rj  xL
  KP  	  R#  L
  \         d    TP                  R8X  d   Tx   Ky   K|  i ; i5i)r0   r   Nr   )r<   r#   r   r   )r   r&   r<   s   &  r   r   r   U  sw     
	8}}H yyI%$--*:c*A-h777  8  	yyF"
 #	s3   BA9BAB B;BBBc                     V'       d   \        V 4      '       d*   V P                  P                  R 8w  d   V P                  p K)  V P                  P                  R9   d   V P                  p K)  V # )ru   )async_funcdef	decorated
async_stmt)r   r7   r#   )r&   r   s   &&r   r   r   d  sL    6t<<kk,.;;D
++

J
J{{Kr    c              #  >  "   VP                    F  pVP                  V8  d   K  \        V4      p\        V.4       FW  pVP	                  4       '       d   K  VP
                  V9   g   K.  VP                  VP
                  4       VP
                  x  KY  	  K  	  R# 5i)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<   r5   setr   r$   rM   remove)r   search_nodeat_least_posr   r&   r   s   &&&&  r   r   r   n  sz     
 $$>>L(/0*D62D%%''DJJ:J,J ''

3jj  3 %s   ABB*3Bc                 j    V P                   pVR 8X  d   \        V P                  ^ ,          4      # VR8H  # )simple_stmtr1   )r#   r   r<   )r&   ts   & r   r   r   ~  s2    		AM*4==+;<<r    rs   )NN)&textwrapr   parsor   jedir   jedi.api.exceptionsr   jedi.api.refactoringr   r   jedi.commonr	   jedi.parser_utilsr
   r   rp   splitr+   r   r   r   r   r   rh   re   rL   rH   r:   r6   r   r   r   r   r   r   r   r    r    r   <module>r      s       0 > $ O - )*+0573 

>	3lBST9?!HR
T>n2*8! r    