
    cX                     P   d dl Zd dlZd dl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mZ  G d dej                  Z G d dej                  Z G d dej                  Z G d	 d
ej                  Z G d dej                  Z G d de	j                  Z G d de	j                  Z G d de	j                  Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d d           ZdS )!    N)	argumentsast
exceptions
fscommandsnameanalyze
pynamesdef	pyobjectsutilsc                   |    e Zd Zd Zd Zd Zd Zd ZddZd Z	d	 Z
d
 Zd Zd Zd ZddZd Zed             ZdS )
PyFunctionc                    t           j        j        j                            |            t           j        j        j                            | |||           | j        j        | _        t          j
        | j        |                                                                           | _        t          j
        | j                  | _        d | _        d S N)ropebaser	   AbstractFunction__init__PyDefinedObjectast_nodeargsr   r   	_Inferred_infer_parameters
get_module_get_concluded_dataparameter_pyobjects_infer_returnedreturnedparameter_pynamesselfpycorer   parents       6lib/python3.11/site-packages/rope/base/pyobjectsdef.pyr   zPyFunction.__init__   s    	,55d;;;	+44T68VTTT+#-#7"DOO$5$5$I$I$K$K$
 $
  #,T-ABB!%    c                     i S r    r   s    r"   _create_structural_attributesz(PyFunction._create_structural_attributes       	r#   c                     i S r   r%   r&   s    r"   _create_concluded_attributesz'PyFunction._create_concluded_attributes!   r(   r#   c                 b    t           j        j                            | j        | t
                    S r   )r   r   pyscopesFunctionScoper    _FunctionVisitorr&   s    r"   _create_scopezPyFunction._create_scope$   s"    y!//TCSTTTr#   c                     t           j        j        j                            |           }|                     |           |S r   )r   r   oisoiinfer_parameter_objects_handle_special_argsr   r	   s     r"   r   zPyFunction._infer_parameters'   s6    IL$<<TBB	!!),,,r#   Nc                 V    t           j        j        j                            | |          S r   )r   r   r1   r2   infer_returned_objectr   r   s     r"   r   zPyFunction._infer_returned,   s    y|55dDAAAr#   c                 V   t          |          t          | j        j                  k    r|| j        j        r1 |j        t
          j        j                                                   | j        j	        r5 |j        t
          j        j        
                                           d S d S d S r   )lenr   r   varargappendr   r   builtinsget_listkwargget_dictr5   s     r"   r4   zPyFunction._handle_special_args/   s    y>>S!4555 	@~$ @ 	 !3!<!<!>!>???~# @ 	 !3!<!<!>!>?????		@ 	@@ @r#   c                 h    ||                      |           | j                            |           d S r   )r4   r   setr5   s     r"   _set_parameter_pyobjectsz#PyFunction._set_parameter_pyobjects6   s;     	1%%i000 $$Y/////r#   c                     | j         Hi }t          |                                           D ]\  }}t          j        | |          ||<   || _         | j         S r   )r   	enumerateget_param_namesr   ParameterName)r   resultindexnames       r"   get_parameterszPyFunction.get_parameters;   sd    ! 	,F()=)=)?)?@@ E Et)7eDDt%+D"%%r#   c                     |t          | j                                                  k     r| j                                        |         S d S r   )r:   r   get)r   rI   s     r"   get_parameterzPyFunction.get_parameterD   sJ    3t/3355666 	9+//11%88	9 	9r#   c                 6    | j                             |          S r   )r   rM   r8   s     r"   get_returned_objectzPyFunction.get_returned_objectH   s    }  &&&r#   c                 4    |                                  j        S r   get_astrJ   r&   s    r"   get_namezPyFunction.get_nameK       ||~~""r#   Tc                     d | j         j        D             }|r`| j         j        r$|                    | j         j        j                   | j         j        r$|                    | j         j        j                   |S )Nc                 P    g | ]#}t          |t          j                  |j        $S r%   )
