
    ÆeX                     D   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y)!    N)	argumentsast
exceptions
fscommandsnameanalyze
pynamesdef	pyobjectsutilsc                   t    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y)
PyFunctionc                    t         j                  j                  j                  j	                  |        t         j                  j                  j
                  j	                  | |||       | j                  j                  | _        t        j                  | j                  | j                         j                               | _        t        j                  | j                        | _        d | _        y 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       8/usr/lib/python3/dist-packages/rope/base/pyobjectsdef.pyr   zPyFunction.__init__   s    		,,55d;		++44T68VT++#-#7#7""DOO$5$I$I$K$
  #,,T-A-A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                 t    t         j                  j                  j                  | j                  | t
              S r   )r   r   pyscopesFunctionScoper    _FunctionVisitorr&   s    r"   _create_scopezPyFunction._create_scope$   s&    yy!!//TCSTTr#   c                     t         j                  j                  j                  j	                  |       }| j                  |       |S r   )r   r   oisoiinfer_parameter_objects_handle_special_argsr   r	   s     r"   r   zPyFunction._infer_parameters'   s4    IILL$$<<TB	!!),r#   Nc                 j    t         j                  j                  j                  j	                  | |      S r   )r   r   r1   r2   infer_returned_objectr   r   s     r"   r   zPyFunction._infer_returned,   s#    yy||55dDAAr#   c                    t        |      t        | j                  j                        k(  r| j                  j                  r8 |j                  t
        j                  j                  j                                | j                  j                  r9 |j                  t
        j                  j                  j                                y y y r   )lenr   r   varargappendr   r   builtinsget_listkwargget_dictr5   s     r"   r4   zPyFunction._handle_special_args/   s    y>S!4!455~~$$ 	  !3!3!<!<!>?~~## 	  !3!3!<!<!>? $ 6r#   c                 `    || j                  |       | j                  j                  |       y r   )r4   r   setr5   s     r"   _set_parameter_pyobjectsz#PyFunction._set_parameter_pyobjects6   s*     %%i0  $$Y/r#   c                     | j                   Ci }t        | j                               D ]  \  }}t        j                  | |      ||<     || _         | j                   S r   )r   	enumerateget_param_namesr   ParameterName)r   resultindexnames       r"   get_parameterszPyFunction.get_parameters;   sb    !!)F()=)=)?@ Et)77eDtE &,D"%%%r#   c                     |t        | j                  j                               k  r| j                  j                         |   S y r   )r:   r   get)r   rI   s     r"   get_parameterzPyFunction.get_parameterD   s=    3t//33566++//1%88 7r#   c                 8    | j                   j                  |      S r   )r   rM   r8   s     r"   get_returned_objectzPyFunction.get_returned_objectH   s    }}  &&r#   c                 6    | j                         j                  S r   get_astrJ   r&   s    r"   get_namezPyFunction.get_nameK       ||~"""r#   c                    | j                   j                  D cg c])  }t        |t        j                        s|j                  + }}|r| j                   j
                  r/|j                  | j                   j
                  j                         | j                   j                  r/|j                  | j                   j                  j                         |S c c}w r   )r   r   
isinstancer   argr;   r<   r?   )r   special_argsnoderH   s       r"   rF   zPyFunction.get_param_namesN   s    '+~~':':Xtjsww>W$((XX~~$$dnn33778~~##dnn22667 Ys
   CCc                    | j                   j                         }t        | j                   t              r| j                  D ]  }t
        j                  j                  j                  ||      }|t
        j                  j                  j                  d   k(  r y|t
        j                  j                  j                  d   k(  s y yy)zzGet function type

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

        staticmethodclassmethodmethodfunction)
r!   	get_scoperW   PyClass
decoratorsr   r   evaluate	eval_noder=   )r   scope	decoratorpynames       r"   get_kindzPyFunction.get_kindX   s     %%'dkk7+!__ )	++55eYGTYY//88HH)TYY//88GG() r#   c                 |    	 | j                   j                  S # t        $ r t        | j                   dd       cY S w xY w)Nrb   )r   decorator_listAttributeErrorgetattrr&   s    r"   rb   zPyFunction.decoratorsj   s9    	>==/// 	>4==,==	>s     ;;r   )T)__name__
__module____qualname__r   r'   r*   r/   r   r   r4   rC   rK   rN   rP   rT   rF   rh   propertyrb   r%   r#   r"   r   r      s_    &U
B@0
&9'#$ > >r#   r   c                       e Zd Zd Zd Zd Zy)PyComprehensionc                     t         | _        t        j                  j                  j
                  j                  | d       t        j                  j                  j                  j                  | |||       y )NComp)type_)_ComprehensionVisitorvisitor_classr   r   r	   PyObjectr   r   r   s       r"   r   zPyComprehension.__init__s   sQ    2		$$--d&-A		++44T68VTr#   c                 t    t         j                  j                  j                  | j                  | t
              S r   )r   r   r,   ComprehensionScoper    rv   r&   s    r"   r/   zPyComprehension._create_scopex   s+    yy!!44KK4
 	
