
    c5                         d dl mZ d dlmZmZ d dlZd dlZd dlZd dl	m
Z
mZmZmZmZmZmZ ej        Zd Zd Zd Zd Zd	 Zd
 Z G d d          Z G d dej                  Zd ZdS )    )
itemgetter)OptionalTupleN)	argumentsast
exceptionsnameanalyze	pyobjectspyobjectsdefworderc                 .    t          | |          d         S )zFind the pyname at the offset   )eval_location2)pymoduleoffsets     2lib/python3.11/site-packages/rope/base/evaluate.pyeval_locationr      s    (F++A..    c                 J    t          |           }|                    |          S )z%Find the primary and pyname at offset)ScopeNameFinderget_primary_and_pyname_at)r   r   pyname_finders      r   r   r      s#    #H--M226:::r   c                 .    t          | |          d         S )zlEvaluate a `ast.AST` node and return a PyName

    Return `None` if the expression cannot be evaluated.
    r   )
eval_node2)scopenodes     r   	eval_noder      s    
 eT""1%%r   c                 f    t          |           }|                    |           |j        |j        fS N)StatementEvaluatorvisit
old_resultresult)r   r   	evaluators      r   r   r   '   s2    "5))IOOD!111r   c                 .    t          | |          d         S Nr   )	eval_str2)holding_scopenames     r   eval_strr*   -   s    ]D))!,,r   c                     	 t          j        d|z            }n# t          $ r t          d          w xY wt	          | |          S )Nz(%s)z,Not a resolvable python identifier selected.)r   parseSyntaxErrorBadIdentifierErrorr   )r(   r)   r   s      r   r'   r'   1   s[    Qy$'' Q Q Q !OPPPQmT***s    4c                       e Zd Zd Zd Zd Zd Zdedee	e
j        j        j                 e	e
j        j        j                 f         fdZd Zd	 Zd
S )r   c                     |                                 | _        |j        | _        t          j        |j        d          | _        d S )NT)	get_scopemodule_scopelinesr   Wordersource_code)selfr   s     r   __init__zScopeNameFinder.__init__;   s9    $..00^
mH$8$??r   c                 N   ||                                 k    r@|j        9|j                                        dk    r| j                            |          rdS ||                                 k    r4|                                dk    r| j                            |          rdS dS )NClassTF)	get_startparentget_kindr   %is_a_class_or_function_name_in_headeris_name_assigned_in_class_body)r6   r(   r   linenos       r   _is_defined_in_class_bodyz)ScopeNameFinder._is_defined_in_class_body@   s    m--///	$	 $--//7:	 AA&II		 4m--///	&&((G3	 ::6BB	
 4ur   c                     |                                 |cxk    o|                                k    nc o1|                                dk    o| j                            |          S )NFunction)r:   get_body_startr<   r   r=   )r6   r   r   r?   s       r   $_is_function_name_in_function_headerz4ScopeNameFinder._is_function_name_in_function_headerP   sm    OOAAAA5+?+?+A+AAAAA J  J.JAA&II	
r   c                 8    |                      |          d         S r&   )r   )r6   r   s     r   get_pyname_atzScopeNameFinder.get_pyname_atW   s    --f55a88r   r   returnc                 b   | j                             |          }| j                            |          }| j                            |          r| j                            |          }|                     |          }t          |t          j
                  r,|                                                    |d           }d |fS t          |t          j                  r't          j        j                                        }d |fS |                     |||          r}|}||                                k    r|j        }| j                            |                                          }	 d |j        |         fS # t          j        j        j        $ r Y dS w xY w|                     |||          r;| j                            |                                          }d |j        |         fS | j                            |          s| j                            |          r3| j                            |          }	|                     |	          }