isinstancer   arg).0nodes     r"   
<listcomp>z.PyFunction.get_param_names.<locals>.<listcomp>P   s+    XXXtjsw>W>WX$(XXXr#   )r   r   r;   r<   rY   r?   )r   special_argsrH   s      r"   rF   zPyFunction.get_param_namesN   su    XXt~':XXX 	8~$ 9dn37888~# 8dn26777r#   c                 Z   | j                                         }t          | j         t                    rw| j        D ]m}t
          j        j                            ||          }|t
          j        j	        j	        d         k    r dS |t
          j        j	        j	        d         k    r dS ndS dS )zzGet function type

        It returns one of 'function', 'method', 'staticmethod' or
        'classmethod' strs.

        staticmethodclassmethodmethodfunction)
r!   	get_scoperX   PyClass
decoratorsr   r   evaluate	eval_noder=   )r   scope	decoratorpynames       r"   get_kindzPyFunction.get_kindX   s     %%''dk7++ 	!_ ) )	+55eYGGTY/8HH *)>>TY/8GG )(==)8zr#   c                 h    	 | j         j        S # t          $ r t          | j         dd           cY S w xY w)Nre   )r   decorator_listAttributeErrorgetattrr&   s    r"   re   zPyFunction.decoratorsj   sG    	>=// 	> 	> 	>4=,=====	>s     11r   )T)__name__
__module____qualname__r   r'   r*   r/   r   r   r4   rC   rK   rN   rP   rT   rF   rk   propertyre   r%   r#   r"   r   r      s       & & &    U U U  
B B B B@ @ @0 0 0
& & &9 9 9' ' '# # #     $ > > X> > >r#   r   c                        e Zd Zd Zd Zd ZdS )PyComprehensionc                     t           | _        t          j        j        j                            | d           t          j        j        j                            | |||           d S )NComp)type_)_ComprehensionVisitorvisitor_classr   r   r	   PyObjectr   r   r   s       r"   r   zPyComprehension.__init__s   sS    2	$--d&-AAA	+44T68VTTTTTr#   c                 b    t           j        j                            | j        | t
                    S r   )r   r   r,   ComprehensionScoper    ry   r&   s    r"   r/   zPyComprehension._create_scopex   s)    y!44K4
 
 	
r#   c                     dS )NComprehensionr%   r&   s    r"   rk   zPyComprehension.get_kind}   s    r#   N)rp   rq   rr   r   r/   rk   r%   r#   r"   ru   ru   r   sD        U U U

 
 

    r#   ru   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )rd   c                 ,   t           | _        t          j        j        j                            |            t          j        j        j                            | |||           || _        | 	                                
                                | _        d S r   )_ClassVisitorrz   r   r   r	   AbstractClassr   r   r!   r   r   _superclassesr   s       r"   r   zPyClass.__init__   ss    *	)224888	+44T68VTTT!__..BBDDr#   c                     | j                                         ,| j                             |                                            | j                                         S r   )r   rM   rB   
_get_basesr&   s    r"   get_superclasseszPyClass.get_superclasses   sO    !!## 	6""4??#4#4555!%%'''r#   c                 4    |                                  j        S r   rR   r&   s    r"   rT   zPyClass.get_name   rU   r#   c                     i }t          |                                           D ])}|                    |                                           *|S r   )reversedr   updateget_attributes)r   rH   r   s      r"   r*   z$PyClass._create_concluded_attributes   sP    T224455 	1 	1DMM$--//0000r#   c                    g }| j         j        D ]}t          j        j                            | j                                        |          }|s|                                	                                t          j        j
                            d          k    r'|                    |                                           |S )NType)r   basesr   r   rf   rg   r!   rc   
get_objectget_typer	   get_base_typer<   )r   rH   	base_namer   s       r"   r   zPyClass._get_bases   s    , 	1 	1I9%//0E0E0G0GSSD1OO%%..009&44V<<=1
 doo//000r#   c                 V    t           j        j                            | j        |           S r   )r   r   r,   