r#   c                      y)NComprehensionr%   r&   s    r"   rh   zPyComprehension.get_kind}   s    r#   N)rm   rn   ro   r   r/   rh   r%   r#   r"   rr   rr   r   s    U


r#   rr   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)ra   c                 @   t         | _        t        j                  j                  j
                  j                  |        t        j                  j                  j                  j                  | |||       || _        | j                         j                         | _        y r   )_ClassVisitorrw   r   r   r	   AbstractClassr   r   r!   r   r   _superclassesr   s       r"   r   zPyClass.__init__   sk    *		))2248		++44T68VT!__.BBDr#   c                     | j                   j                         )| j                   j                  | j                                | j                   j                         S r   )r   rM   rB   
_get_basesr&   s    r"   get_superclasseszPyClass.get_superclasses   sG    !!#+""4??#45!!%%''r#   c                 6    | j                         j                  S r   rR   r&   s    r"   rT   zPyClass.get_name   rU   r#   c                     i }t        | j                               D ]!  }|j                  |j                                # |S r   )reversedr   updateget_attributes)r   rH   r   s      r"   r*   z$PyClass._create_concluded_attributes   s>    T2245 	1DMM$--/0	1r#   c                    g }| j                   j                  D ]  }t        j                  j                  j                  | j                  j                         |      }|H|j                         j                         t        j                  j                  j                  d      k(  s|j                  |j                                 |S )NType)r   basesr   r   rc   rd   r!   r`   
get_objectget_typer	   get_base_typer<   )r   rH   	base_namer   s       r"   r   zPyClass._get_bases   s    ,, 	1I99%%//0E0E0GSD OO%..099&&44V<= doo/0	1 r#   c                 j    t         j                  j                  j                  | j                  |       S r   )r   r   r,   
ClassScoper    r&   s    r"   r/   zPyClass._create_scope   s#    yy!!,,T[[$??r#   N)	rm   rn   ro   r   r   rT   r*   r   r/   r%   r#   r"   ra   ra      s"    E(
#
@r#   ra   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 )
PyModulec                    |j                   j                  j                  dd      }|xs | }d| _        	 | j	                  |||      \  }}|| _	        g | _
        t        | _        t        j                  | j                        | _        t         | E  |||       y # t
        j                  $ r$ d| _        |r d}t        j                  d      }Y w xY w)Nignore_syntax_errorsFT
)projectprefsrM   
has_errors_init_sourcer   ModuleSyntaxErrorr   parsesource_codestar_imports_GlobalVisitorrw   r   read_str_codingcodingsuperr   )	r   r    sourceresourceforce_errorsignoresyntax_errorsrZ   	__class__s	           r"   r   zPyModule.__init__   s    %%))*@%H$2F
	',,VVXFLFD "+ 001A1ABx0 ++ 	'"DOyy	's   B 4CCc                    d}|r|j                   }	 |)|j                         }t        j                  |      \  }}n(t	        |t
              rt        j                  |      }n|}t        j                  ||      }||fS # t        $ r0}t        j                  ||j                  |j                        d }~wt        $ r)}t        j                  |dd|j                  z        d }~ww xY w)Nstring)filename   z%s)path