d |
fS | j                            |          r| j                             |          }n| j                            |          }tC          ||          S )NNN)"r3   get_line_numberr2   get_inner_scope_for_offsetr   is_function_keyword_parameterget_word_atget_enclosing_function
isinstancer   
PyFunctionget_parametersgetr
   AbstractFunctionropebasepynamesParameterNamer@   r:   r;   get_primary_atstrippyobjectr   AttributeNotFoundErrorrD   is_from_statement_module"is_import_statement_aliased_module_find_moduleis_from_aliasedget_from_aliasedr'   )r6   r   r?   r(   keyword_namerZ   parameter_nameclass_scoper)   modulemodule_pynames              r   r   z)ScopeNameFinder.get_primary_and_pyname_atZ   s    ++F33)DDVLL;44V<< 	.;226::L226::H(L$;<< .!)!8!8!:!:!>!>|T!R!Rn--Hi&@AA .!%!2!@!@!B!Bn--))-HH 	$'K00222 3+2;--f55;;==D$k248999'> $ $ $#||$ 44]FFSS 	6;--f55;;==D-.t455;//
 
 	)[;;FCC	) [//77F --f55M-((;&&v.. 	6;//77DD;--f55D---s   *E9 9FFc                    | j                             |          }	 |                     |dz
            }n# t          $ r d }Y nw xY w||                                }t          |t          j                  r|S t          |t          j                  rd|v r|d                                         S d|v r|d                                         S d S )Nr   r7   __call__)	r   find_parens_start_from_insiderF   r.   
get_objectrO   r
   rS   AbstractClass)r6   r   function_parensfunction_pynamerZ   s        r   rN   z&ScopeNameFinder.get_enclosing_function   s    +CCFKK	#"0011DEEOO! 	# 	# 	#"OOO	# 		9&1133H(I$>?? 98Y%<==9BLPXBX9  
+66888x' 9
+66888ts   5 AAc                     d}||         dk    r|dz  }||         dk    t           j        j                            | j        j        ||d          |          S )Nr   .r   )rT   rU   rV   ImportedModuler2   rZ   )r6   module_namedotss      r   r^   zScopeNameFinder._find_module   si    $3& 	AID $3& 	y //&DEE(:D
 
 	
r   N)__name__
__module____qualname__r7   r@   rD   rF   intr   r   rT   rU   rV   PyNamer   rN   r^    r   r   r   r   :   s        @ @ @
   
 
 
9 9 9).). 
x	)018DI<M<T3UU	V). ). ). ).V  $
 
 
 
 
r   r   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZddZd ZdS )r    c                 0    || _         d | _        d | _        d S r   )r   r#   r"   )r6   r   s     r   r7   zStatementEvaluator.__init__   s    
r   c                 N    | j                             |j                  | _        d S r   )r   lookupidr#   r6   r   s     r   _NamezStatementEvaluator._Name   s    j''00r   c                    t          | j        |j                  }|#t          j        j                                        }|| _        |                                t          j        j	        
                                k    rD	 |                                |j                 | _        d S # t          j        $ r d | _        Y d S w xY wd S r   )r   r   valuerT   rU   rV   UnboundNamer"   ri   r
   get_unknownattrr#   r   r[   )r6   r   pynames      r   
_AttributezStatementEvaluator._Attribute   s    4:tz22 	5Y&2244F $)"5"A"A"C"CC 	##$//11$)<4 # # #"#	# 	#s   $B' 'C Cc                                           j                  \  }|d S  fd}t          |t          j        j        j                  rd }d|v r%|d                                         } ||          }|'|t          j        j                                        k    r$t          j        j        	                    |          }t          j        j
                            |           _        d S d }t          |t          j        j        j                  r|}nd|v r|d                                         }|5t          j        j
                             ||                     _        d S d S )Nc                 f    t          j        | j                  }|                     |          S r   )r   create_argumentsr   get_returned_object)rZ   argsr   primaryr6   s     r   _get_returnedz/StatementEvaluator._Call.<locals>._get_returned   s/    -gxtzRRD//555r   __new__rZ   rg   ) _get_primary_and_object_for_nodefuncrO   rT   rU   r
   rj   ri   r   PyObjectrV   r   r#   rS   )r6   r   rZ   r   r#   new_function
pyfunctionr   s   ``     @r   _CallzStatementEvaluator._Call   s    AA$)LL 	F	6 	6 	6 	6 	6 	6 	6 h	 3 ABB 	FH$ 5'	2==??&|44 @49+>+J+J+L+L!L @,55h??)+777HHDKF
h	 3 DEE 	;!JJ8# 	;!*-88::J 	)+77&z22 8  DKKK	 	r   c                     t           j        j                            t           j        j                                                  | _        d S Nr   )rT   rU   rV   r   builtinsget_strr#   r}   s     r   _StrzStatementEvaluator._Str   s;    i'33Y'//11 4 
 