ClassScoper    r&   s    r"   r/   zPyClass._create_scope   s    y!,,T[$???r#   N)	rp   rq   rr   r   r   rT   r*   r   r/   r%   r#   r"   rd   rd      sv        E E E( ( (
# # #  
 
 
@ @ @ @ @r#   rd   c                        e Zd Zd fd	Zd Z ej        d           d             Zd Ze	ej
        d                         Ze	ej
        d	                         Zd
 Z xZS )PyModuleNFc                    |j         j                            dd          }|p| }d| _        	 |                     |||          \  }}n5# t
          j        $ r# d| _        |r d}t          j        d          }Y nw xY w|| _	        g | _
        t          | _        t          j        | j	                  | _        t!                                          |||           d S )Nignore_syntax_errorsFT
)projectprefsrM   
has_errors_init_sourcer   ModuleSyntaxErrorr   parsesource_codestar_imports_GlobalVisitorrz   r   read_str_codingcodingsuperr   )	r   r    sourceresourceforce_errorsignoresyntax_errorsr[   	__class__s	           r"   r   zPyModule.__init__   s    %))*@%HH$2F
	',,VVXFFLFDD+ 	' 	' 	'"DO 'y	' "+ 01ABBx00000s   A
 
/A<;A<c                    d}|r|j         }	 |,|                                }t          j        |          \  }}n,t	          |t
                    rt          j        |          }n|}t          j        ||          }n]# t          $ r%}t          j        ||j        |j                  d }~wt          $ r#}t          j        |dd|j        z            d }~ww xY w||fS )Nstring)filename   z%s)path
read_bytesr   file_data_to_unicoderX   strunicode_to_file_datar   r   SyntaxErrorr   r   linenomsgUnicodeDecodeErrorreason)	r   r    r   r   r   source_bytes_r   es	            r"   r   zPyModule._init_source   s    	%}H	O /'2244!+!@!N!NQQk3// /#-#B;#O#OLL#.LyAAAHH 	J 	J 	J.x15III! 	O 	O 	O.xDAH<MNNN	OH$$s$   A0A> >
C B((C5CCc                      i S r   r%   r%   r#   r"   <lambda>zPyModule.<lambda>   s    R r#   c                 l    i }| j         D ])}|                    |                                           *|S r   )r   r   	get_names)r   rH   star_imports      r"   r*   z%PyModule._create_concluded_attributes   s?    , 	3 	3KMM+//112222r#   c                 V    t           j        j                            | j        |           S r   )r   r   r,   GlobalScoper    r&   s    r"   r/   zPyModule._create_scope   s    y!--dk4@@@r#   c                 T    t           j        j                            | j                  S )zA `SourceLinesAdapter`)r   r   codeanalyzeSourceLinesAdapterr   r&   s    r"   lineszPyModule.lines   s      y$778HIIIr#   c                 T    t           j        j                            | j                  S )zA `LogicalLinesFinder`)r   r   r   CachingLogicalLineFinderr   r&   s    r"   logical_lineszPyModule.logical_lines   s     y$==djIIIr#   c                 f    | j         r)t          j        j                            | j                   ndS N r   r   r   libutilsmodnamer&   s    r"   rT   zPyModule.get_name   )    <@MQty!))$-888rQr#   )NNF)rp   rq   rr   r   r   r
   prevent_recursionr*   r/   rs   saveitr   r   rT   __classcell__r   s   @r"   r   r      s        1 1 1 1 1 1&% % %( UZZ((  )(A A A 
\J J \ XJ 
\J J \ XJR R R R R R Rr#   r   c                   J     e Zd Zd fd	Zd Zd Zd Zd Zd Zd	 Z	d
 Z
 xZS )	PyPackageNFc                    || _         |                                 }|/|j                            ||                                          }nt          j        d          }t                                          |||           d S )N)r   r   )	r   _get_init_dot_pyr   get_pymodulerS   r   r   r   r   )r   r    r   r   init_dot_pyr   r   s         r"   r   zPyPackage.__init__   s     ++-- 	'~22, 3  gii H yH844444r#   c                    i }t           j        j                            | j                  }| j                            |          }|                                D ],\  }}t           j        j        	                    |          ||<   -| j        |S | 
                                                                D ]\  }}t          j        | |          ||<   |S )N)r   )r   r   r   r   r   r    _builtin_submodulesitemsr=   BuiltinName_get_child_resourcesr   ImportedModule)r   rH   r   extension_submodulesrJ   moduler   s          r"   r'   z'PyPackage._create_structural_attributes   s    )$,,T];;#{>>wGG06688 	B 	BLD&9-99&AAF4LL= 	M"7799??AA 	N 	NND(%4THMMMF4LLr#   c                     i }|                                  }|rF| j        j                            |          }|                    |                                           |S r   )r   r    r   r   r   r   )r   rH   r   init_objects       r"   r*   z&PyPackage._create_concluded_attributes  s[    ++-- 	8+-::;GGKMM+4466777r#   c                     i }| j                                         D ]Z}|                                r|||j        <   !|j                            d          r|j        dk    r|j        d d         }|||<   [|S )Nz.py__init__.py)r   get_children	is_folderrJ   endswith)r   rH   childrJ   s       r"   r   zPyPackage._get_child_resources	  s    ]//11 	% 	%E   %%*uz""$$U++ %
m0K %z#2#$tr#   c                 |    | j         4| j                             d          r| j                             d          S d S )Nr   )r   	has_child	get_childr&   s    r"   r   zPyPackage._get_init_dot_py  s>    = 	)@)@)O)O 	=**=9994r#   c                 N    |                                                                  S r   )r   rc   r&   s    r"   r/   zPyPackage._create_scope  s      **,,,r#   c                 p    |                                  }|r| j        j                            |          S | S r   )r   r    r   r   )r   r   s     r"   r   zPyPackage.get_module  s:    ++-- 	A;&33K@@@r#   c                 f    | j         r)t          j        j                            | j                   ndS r   r   r&   s    r"   rT   zPyPackage.get_name"  r   r#   NF)rp   rq   rr   r   r'   r*   r   r   r/   r   rT   r   r   s   @r"   r   r      s        	5 	5 	5 	5 	5 	5
 
 
      - - -  R R R R R R Rr#   r   c                   F    e Zd Zd Zd ZddZd Zd Zd Zd Z	d	 Z
d
 ZdS )_AnnAssignVisitorc                 0    || _         d | _        d | _        d S r   )scope_visitorassigned_ast	type_hintr   r   s     r"   r   z_AnnAssignVisitor.__init__'  s    * r#   c                 j    |j         | _        |j        | _        |                     |j                   d S r   )valuer   