read_bytesr   file_data_to_unicoderW   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!+!@!@!NQk3/#-#B#B;#OL#.LyyAH
 H$$	  	J..x155II! 	O..xDAHH<MNN	Os$   A*B   	C)	+B44C) $C$$C)c                      i S r   r%   r%   r#   r"   <lambda>zPyModule.<lambda>   s    R r#   c                 j    i }| j                   D ]!  }|j                  |j                                # |S r   )r   r   	get_names)r   rH   star_imports      r"   r*   z%PyModule._create_concluded_attributes   s6    ,, 	3KMM+//12	3r#   c                 j    t         j                  j                  j                  | j                  |       S r   )r   r   r,   GlobalScoper    r&   s    r"   r/   zPyModule._create_scope   s#    yy!!--dkk4@@r#   c                 h    t         j                  j                  j                  | j                        S )zA `SourceLinesAdapter`)r   r   codeanalyzeSourceLinesAdapterr   r&   s    r"   lineszPyModule.lines   s%     yy$$778H8HIIr#   c                 h    t         j                  j                  j                  | j                        S )zA `LogicalLinesFinder`)r   r   r   CachingLogicalLineFinderr   r&   s    r"   logical_lineszPyModule.logical_lines   s#     yy$$==djjIIr#   c                     | j                   r3t        j                  j                  j	                  | j                         S dS N r   r   r   libutilsmodnamer&   s    r"   rT   zPyModule.get_name   ,    <@MMtyy!!))$--8QrQr#   )NNF)rm   rn   ro   r   r   r
   prevent_recursionr*   r/   rp   saveitr   r   rT   __classcell__r   s   @r"   r   r      s~    1&%( UZ( )A 
\\J  J 
\\J  J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 )
	PyPackagec                     || _         | j                         }|,|j                  j                  ||      j	                         }nt        j                  d      }t        | !  |||       y )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__   sf     ++-"~~22, 3 gi  yyH84r#   c                    i }t         j                  j                  j                  | j                        }| j
                  j                  |      }|j                         D ]1  \  }}t         j                  j                  j                  |      ||<   3 | j                  |S | j                         j                         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0668 	BLD&99--99&AF4L	B== M"779??A 	NND(%44THMF4L	Nr#   c                     i }| j                         }|rD| j                  j                  j                  |      }|j	                  |j                                |S r   )r   r    r   r   r   r   )r   rH   r   init_objects       r"   r*   z&PyPackage._create_concluded_attributes  sL    ++-++--::;GKMM+4467r#   c                    i }| j                   j                         D ]b  }|j                         r|||j                  <   #|j                  j	                  d      s?|j                  dk7  sO|j                  d d }|||<   d |S )Nz.py__init__.py)r   get_children	is_folderrJ   endswith)r   rH   childrJ   s       r"   r   zPyPackage._get_child_resources	  sw    ]]//1 	%E %*uzz"$$U+

m0Kzz#2$t	% r#   c                     | j                   6| j                   j                  d      r| j                   j                  d      S y )Nr   )r   	has_child	get_childr&   s    r"   r   zPyPackage._get_init_dot_py  s5    ==$)@)@)O==**=99r#   c                 >    | j                         j                         S r   )r   r`   r&   s    r"   r/   zPyPackage._create_scope  s     **,,r#   c                 t    | j                         }|r%| j                  j                  j                  |      S | S r   )r   r    r   r   )r   r   s     r"   r   zPyPackage.get_module  s3    ++-;;&&33K@@r#   c                     | j                   r3t        j                  j                  j	                  | j                         S dS r   r   r&   s    r"   rT   zPyPackage.get_name"  r   r#   NF)rm   rn   ro   r   r'   r*   r   r   r/   r   rT   r   r   s   @r"   r   r      s,    	5
-Rr#   r   c                   D    e Zd Zd Zd ZddZd Zd Zd Zd Z	d	 Z
d
 Zy)_AnnAssignVisitorc                 .    || _         d | _        d | _        y r   )scope_visitorassigned_ast	type_hintr   r   s     r"   r   z_AnnAssignVisitor.__init__'  s    * r#   c                 ~    |j                   | _        |j                  | _        | j	                  |j
                         y r   )valuer   
annotationr   visittargetr   rZ   s     r"   
_AnnAssignz_AnnAssignVisitor._AnnAssign,  s)     JJ

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

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

4::r#   r   )
rm   rn   ro   r   r  r&  r)  r,  r.  r1  r%   r#   r"   r  r  P  s%    +7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
y)r0  c                      || _         d | _        y r   )r   r   r   s     r"   r   z_AssignVisitor.__init__l  s    * r#   c                     |j                   | _        |j                  D ]  }| j                  |        t	        | j
                        j                  |j                          y r   )r   r   targetsr   r  r   )r   rZ   
child_nodes      r"   _Assignz_AssignVisitor._Assignp  sJ     JJ,, 	#JJJz"	#4--.44TZZ@r#   Nc                 <    | j                   j                  ||       y r   r  r  s      r"   r  z_AssignVisitor._assignedv  r  r#   c                     d }| j                   t        j                  | j                         }| j                  |j                  |       y r   )r   r   r  r  r	  r
  s      r"   r  z_AssignVisitor._Namey  s;    