r   c                 l    t          |j                  j        }|                     |          | _        d S r   )typenrr   _get_builtin_namer#   r6   r   	type_names      r   _NumzStatementEvaluator._Num   s+    LL)	,,Y77r   c                     t          |j                  j        }	 |                     |          | _        d S # t
          j        $ r Y d S w xY wr   )r   r   rr   r   r#   r   r[   r   s      r   	_ConstantzStatementEvaluator._Constant   sU    LL)		00;;DKKK0 	 	 	DD	s   7 A
	A
c                     t           j        j        j        |                                         }t           j        j                            t           j        j                            |                    S r   )rT   rU   r   ri   rV   r   r
   r   )r6   r   pytypes      r   r   z$StatementEvaluator._get_builtin_name   sL    #,Y7BBDDy ,,TY-@-I-I&-Q-QRRRr   c                     t           j        j                            |                     |j                            | _        d S r   )rT   rU   rV   r   _get_object_for_nodeleftr#   r}   s     r   _BinOpzStatementEvaluator._BinOp   s5    i'33%%di00
 
r   c                     |                      |j        d                   }| |                      |j        d                   }t          j        j                            |          | _        d S )Nr   r   )r   valuesrT   rU   rV   r   r#   r6   r   rZ   s      r   _BoolOpzStatementEvaluator._BoolOp   s[    ,,T[^<< 	A00Q@@Hi'33H==r   c                 :    |                      d          | _        d S )Nstrr   r#   r}   s     r   _ReprzStatementEvaluator._Repr   s    ,,U33r   c                     t           j        j                            |                     |j                            | _        d S r   )rT   rU   rV   r   r   operandr#   r}   s     r   _UnaryOpzStatementEvaluator._UnaryOp   s5    i'33%%dl33
 
r   c                 :    |                      d          | _        d S )Nboolr   r}   s     r   _ComparezStatementEvaluator._Compare   s    ,,V44r   c                    d }d }|j         r|j         d         rt          t          t          t	          d          t          |j         |j                                      d          \  }}|r|                     |          }|r|                     |          }t          j	        j
                            t          j	        j                            ||                    | _        d S )Nr   rI   r   )keysnextiterfilterr   zipr   r   rT   rU   rV   r   r   get_dictr#   )r6   r   r   r   s       r   _DictzStatementEvaluator._Dict   s    9 	;1 	;VJqMM3ty$++F+FGGHH, LD&  70066 ;226::i'33Y'00v>> 4 
 
r   c                     d }|j         r |                     |j         d                   }t          j        j                            t          j        j                            |                    | _        d S )Nr   r   )	eltsr   rT   rU   rV   r   r   get_listr#   )r6   r   holdings      r   _ListzStatementEvaluator._List  se    9 	>//	!==Gi'33Y'0099 4 
 
r   c                     |                      |          }t          j        j                            t          j        j                            |                    | _        d S r   )_what_does_comprehension_holdrT   rU   rV   r   r   r   r#   r   s      r   	_ListCompzStatementEvaluator._ListComp  sP    55d;;i'33Y'00:: 4 
 
r   c                     |                      |          }t          j        j                            t          j        j                            |                    | _        d S r   )r   rT   rU   rV   r   r   get_iteratorr#   r   s      r   _GeneratorExpz StatementEvaluator._GeneratorExp  sP    55d;;i'33Y'44X>> 4 
 