annotationr   visittargetr   r[   s     r"   
_AnnAssignz_AnnAssignVisitor._AnnAssign,  s/     J

4;r#   Nc                 <    | j                             ||           d S r   r   	_assignedr   rJ   
assignments      r"   r  z_AnnAssignVisitor._assigned2  !    $$T:66666r#   c                 ~    t          j        | j        d| j                  }|                     |j        |           d S )NT)assign_typer   )r   AssignmentValuer   r   r  idr   r[   r  s      r"   _Namez_AnnAssignVisitor._Name5  sC    /44>
 
 

 	tw
+++++r#   c                     t          j        |          }|D ]>\  }}d }| j        t          j        | j        |          }|                     ||           ?d S r   r   get_name_levelsr   r   r  r  r   r[   namesrJ   levelsr  s         r"   _Tuplez_AnnAssignVisitor._Tuple;  l    +D11! 	- 	-LD&J  S'78I6RR
NN4,,,,		- 	-r#   c                     d S r   r%   r  s     r"   _Annotationz_AnnAssignVisitor._AnnotationC      r#   c                     d S r   r%   r  s     r"   
_Attributez_AnnAssignVisitor._AttributeF  r  r#   c                     d S r   r%   r  s     r"   
_Subscriptz_AnnAssignVisitor._SubscriptI  r  r#   c                     d S r   r%   r  s     r"   _Slicez_AnnAssignVisitor._SliceL  r  r#   r   )rp   rq   rr   r   r  r  r  r  r  r  r  r  r%   r#   r"   r   r   &  s          
     7 7 7 7, , ,- - -          r#   r   c                   :    e Zd Zd Zd	dZd Zd Zd Zd Zd Z	dS )
_ExpressionVisitorc                     || _         d S r   r   r   s     r"   r   z_ExpressionVisitor.__init__Q  s    *r#   Nc                 <    | j                             ||           d S r   r  r  s      r"   r  z_ExpressionVisitor._assignedT  r  r#   c                     t          | j        j        || j        j                  }| j        j                            |           d S r   )ru   r   r    owner_objectdefinedsr<   )r   r[   	list_comps      r"   _GeneratorExpz _ExpressionVisitor._GeneratorExpW  sF    #%tT-?-L
 
	 	#**955555r#   c                 0    |                      |           d S r   r)  r  s     r"   _SetCompz_ExpressionVisitor._SetComp]      4     r#   c                 0    |                      |           d S r   r+  r  s     r"   	_ListCompz_ExpressionVisitor._ListComp`  r-  r#   c                 0    |                      |           d S r   r+  r  s     r"   	_DictCompz_ExpressionVisitor._DictCompc  r-  r#   c                     t          |                               |j                   |                     |j                   d S r   )_AssignVisitorr   r   r   r  s     r"   
_NamedExprz_ExpressionVisitor._NamedExprf  s:    t""4;///

4:r#   r   )
rp   rq   rr   r   r  r)  r,  r/  r1  r4  r%   r#   r"   r!  r!  P  s        + + +7 7 7 76 6 6! ! !! ! !! ! !    r#   r!  c                   @    e Zd Zd Zd Zd
dZd Zd Zd Zd Z	d	 Z
dS )r3  c                 "    || _         d | _        d S r   )r   r   r   s     r"   r   z_AssignVisitor.__init__l  s    * r#   c                     |j         | _        |j        D ]}|                     |           t	          | j                                      |j                    d S r   )r   r   targetsr   r!  r   )r   r[   
child_nodes      r"   _Assignz_AssignVisitor._Assignp  sY     J, 	# 	#JJJz""""4-..44TZ@@@@@r#   Nc                 <    | j                             ||           d S r   r  r  s      r"   r  z_AssignVisitor._assignedv  r  r#   c                     d }| j         t          j        | j                   }|                     |j        |           d S r   )r   r   r  r  r  r  s      r"   r  z_AssignVisitor._Namey  sB    
 	G#3D4EFFJtw
+++++r#   c                     t          j        |          }|D ]>\  }}d }| j        t          j        | j        |          }|                     ||           ?d S r   r  r  s         r"   r  z_AssignVisitor._Tuple  r  r#   c                     d S r   r%   r  s     r"   r  z_AssignVisitor._Attribute  r  r#   c                     d S r   r%   r  s     r"   r  z_AssignVisitor._Subscript  r  r#   c                     d S r   r%   r  s     r"   r  z_AssignVisitor._Slice  r  r#   r   )rp   rq   rr   r   r:  r  r  r  r  r  r  r%   r#   r"   r3  r3  k  s        ! ! !A A A7 7 7 7, , ,- - -        r#   r3  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dZd Zd Zd Zd Zd Zd Zd Zd ZdS )_ScopeVisitorc                 v    t                               | |            || _        || _        i | _        g | _        d S )Nr#  )r!  r   r    r&  r  r'  )r   r    r&  s      r"   r   z_ScopeVisitor.__init__  s<    ##D#===(
r#   c                 F    | j         | j                                         S d S r   )r&  r   r&   s    r"   r   z_ScopeVisitor.get_module  s'     	$//1114r#   c                     t          | j        || j                  }t          j        |          | j        |j        <   | j                            |           d S r   )	rd   r    r&  r   DefinedNamer  rJ   r'  r<   )r   r[   pyclasss      r"   	_ClassDefz_ScopeVisitor._ClassDef  sM    $+tT->?? * 6w ? ?
49W%%%%%r#   c                    t          | j        || j                  }|j        D ]}t	          |t
          j                  r|j        dk    rt	          | t                    rt          j
        j                            |          }t          j        t          j
        j                            | j                            }||fd}t#          j        |                                 |          }t          j        ||                                 |          | j        |j        <    n#t          j        |          | j        |j        <   | j                            |           d S )Nrs   c                 R    |                      t          j        |g                    S r   )get_property_objectr   ObjectArguments)rx   rY   s     r"   _evalz)_ScopeVisitor._FunctionDef.<locals>._eval  s*    $88%5se<<    r#   )r   r   )r   r    r&  re   rX   r   Namer  r   r   r   r=   Propertyr   UnboundNamer	   r{   r
   guess_def_linenor   EvaluatedNamer  rJ   rF  r'  r<   )r   r[   
pyfunctionri   rx   rY   rM  r   s           r"   _FunctionDefz_ScopeVisitor._FunctionDef  sJ   T43DEE
#. 	G 	GI)SX.. 9<:3M dM22  I.77
CCE$0	+44T5FGG C %*s    
 #3DOO4E4EtLLF,6,Ddoo&7&7- - -DJty) E$.$::$F$FDJty!Z(((((r#   c                 ,    |                      |          S r   )rT  r  s     r"   _AsyncFunctionDefz_ScopeVisitor._AsyncFunctionDef  s      &&&r#   c                 J    t          |                               |           d S r   )r3  r   r  s     r"   r:  z_ScopeVisitor._Assign  s$    t""4(((((r#   c                 J    t          |                               |           d S r   )r   r   r  s     r"   r  z_ScopeVisitor._AnnAssign  s$    $%%d+++++r#   c                     d S r   r%   r  s     r"   
_AugAssignz_ScopeVisitor._AugAssign  r  r#   c                     |                      |j        |j        d           |j        |j        z   D ]}|                     |           d S )Nz.__iter__().next())_update_evaluatedr   iterbodyorelser   r   r[   r   s      r"   _Forz_ScopeVisitor._For  sV    t{DI7KLLLY, 	 	EJJu	 	r#   c                 ,    |                      |          S r   )ra  r  s     r"   	_AsyncForz_ScopeVisitor._AsyncFor  s    yyr#   c                    | j                             |d           }|'t          j        |                                           }t          |t          j                  r(||j                            |           || j         |<   d S d S )N)r   )r  rM   r   AssignedNamer   rX   assignmentsr<   )r   rJ   r  rj   s       r"   r  z_ScopeVisitor._assigned  s    d++ 	G,DOO4E4EFFFFfj566 	& 6"))*555%DJt	& 	&r#   r   FNc                 "   i }t          |t                    r.t          j        |g ||          }|                     ||           nIt          j        |          }|D ]2\  }	}
t          j        ||
||          }|                     |	|           3|S r   )rX   r   r   r  r  r   r  )r   r8  assigned
evaluation	eval_typer   rH   r  r  rJ   r  s              r"   r\  z_ScopeVisitor._update_evaluated  s     gs## 		1#3Hb*iXXJNN7J/////88E % 1 1f'7fj) 
 tZ0000r#   c                     |j         D ]*}|j        r!|                     |j        |j        d           +|j        D ]}|                     |           d S )Nz.__enter__())r   optional_varsr\  context_exprr^  r   )r   r[   itemr   s       r"   _Withz_ScopeVisitor._With  sv    J 	 	D! &&&(9>   Y 	 	EJJu	 	r#   c                 ,    |                      |          S r   )ro  r  s     r"   
_AsyncWithz_ScopeVisitor._AsyncWith  s    zz$r#   c                 8   t           }|j        lt          |j        |          rW|j        }t          |j        t          j                  r|j        r|j        d         }|                     |j        |d           |j        D ]}| 	                    |           d S )Nr   T)rj  )
r   rJ   rX   typer   Tupleeltsr\  r^  r   )r   r[   node_name_type	type_noder   s        r"   _excepthandlerz_ScopeVisitor._excepthandler  s    9 	IZ	>%J%J 	I	I$)SY// .IN .%N1-	""49i4"HHHY 	 	EJJu	 	r#   c                 0    |                      |           d S r   )rx  r  s     r"   _ExceptHandlerz_ScopeVisitor._ExceptHandler  s    D!!!!!r#   c                    |j         D ]}|j        }|j        }|                    d          d         }|Gt	          j        |                                 |          }|                     |          s
|| j         |<   tt	          j        |                                 |          }|                     |          s
|| j         |<   d S )N.r   )r  rJ   asnamesplitr   r   r   _is_ignored_import)r   r[   import_pairmodule_namealiasfirst_packageimporteds          r"   _Importz_ScopeVisitor._Import  s    : 	9 	9K%*K&E'--c2215M 9%4T__5F5FTT..x88 1(0DJu%%4T__5F5FVV..x88 908DJ}-	9 	9r#   c                    d}|j         r|j         }t          j        |                                 |j        pd|          }|                     |          rd S t          |j                  dk    r`|j        d         j        dk    rJt          | j
        t                    r.| j
        j                            t          |                     d S d S |j        D ]6}|j        }|j        }||}t          j        ||j                  | j        |<   7d S )Nr   r   r   *)levelr   r   r   r   r  r:   r  rJ   rX   r&  r   r   r<   
StarImportr}  ImportedName)r   r[   r  imported_moduleimported_namer  r  s          r"   _ImportFromz_ScopeVisitor._ImportFrom  s3   : 	JE$3OOK2
 

 ""?33 	Ftz??a 	DJqM$6#$= 	$+X66 S!.55j6Q6QRRRRRS S "&  (-%, %$H'1'>#]%7( (
8$$ r#   c                     | j         j        j                            dd          sdS t	          |                                t          j        j        j	                   S )Nignore_bad_importsF)
r    r   r   rM   rX   r   r   r   r	   AbstractModuler   r  s     r"   r  z _ScopeVisitor._is_ignored_import*  sX    {"(,,-A5II 	5&&(($)*=*L
 
 
 	
r#   c                     |                                  }|j        D ]F}|8	 ||         }n.# t          j        $ r t	          j        |j                  }Y nw xY w|| j        |<   Gd S r   )r   r  r   AttributeNotFoundErrorr   re  r   )r   r[   r   rJ   rj   s        r"   _Globalz_ScopeVisitor._Global1  s    ""J 	& 	&D BB#D\FF!8 B B B'4T[AAFFFB%DJt	& 	&s   *(AA)r   FN)rp   rq   rr   r   r   rH  rT  rV  r:  r  rZ  ra  rc  r  r\  ro  rq  rx  rz  r  r  r  r  r%   r#   r"   rB  rB    sL           & & &
) ) )2' ' ') ) ), , ,    
  & & & LP           	 	 	" " "9 9 9  0
 
 
& & & & &r#   rB  c                        e Zd Zd Zd Zd ZdS )ry   c                 n    |                      |j                   |                      |j                   d S r   )r   r   r]  r  s     r"   _comprehensionz$_ComprehensionVisitor._comprehension=  s0    

4;

49r#   c                     t          |j        t          j                  r$|                     |          | j        |j        <   d S d S r   )rX   ctxr   Store_get_pyobjectr  r  r  s     r"   r  z_ComprehensionVisitor._NameA  sD    dh	** 	;"&"4"4T":":DJtw	; 	;r#   c                 \    t          j        |j        |                                           S N)r   r   )r   re  r   r   r  s     r"   r  z#_ComprehensionVisitor._get_pyobjectE  s$    &dk$//BSBSTTTTr#   N)rp   rq   rr   r  r  r  r%   r#   r"   ry   ry   <  sF          ; ; ;U U U U Ur#   ry   c                        e Zd Z fdZ xZS )r   c                 L    t                                          ||           d S r   r   r   r   r    r&  r   s      r"   r   z_GlobalVisitor.__init__J  #    .....r#   )rp   rq   rr   r   r   r   s   @r"   r   r   I  s8        / / / / / / / / /r#   r   c                   $     e Zd Z fdZd Z xZS )r   c                 L    t                                          ||           d S r   r  r  s      r"   r   z_ClassVisitor.__init__O  r  r#   c                 `   t                               | |           t          |j        j                  dk    rq|j        j        d         }d }t	          |t
          j                  rt          | |j                  }|.t          j        |          D ]}|	                    |           d S d S d S )Nr   )
rB  rT  r:   r   rX   r   rY   _ClassInitVisitoriter_child_nodesr   )r   r[   firstnew_visitorr   s        r"   rT  z_ClassVisitor._FunctionDefR  s    ""4...ty~" 	-IN1%EK%)) A/ei@@ - 1$77 - -E%%e,,,,	- 	-
- -- -r#   )rp   rq   rr   r   rT  r   r   s   @r"   r   r   N  sG        / / / / /	- 	- 	- 	- 	- 	- 	-r#   r   c                   *     e Zd Z fdZd Zd Z xZS )r.   c                 h    t                                          ||           g | _        d| _        d S r   )r   r   returned_asts	generatorr  s      r"   r   z_FunctionVisitor.__init___  s0    ...r#   c                 V    |j         !| j                            |j                    d S d S r   )r   r  r<   r  s     r"   _Returnz_FunctionVisitor._Returnd  s5    : 	2%%dj11111	2 	2r#   c                 `    |j         | j                            |j                    d| _        d S )NT)r   r  r<   r  r  s     r"   _Yieldz_FunctionVisitor._Yieldh  s0    : 	2%%dj111r#   )rp   rq   rr   r   r  r  r   r   s   @r"   r.   r.   ^  sV            
2 2 2      r#   r.   c                   H     e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
 xZS )	r  c                 X    t                                          |           || _        d S r   )r   r   	self_name)r   r   r  r   s      r"   r   z_ClassInitVisitor.__init__o  s&    '''"r#   c                 @   t          |j        t          j                  sd S t          |j        t          j                  r|j        j        | j        k    r|j        | j	        j
        vrDt          j        |j        | j	                                                  | j	        j
        |j        <   | j        h| j	        j
        |j                 }t          |t          j                  r9|j                            t          j        | j                             d S d S d S d S d S r  )rX   r  r   r  r   rN  r  r  attrr   r  r   re  r   r   r   rf  r<   r  )r   r[   rj   s      r"   r  z_ClassInitVisitor._Attributes  s&   $(CI.. 	Fdj#(++ 
	
0O 
	y 2 88 6@6M;t/A/L/L/N/N7 7 7"(3   +1$)<fj&=>> &--"243DEE    
	 
	 
	 
	
  r#   c                     t          |j        t          j                  sd S t          j        |          D ]}|                     |           d S r   )rX   r  r   r  r  r   r`  s      r"   r  z_ClassInitVisitor._Tuple  sV    $(CI.. 	F)$// 	 	EJJu	 	r#   c                     d S r   r%   r  s     r"   r  z_ClassInitVisitor._Name  r  r#   c                     d S r   r%   r  s     r"   rT  z_ClassInitVisitor._FunctionDef  r  r#   c                     d S r   r%   r  s     r"   rH  z_ClassInitVisitor._ClassDef  r  r#   c                     d S r   r%   r  s     r"   ra  z_ClassInitVisitor._For  r  r#   c                     d S r   r%   r  s     r"   ro  z_ClassInitVisitor._With  r  r#   )rp   rq   rr   r   r  r  r  rT  rH  ra  ro  r   r   s   @r"   r  r  n  s        # # # # #                  r#   r  c                       e Zd Zd Zd ZdS )r  c                     || _         d S r   )r  r  s     r"   r   zStarImport.__init__  s    .r#   c                     i }| j                                         }|D ]4}|                    d          st          j        | j         |          ||<   5|S )Nr   )r  r   
startswithr   r  )r   rH   r  rJ   s       r"   r   zStarImport.get_names  s`    '2244 	S 	SD??3'' S)6t7KTRRtr#   N)rp   rq   rr   r   r   r%   r#   r"   r  r    s2        / / /    r#   r  ) rope.base.builtinsr   rope.base.codeanalyzerope.base.evaluaterope.base.libutilsrope.base.oi.soirope.base.pyscopes	rope.baser   r   r   r   r   r   r	   r
   r   ru   rd   r   r   RopeNodeVisitorr   r!  r3  rB  ry   r   r   r.   r  r  r%   r#   r"   <module>r     s                          	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	\> \> \> \> \>% \> \> \>~    i/   #@ #@ #@ #@ #@i #@ #@ #@L?R ?R ?R ?R ?Ry! ?R ?R ?RD:R :R :R :R :R	# :R :R :Rz' ' ' ' '+ ' ' 'T    ,   6# # # # #S( # # #Lh& h& h& h& h&& h& h& h&V
U 
U 
U 
U 
UM 
U 
U 
U/ / / / /] / / /
- - - - -M - - -     }    ' ' ' ' ' ' ' 'T
 
 
 
 
 
 
 
 
 
r#   