(#33D4E4EFJtww
+r#   c                     t        j                  |      }|D ]E  \  }}d }| j                   t        j                  | j                  |      }| j                  ||       G y r   r  r  s         r"   r  z_AssignVisitor._Tuple  r  r#   c                      y r   r%   r   s     r"   r  z_AssignVisitor._Attribute  r  r#   c                      y r   r%   r   s     r"   r  z_AssignVisitor._Subscript  r  r#   c                      y r   r%   r   s     r"   r  z_AssignVisitor._Slice  r  r#   r   )rm   rn   ro   r   r7  r  r  r  r  r  r  r%   r#   r"   r0  r0  k  s+    !A7,-r#   r0  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y)_ScopeVisitorc                 j    t         j                  | |        || _        || _        i | _        g | _        y )Nr   )r  r   r    r#  r  r$  )r   r    r#  s      r"   r   z_ScopeVisitor.__init__  s2    ##D#=(
r#   c                 P    | j                   | j                   j                         S y r   )r#  r   r&   s    r"   r   z_ScopeVisitor.get_module  s&    ($$//11r#   c                     t        | j                  || j                        }t        j                  |      | j
                  |j                  <   | j                  j                  |       y r   )	ra   r    r#  r   DefinedNamer  rJ   r$  r<   )r   rZ   pyclasss      r"   	_ClassDefz_ScopeVisitor._ClassDef  sI    $++tT->->? * 6 6w ?

499W%r#   c                    t        | j                  || j                        }|j                  D ]  }t	        |t
        j                        s|j                  dk(  s/t	        | t              s@t        j                  j                  j                  |      }t        j                  t        j                  j                  j!                  | j                              }||fd}t#        j$                  | j'                         |      }t        j(                  || j'                         |      | j*                  |j,                  <    n- t        j.                  |      | j*                  |j,                  <   | j0                  j3                  |       y )Nrp   c                 L    | j                  t        j                  |g            S r   )get_property_objectr   ObjectArguments)ru   rX   s     r"   _evalz)_ScopeVisitor._FunctionDef.<locals>._eval  s%    $88%55se<  r#   )r   r   )r   r    r#  rb   rW   r   Namer	  r   r   r   r=   Propertyr   UnboundNamer	   rx   r
   guess_def_linenor   EvaluatedNamer  rJ   rC  r$  r<   )r   rZ   
pyfunctionrf   ru   rX   rJ  r   s           r"   _FunctionDefz_ScopeVisitor._FunctionDef  s$   T43D3DE
#.. 	GI)SXX.9<<:3MdM2 II..77
CE$00		++44T5F5FGC %*s 
 #33DOO4EtLF,6,D,Ddoo&7-DJJtyy) %	G( %/$:$::$FDJJtyy!Z(r#   c                 $    | j                  |      S r   )rQ  r   s     r"   _AsyncFunctionDefz_ScopeVisitor._AsyncFunctionDef  s      &&r#   c                 8    t        |       j                  |       y r   )r0  r   r   s     r"   r7  z_ScopeVisitor._Assign  s    t""4(r#   c                 8    t        |       j                  |       y r   )r   r   r   s     r"   r   z_ScopeVisitor._AnnAssign  s    $%%d+r#   c                      y r   r%   r   s     r"   
_AugAssignz_ScopeVisitor._AugAssign  r  r#   c                     | j                  |j                  |j                  d       |j                  |j                  z   D ]  }| j                  |        y )Nz.__iter__().next())_update_evaluatedr   iterbodyorelser   r   rZ   r   s      r"   _Forz_ScopeVisitor._For  sE    t{{DII7KLYY, 	EJJu	r#   c                 $    | j                  |      S r   )r^  r   s     r"   	_AsyncForz_ScopeVisitor._AsyncFor  s    yyr#   c                    | j                   j                  |d       }|$t        j                  | j	                               }t        |t        j                        r-||j                  j                  |       || j                   |<   y y )N)r   )r  rM   r   AssignedNamer   rW   assignmentsr<   )r   rJ   r  rg   s       r"   r  z_ScopeVisitor._assigned  so    d+>,,DOO4EFFfj556%""))*5%DJJt 7r#   Nc                    i }t        |t              r,t        j                  |g ||      }| j	                  ||       |S t        j                  |      }|D ]/  \  }	}
t        j                  ||
||      }| j	                  |	|       1 |S r   )rW   r   r   r  r  r   r  )r   r5  assigned
evaluation	eval_typer   rH   r  r  rJ   r  s              r"   rY  z_ScopeVisitor._update_evaluated  s     gs##33Hb*iXJNN7J/   //8E % 1f'77fj)
 tZ0	1
 r#   c                     |j                   D ]6  }|j                  s| j                  |j                  |j                  d       8 |j                  D ]  }| j                  |        y )Nz.__enter__())r   optional_varsrY  context_exprr[  r   )r   rZ   itemr   s       r"   _Withz_ScopeVisitor._With  s`    JJ 	D!!&&&&(9(9>	
 YY 	EJJu	r#   c                 $    | j                  |      S r   )rl  r   s     r"   