r   c                     |                      |          }t          ||j                  }||                                nd S r   )_make_comprehension_scoper   eltri   )r6   r   r   r   s       r   r   z0StatementEvaluator._what_does_comprehension_hold  sB    ..t445$(++&,Bv  """dBr   c                    | j         }|j                                        }i }|j        D ]9}t	          |j        |j        |d|j                  }|                    |           :t          j
        j                            |j        ||          S )Nz.__iter__().next())r   rZ   
get_module
generators_get_evaluated_namestargetr   r?   updaterT   rU   pyscopesTemporaryScopepycore)r6   r   r   rd   namescomp	new_namess          r   r   z,StatementEvaluator._make_comprehension_scope$  s    
**,,O 	$ 	$D,TY0Ddk I LL####y!00ueLLLr   c                    g }t          |j                  dk     r5|j        D ],}|                     |          }|                    |           -n3|                    |                     |j        d                              t          j        j                            t	          j        j        j	        |           | _
        d S )N   r   r   )lenr   r   appendrT   rU   rV   r   r   	get_tupler#   )r6   r   objectsstmtrZ   s        r   _TuplezStatementEvaluator._Tuple/  s    ty>>A 	D	 ) )44T::x(((() NN444TYq\BBCCCi'33Y'17; 4 
 
r   c                 `    t          | j        |          }d }||                                }|S r   )r   r   ri   )r6   r   r   rZ   s       r   r   z'StatementEvaluator._get_object_for_node;  s6    4:t,, 	+((**Hr   c                 j    t          | j        |          \  }}d }||                                }||fS r   )r   r   ri   )r6   r   r   r   rZ   s        r   r   z3StatementEvaluator._get_primary_and_object_for_nodeB  s@    $TZ66 	+((**H  r   c                    t          |j        t          j                  r)|                     |j        d|j        j        g           d S t          |j        t          j                  r$|                     |j        d|j        g           d S t          |j        t          j                  r$|                     |j        d|j        g           d S d S )N__getitem__)rO   slicer   Index_call_functionr   Sliceexprr}   s     r   
_SubscriptzStatementEvaluator._SubscriptI  s    dj#),, 	I
MDJ<L;MNNNNN
CI.. 	I
MDJ<HHHHH
CH-- 	I
MDJ<HHHHH	I 	Ir   c                 :    |                      d          | _        d S )Nr   r   r}   s     r   _SlicezStatementEvaluator._SliceQ  s    ,,W55r   Nc                    t          | j        |          }||                                }nd S ||v r||                                         }|rt          |t          j                  sd S |g}|r||z  }t          j        || j                  }t          j	        j
                            |                    |                    | _        d S d S r   )r   r   ri   rO   r
   rS   r   	ArgumentsrT   rU   rV   r   r   r#   )	r6   r   function_name
other_argsr   rZ   calledr   
arguments_s	            r   r   z!StatementEvaluator._call_functionT  s    4:t,, 	((**HHFH$ 
	m,7799F FI4N!O!O 6D #
"",T4:>>J)+7733J?? 8  DKKK
	 
	r   c                     t           j        j                            t           j        j                            || j                            | _        d S r   )rT   rU   rV   r   r   Lambdar   r#   r}   s     r   _LambdazStatementEvaluator._Lambdaf  sA    i'33Y'..tTZ@@ 4 
 
r   r   )rr   rs   rt   r7   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rw   r   r   r    r       s         
1 1 1	# 	# 	#  :
 
 

8 8 8  S S S
 
 

> > >4 4 4
 
 

5 5 5
 
 

 
 

 
 

 
 
C C C
	M 	M 	M

 

 

  ! ! !I I I6 6 6   $
 
 
 
 
r   r    c                    i }t          j        |           D ]o\  }}t          j        j                            |||          }t          j        j                            ||          }	|	j        	                    |           |	||<   p|S r   )
r	   get_name_levelsrT   rU   rV   AssignmentValue
pynamesdefAssignedNameassignmentsr   )
targetsassignedrd   
evaluationr?   r#   r)   levels
assignmentr   s
             r   r   r   l  s    F#3G<<  fY&66xTT
%2266BB!!*---tMr   )operatorr   typingr   r   rope.base.builtinsrT   rope.base.pynamesrope.base.pyobjects	rope.baser   r   r   r	   r
   r   r   r.   r   r   r   r   r*   r'   r   RopeNodeVisitorr    r   rw   r   r   <module>r     s         " " " " " " " "                               2 / / /
; ; ;& & &2 2 2- - -+ + +c
 c
 c
 c
 c
 c
 c
 c
LI
 I
 I
 I
 I
, I
 I
 I
X    r   