ó
OçõZc           @   sÚ   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
 d  d l m Z e j Z d „  Z d „  Z d „  Z d „  Z d „  Z d	 „  Z d
 e f d „  ƒ  YZ d e f d „  ƒ  YZ d „  Z d S(   iÿÿÿÿN(   t   astt   astutilst
   exceptionst	   pyobjectst	   argumentst   worder(   t   pycompatc         C   s   t  |  | ƒ d S(   s   Find the pyname at the offseti   (   t   eval_location2(   t   pymodulet   offset(    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyt   eval_location   s    c         C   s   t  |  ƒ } | j | ƒ S(   s%   Find the primary and pyname at offset(   t   ScopeNameFindert   get_primary_and_pyname_at(   R   R	   t   pyname_finder(    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyR      s    c         C   s   t  |  | ƒ d S(   sl   Evaluate a `ast.AST` node and return a PyName

    Return `None` if the expression cannot be evaluated.
    i   (   t
   eval_node2(   t   scopet   node(    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyt	   eval_node   s    c         C   s,   t  |  ƒ } t j | | ƒ | j | j f S(   N(   t   StatementEvaluatorR    t   walkt
   old_resultt   result(   R   R   t	   evaluator(    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyR      s    c         C   s   t  |  | ƒ d S(   Ni   (   t	   eval_str2(   t   holding_scopet   name(    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyt   eval_str$   s    c         C   sD   y t  j d | ƒ } Wn t k
 r6 t d ƒ ‚ n Xt |  | ƒ S(   Ns   (%s)s,   Not a resolvable python identifier selected.(   R    t   parset   SyntaxErrort   BadIdentifierErrorR   (   R   R   R   (    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyR   (   s    R   c           B   sG   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s7   | j  ƒ  |  _ | j |  _ t j | j t ƒ |  _ d  S(   N(   t	   get_scopet   module_scopet   linesR   t   Wordert   source_codet   True(   t   selfR   (    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyt   __init__4   s    c         C   sŠ   | | j  ƒ  k rL | j d  k	 rL | j j ƒ  d k rL |  j j | ƒ rL t S| | j  ƒ  k r† | j ƒ  d k r† |  j j | ƒ r† t St S(   Nt   Class(	   t	   get_startt   parentt   Nonet   get_kindR   t%   is_a_class_or_function_name_in_headerR#   t   is_name_assigned_in_class_bodyt   False(   R$   R   R	   t   lineno(    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyt   _is_defined_in_class_body9   s    c         C   sT   | j  ƒ  | k o# | j ƒ  k n rP | j ƒ  d k rP |  j j | ƒ rP t St S(   Nt   Function(   R'   t   get_body_startR*   R   R+   R#   R-   (   R$   R   R	   R.   (    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyt$   _is_function_name_in_function_headerE   s
    (c         C   s   |  j  | ƒ d S(   Ni   (   R   (   R$   R	   (    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyt   get_pyname_atL   s    c   
      C   sâ  |  j  j | ƒ } |  j j | ƒ } |  j j | ƒ rˆ |  j j | ƒ } |  j | ƒ } t | t	 j
 ƒ rˆ d  | j ƒ  j | d  ƒ f Sn  |  j | | | ƒ r| } | | j ƒ  k rÁ | j } n  |  j j | ƒ j ƒ  } y d  | j | f SWqt j j j k
 rd SXn  |  j | | | ƒ rM|  j j | ƒ j ƒ  } d  | j | f S|  j j | ƒ sq|  j j | ƒ rœ|  j j | ƒ } |  j | ƒ }	 d  |	 f S|  j j | ƒ rÃ|  j j | ƒ } n |  j j | ƒ } t | | ƒ S(   N(   NN(   R    t   get_line_numberR   t   get_inner_scope_for_lineR   t   is_function_keyword_parametert   get_word_att   get_enclosing_functiont
   isinstanceR   t
   PyFunctionR)   t   get_parameterst   getR/   R'   R(   t   get_primary_att   stript   pyobjectt   ropet   baseR   t   AttributeNotFoundErrorR2   t   is_from_statement_modulet"   is_import_statement_aliased_modulet   _find_modulet   is_from_aliasedt   get_from_aliasedR   (
   R$   R	   R.   R   t   keyword_nameR?   t   class_scopeR   t   modulet   module_pyname(    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyR   O   s<    	
c         C   s¾   |  j  j | ƒ } y |  j | d ƒ } Wn t k
 rB d  } n X| d  k	 rº | j ƒ  } t | t j ƒ rq | St | t j	 ƒ r d | k r | d j ƒ  Sd | k rº | d j ƒ  Sn  d  S(   Ni   R%   t   __call__(
   R   t   find_parens_start_from_insideR3   R   R)   t
   get_objectR9   R   t   AbstractFunctiont   AbstractClass(   R$   R	   t   function_parenst   function_pynameR?   (    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyR8   t   s    
c         C   sJ   d } x | | d k r& | d 7} q	 Wt  j j j |  j j | | | ƒ S(   Ni    t   .i   (   R@   RA   t   pynamest   ImportedModuleR   R?   (   R$   t   module_namet   dots(    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyRE   …   s
    (	   t   __name__t
   __module__R%   R/   R2   R3   R   R8   RE   (    (    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyR   2   s   					%	R   c           B   sì   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 d „ Z d „  Z RS(   c         C   s   | |  _  d  |  _ d  |  _ d  S(   N(   R   R)   R   R   (   R$   R   (    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyR%      s    		c         C   s   |  j  j | j ƒ |  _ d  S(   N(   R   t   lookupt   idR   (   R$   R   (    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyt   _Name”   s    c         C   sž   t  |  j | j ƒ } | d  k r6 t j j j ƒ  } n  | |  _ | j	 ƒ  t j j
 j ƒ  k rš y | j	 ƒ  | j |  _ Wqš t j k
 r– d  |  _ qš Xn  d  S(   N(   R   R   t   valueR)   R@   RA   RT   t   UnboundNameR   RN   R   t   get_unknownt   attrR   R   RB   (   R$   R   t   pyname(    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyt
   _Attribute—   s    	c            s[  ˆ j  ˆ  j ƒ \ ‰ } | d  k r( d  S‡  ‡ ‡ f d †  } t | t j j j ƒ rá d  } d | k r† | d j ƒ  } | | ƒ } n  | d  k sª | t j j j	 ƒ  k rÂ t j j j
 | ƒ } n  t j j j d | ƒ ˆ _ d  Sd  } t | t j j j ƒ r| } n d | k r'| d j ƒ  } n  | d  k	 rWt j j j d | | ƒ ƒ ˆ _ n  d  S(   Nc            s(   t  j ˆ |  ˆ  ˆ j ƒ } |  j | ƒ S(   N(   R   t   create_argumentsR   t   get_returned_object(   R?   t   args(   R   t   primaryR$   (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyt   _get_returned§   s    t   __new__R?   RL   (   t    _get_primary_and_object_for_nodet   funcR)   R9   R@   RA   R   RP   RN   R_   t   PyObjectRT   R^   R   RO   (   R$   R   R?   Rg   R   t   new_functiont
   pyfunction(    (   R   Rf   R$   s1   lib/python2.7/site-packages/rope/base/evaluate.pyt   _Call¢   s,    	c         C   s+   t  j j j d t  j j j ƒ  ƒ |  _ d  S(   NR?   (   R@   RA   RT   R^   t   builtinst   get_strR   (   R$   R   (    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyt   _Str¿   s    c         C   s(   t  | j ƒ j } |  j | ƒ |  _ d  S(   N(   t   typet   nRX   t   _get_builtin_nameR   (   R$   R   t	   type_name(    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyt   _NumÃ   s    c         C   s;   t  j j j | j ƒ  } t  j j j t  j j j | ƒ ƒ S(   N(   R@   RA   Ro   RN   RT   R^   R   Rk   (   R$   Ru   t   pytype(    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyRt   Ç   s    c         C   s(   t  j j j |  j | j ƒ ƒ |  _ d  S(   N(   R@   RA   RT   R^   t   _get_object_for_nodet   leftR   (   R$   R   (    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyt   _BinOpÌ   s    c         C   sW   |  j  | j d ƒ } | d  k r; |  j  | j d ƒ } n  t j j j | ƒ |  _ d  S(   Ni    i   (   Rx   t   valuesR)   R@   RA   RT   R^   R   (   R$   R   R?   (    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyt   _BoolOpÐ   s    c         C   s   |  j  d ƒ |  _ d  S(   Nt   str(   Rt   R   (   R$   R   (    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyt   _ReprÖ   s    c         C   s(   t  j j j |  j | j ƒ ƒ |  _ d  S(   N(   R@   RA   RT   R^   Rx   t   operandR   (   R$   R   (    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyt   _UnaryOpÙ   s    c         C   s   |  j  d ƒ |  _ d  S(   Nt   bool(   Rt   R   (   R$   R   (    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyt   _CompareÝ   s    c         C   su   d  } d  } | j rD |  j | j d ƒ } |  j | j d ƒ } n  t j j j d t j j j	 | | ƒ ƒ |  _
 d  S(   Ni    R?   (   R)   t   keysRx   R{   R@   RA   RT   R^   Ro   t   get_dictR   (   R$   R   Rƒ   R{   (    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyt   _Dictà   s    	c         C   sV   d  } | j r( |  j | j d ƒ } n  t j j j d t j j j | ƒ ƒ |  _	 d  S(   Ni    R?   (
   R)   t   eltsRx   R@   RA   RT   R^   Ro   t   get_listR   (   R$   R   t   holding(    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyt   _Listé   s
    	c         C   s=   |  j  | ƒ } t j j j d t j j j | ƒ ƒ |  _ d  S(   NR?   (   t   _what_does_comprehension_holdR@   RA   RT   R^   Ro   R‡   R   (   R$   R   R?   (    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyt	   _ListCompð   s    c         C   s=   |  j  | ƒ } t j j j d t j j j | ƒ ƒ |  _ d  S(   NR?   (   RŠ   R@   RA   RT   R^   Ro   t   get_iteratorR   (   R$   R   R?   (    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyt   _GeneratorExpõ   s    c         C   s;   |  j  | ƒ } t | | j ƒ } | d  k	 r7 | j ƒ  Sd  S(   N(   t   _make_comprehension_scopeR   t   eltR)   RN   (   R$   R   R   Ra   (    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyRŠ   ú   s    c         C   s|   |  j  } | j j ƒ  } i  } x? | j D]4 } t | j | j | d | j ƒ } | j | ƒ q( Wt	 j
 j j | j | | ƒ S(   Ns   .__iter__().next()(   R   R?   t
   get_modulet
   generatorst   _get_evaluated_namest   targett   iterR.   t   updateR@   RA   t   pyscopest   TemporaryScopet   pycore(   R$   R   R   RJ   t   namest   compt	   new_names(    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyRŽ   ÿ   s    	c         C   s™   g  } t  | j ƒ d k  rN xM | j D]" } |  j | ƒ } | j | ƒ q% Wn | j |  j | j d ƒ ƒ t j j j d t j j j	 | Œ  ƒ |  _
 d  S(   Ni   i    R?   (   t   lenR†   Rx   t   appendR@   RA   RT   R^   Ro   t	   get_tupleR   (   R$   R   t   objectst   stmtR?   (    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyt   _Tuple	  s    c         C   s7   t  |  j | ƒ } d  } | d  k	 r3 | j ƒ  } n  | S(   N(   R   R   R)   RN   (   R$   R    Ra   R?   (    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyRx     s
    c         C   sC   t  |  j | ƒ \ } } d  } | d  k	 r9 | j ƒ  } n  | | f S(   N(   R   R   R)   RN   (   R$   R    Rf   Ra   R?   (    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyRi     s
    c         C   so   t  | j t j ƒ r7 |  j | j d | j j g ƒ n4 t  | j t j ƒ rk |  j | j d | j g ƒ n  d  S(   Nt   __getitem__(   R9   t   sliceR    t   Indext   _call_functionR]   t   Slice(   R$   R   (    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyt
   _Subscript"  s    c         C   s   |  j  d ƒ |  _ d  S(   NR£   (   Rt   R   (   R$   R   (    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyt   _Slice*  s    c   	      C   sÇ   t  |  j | ƒ } | d  k	 r- | j ƒ  } n d  S| | k rÃ | | j ƒ  } | sg t | t j ƒ rk d  S| g } | r‡ | | 7} n  t j | |  j ƒ } t	 j
 j j d | j | ƒ ƒ |  _ n  d  S(   NR?   (   R   R   R)   RN   R9   R   RO   R   t	   ArgumentsR@   RA   RT   R^   Rd   R   (	   R$   R   t   function_namet
   other_argsRa   R?   t   calledRe   t
   arguments_(    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyR¥   -  s    	c         C   s4   t  j j j d t  j j j | |  j ƒ ƒ |  _ d  S(   NR?   (   R@   RA   RT   R^   Ro   t   LambdaR   R   (   R$   R   (    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyt   _Lambda?  s    N(   RX   RY   R%   R\   Rb   Rn   Rq   Rv   Rt   Rz   R|   R~   R€   R‚   R…   R‰   R‹   R   RŠ   RŽ   R¡   Rx   Ri   R§   R¨   R)   R¥   R¯   (    (    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyR      s2   																			
					c   
      C   sw   i  } xj t  j |  ƒ D]Y \ } } t j j j | | | ƒ } t j j j | | ƒ }	 |	 j j	 | ƒ |	 | | <q W| S(   N(
   R   t   get_name_levelsR@   RA   RT   t   AssignmentValuet
   pynamesdeft   AssignedNamet   assignmentsR   (
   t   targetst   assignedRJ   t
   evaluationR.   R   R   t   levelst
   assignmentRa   (    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyR’   D  s    	(   t   rope.base.builtinsR@   t   rope.base.pynamest   rope.base.pyobjectst	   rope.baseR    R   R   R   R   R   t   rope.base.utilsR   R   R
   R   R   R   R   R   t   objectR   R   R’   (    (    (    s1   lib/python2.7/site-packages/rope/base/evaluate.pyt   <module>   s   .							
[·