_AsyncWithz_ScopeVisitor._AsyncWith  s    zz$r#   c                 j   t         }|j                  t        |j                  |      ri|j                  }t        |j                  t        j
                        r|j                  r|j                  d   }| j                  |j                  |d       |j                  D ]  }| j                  |        y )Nr   T)rg  )
r   rJ   rW   typer   TupleeltsrY  r[  r   )r   rZ   node_name_type	type_noder   s        r"   _excepthandlerz_ScopeVisitor._excepthandler  s    99 Z		>%J		I$))SYY/INN%NN1-	""499i4"HYY 	EJJu	r#   c                 &    | j                  |       y r   )ru  r   s     r"   _ExceptHandlerz_ScopeVisitor._ExceptHandler  s    D!r#   c                    |j                   D ]  }|j                  }|j                  }|j                  d      d   }|Ft	        j
                  | j                         |      }| j                  |      rg|| j                   |<   wt	        j
                  | j                         |      }| j                  |      r|| j                   |<    y )N.r   )r  rJ   asnamesplitr   r   r   _is_ignored_import)r   rZ   import_pairmodule_namealiasfirst_packageimporteds          r"   _Importz_ScopeVisitor._Import  s    :: 	9K%**K&&E'--c215M %44T__5FT..x8(0DJJu%%44T__5FV..x808DJJ}-	9r#   c                 r   d}|j                   r|j                   }t        j                  | j                         |j                  xs d|      }| j                  |      ry t        |j                        dk(  rf|j                  d   j                  dk(  rJt        | j                  t              r/| j                  j                  j                  t        |             y y |j                  D ]K  }|j                  }|j                  }||}t        j                   ||j                        | j                  |<   M y )Nr   r   r   *)levelr   r   r   r   r|  r:   r  rJ   rW   r#  r   r   r<   
StarImportrz  ImportedName)r   rZ   r  imported_moduleimported_namer  r  s          r"   _ImportFromz_ScopeVisitor._ImportFrom  s   ::JJE$33OOKK2

 ""?3tzz?aDJJqM$6$6#$=$++X6!!..55j6QR 7 "& (--%,,$$H'1'>'>#]%7%7(

8$r#   c                     | j                   j                  j                  j                  dd      syt	        |j                         t        j                  j                  j                         S )Nignore_bad_importsF)
r    r   r   rM   rW   r   r   r   r	   AbstractModuler   r  s     r"   r|  z _ScopeVisitor._is_ignored_import*  sV    {{""((,,-A5I&&($))*=*=*L*L
 
 	
r#   c                     | j                         }|j                  D ]  }|	 ||   }| j                  |<    y # t        j                  $ r" t	        j
                  |j                        }Y Fw xY wr   )r   r  r   AttributeNotFoundErrorr   rb  r   )r   rZ   r   rJ   rg   s        r"   _Globalz_ScopeVisitor._Global1  ss    "JJ 	&D!B#D\F  &DJJt	& "88 B'44T[[AFBs   :2A/.A/)r   FN)rm   rn   ro   r   r   rE  rQ  rS  r7  r   rW  r^  r`  r  rY  rl  rn  ru  rw  r  r  r|  r  r%   r#   r"   r?  r?    sm    &
)2'),
& LP  	"90
&r#   r?  c                       e Zd Zd Zd Zd Zy)rv   c                 p    | j                  |j                         | j                  |j                         y r   )r   r   rZ  r   s     r"   _comprehensionz$_ComprehensionVisitor._comprehension=  s"    

4;;

499r#   c                     t        |j                  t        j                        r)| j	                  |      | j
                  |j                  <   y y r   )rW   ctxr   Store_get_pyobjectr  r	  r   s     r"   r  z_ComprehensionVisitor._NameA  s6    dhh		*"&"4"4T":DJJtww +r#   c                 `    t        j                  |j                  | j                               S N)r   r   )r   rb  r   r   r   s     r"   r  z#_ComprehensionVisitor._get_pyobjectE  s     &&dkk$//BSTTr#   N)rm   rn   ro   r  r  r  r%   r#   r"   rv   rv   <  s    ;Ur#   rv   c                       e Zd Zy)r   N)rm   rn   ro   r%   r#   r"   r   r   I  s    r#   r   c                       e Zd Zd Zy)r   c                 h   t         j                  | |       t        |j                  j                        dkD  rz|j                  j                  d   }d }t	        |t
        j                        rt        | |j                        }|,t        j                  |      D ]  }|j                  |        y y y )Nr   )
r?  rQ  r:   r   rW   r   rX   _ClassInitVisitoriter_child_nodesr   )r   rZ   firstnew_visitorr   s        r"   rQ  z_ClassVisitor._FunctionDefN  s    ""4.tyy~~"IINN1%EK%)/eii@& 11$7 -E%%e,- ' #r#   N)rm   rn   ro   rQ  r%   r#   r"   r   r   M  s    	-r#   r   c                   *     e Zd Z fdZd Zd Z xZS )r.   c                 B    t         |   ||       g | _        d| _        y r   )r   r   returned_asts	generator)r   r    r#  r   s      r"   r   z_FunctionVisitor.__init__[  s!    .r#   c                 h    |j                   &| j                  j                  |j                          y y r   )r   r  r<   r   s     r"   _Returnz_FunctionVisitor._Return`  s)    ::!%%djj1 "r#   c                 t    |j                   %| j                  j                  |j                          d| _        y )NT)r   r  r<   r  r   s     r"   _Yieldz_FunctionVisitor._Yieldd  s+    ::!%%djj1r#   )rm   rn   ro   r   r  r  r   r   s   @r"   r.   r.   Z  s    
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                 2    t         |   |       || _        y r   )r   r   	self_name)r   r   r  r   s      r"   r   z_ClassInitVisitor.__init__k  s    '"r#   c                    t        |j                  t        j                        sy t        |j                  t        j
                        r%|j                  j                  | j                  k(  r |j                  | j                  j                  vrZt        j                  |j                  | j                  j                               | j                  j                  |j                  <   | j                  w| j                  j                  |j                     }t        |t        j                        r9|j                   j#                  t        j$                  | j                               y y y y y r  )rW   r  r   r  r   rK  r	  r  attrr   r  r   rb  r   r   r   rc  r<   r  )r   rZ   rg   s      r"   r  z_ClassInitVisitor._Attributeo  s   $((CII.djj#((+

0Oyy 2 2 8 886@6M6M;;t/A/A/L/L/N7""((3   ,++11$))<fj&=&=>&&--"2243D3DE ? - 1P+r#   c                     t        |j                  t        j                        sy t        j                  |      D ]  }| j                  |        y r   )rW   r  r   r  r  r   r]  s      r"   r  z_ClassInitVisitor._Tuple~  s=    $((CII.))$/ 	EJJu	r#   c                      y r   r%   r   s     r"   r  z_ClassInitVisitor._Name  r  r#   c                      y r   r%   r   s     r"   rQ  z_ClassInitVisitor._FunctionDef  r  r#   c                      y r   r%   r   s     r"   rE  z_ClassInitVisitor._ClassDef  r  r#   c                      y r   r%   r   s     r"   r^  z_ClassInitVisitor._For  r  r#   c                      y r   r%   r   s     r"   rl  z_ClassInitVisitor._With  r  r#   )rm   rn   ro   r   r  r  r  rQ  rE  r^  rl  r   r   s   @r"   r  r  j  s+    #r#   r  c                       e Zd Zd Zd Zy)r  c                     || _         y r   )r  r  s     r"   r   zStarImport.__init__  s
    .r#   c                     i }| j                   j                         }|D ]7  }|j                  d      rt        j                  | j                   |      ||<   9 |S )Nr   )r  r   
startswithr   r  )r   rH   r  rJ   s       r"   r   zStarImport.get_names  s[    ''224 	SD??3')66t7K7KTRt	S r#   N)rm   rn   ro   r   r   r%   r#   r"   r  r    s    /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   rr   ra   r   r   RopeNodeVisitorr   r  r0  r?  rv   r   r   r.   r  r  r%   r#   r"   <module>r     s        	 	 	\>%% \>~i// #@i #@L?Ry!! ?RD:R	## :Rz'++ 'T,, 6#S(( #Lh&& h&V
UM 
U	] 	
-M 
-}  ' 'T
 
r#   