ó
’›V]c           @   sœ  d  Z  d d l m Z d d l m Z d d l m Z d d l m Z i d e	 d f d 6d	 e
 d
 f d 6d e d f d 6d e d/ f d 6d e d/ f d 6d e d/ f d 6d e d/ f d 6d e d/ f d 6d e d/ f d 6d e d/ f d 6d e d/ f d 6d e d/ f d  6d! e d/ f d" 6d# e d/ f d$ 6d% e d/ f d& 6Z d' e f d( „  ƒ  YZ d) e f d* „  ƒ  YZ d/ e d/ d+ „ Z d, „  Z d- „  Z d/ d. „ Z d/ S(0   s   
Module for statical analysis.
iÿÿÿÿ(   t   tree(   t   force_unicode(   t   debug(   t	   is_stringi   s   Potential AttributeError.s   attribute-errori   s   Potential NameError.s
   name-errori   s   Potential ImportError.s   import-errori   s   type-error-too-many-argumentsi   s   type-error-too-few-argumentsi   s   type-error-keyword-argumenti   s   type-error-multiple-valuesi   s   type-error-star-stari	   s   type-error-stari
   s   type-error-operationi   s   type-error-not-iterablei   s   type-error-isinstancei   s   type-error-not-subscriptablei   s   value-error-too-many-valuesi   s   value-error-too-few-valuest   Errorc           B   sw   e  Z d
 d  „ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z d „  Z d „  Z	 d „  Z
 d „  Z d „  Z d	 „  Z RS(   c         C   sH   | |  _  | |  _ | |  _ | d  k r; t |  j d } n  | |  _ d  S(   Ni   (   t   patht
   _start_post   namet   Nonet   CODESt   message(   t   selfR   t   module_patht	   start_posR
   (    (    s5   lib/python2.7/site-packages/jedi/evaluate/analysis.pyt   __init__   s    			c         C   s   |  j  d S(   Ni    (   R   (   R   (    (    s5   lib/python2.7/site-packages/jedi/evaluate/analysis.pyt   line'   s    c         C   s   |  j  d S(   Ni   (   R   (   R   (    (    s5   lib/python2.7/site-packages/jedi/evaluate/analysis.pyt   column+   s    c         C   s)   |  j  j d } | t t |  j d ƒ S(   Ni    (   t	   __class__t   __name__t   strR	   R   (   R   t   first(    (    s5   lib/python2.7/site-packages/jedi/evaluate/analysis.pyt   code/   s    c         C   s&   d |  j  |  j |  j |  j |  j f S(   Ns   %s:%s:%s: %s %s(   R   R   R   R   R
   (   R   (    (    s5   lib/python2.7/site-packages/jedi/evaluate/analysis.pyt   __unicode__5   s    c         C   s
   |  j  ƒ  S(   N(   R   (   R   (    (    s5   lib/python2.7/site-packages/jedi/evaluate/analysis.pyt   __str__9   s    c         C   s4   |  j  | j  k o3 |  j | j k o3 |  j | j k S(   N(   R   R   R   (   R   t   other(    (    s5   lib/python2.7/site-packages/jedi/evaluate/analysis.pyt   __eq__<   s    $c         C   s   |  j  | ƒ S(   N(   R   (   R   R   (    (    s5   lib/python2.7/site-packages/jedi/evaluate/analysis.pyt   __ne__@   s    c         C   s   t  |  j |  j |  j f ƒ S(   N(   t   hashR   R   R   (   R   (    (    s5   lib/python2.7/site-packages/jedi/evaluate/analysis.pyt   __hash__C   s    c         C   s1   d |  j  j |  j |  j |  j d |  j d f S(   Ns   <%s %s: %s@%s,%s>i    i   (   R   R   R   R   R   (   R   (    (    s5   lib/python2.7/site-packages/jedi/evaluate/analysis.pyt   __repr__F   s    N(   R   t
   __module__R   R   t   propertyR   R   R   R   R   R   R   R   R   (    (    (    s5   lib/python2.7/site-packages/jedi/evaluate/analysis.pyR      s   					t   Warningc           B   s   e  Z RS(    (   R   R   (    (    (    s5   lib/python2.7/site-packages/jedi/evaluate/analysis.pyR    L   s   c   
      C   s‡   t  | d } t |  | | | ƒ r' d  S|  j ƒ  } | j ƒ  } | | | | j | ƒ }	 t j t |	 ƒ d t ƒ|  j	 j
 j |	 ƒ |	 S(   Ni   t   format(   R	   t   _check_for_exception_catcht   get_root_contextt
   py__file__R   R   t   warningR   t   Falset	   evaluatort   analysist   append(
   t   node_contextt
   error_namet   nodeR
   t   typt   payloadt	   exceptiont   module_contextR   t   issue_instance(    (    s5   lib/python2.7/site-packages/jedi/evaluate/analysis.pyt   addP   s    c            sh   |  j  ƒ  } | j ‰  ˆ  d k r% t Sy ˆ  j ƒ  d } Wn t k
 rM t SXt ‡  f d †  | Dƒ ƒ S(   sU   
    Check if there's any setattr method inside an instance. If so, return True.
    t   setattrc         3   sY   |  ]O } ˆ  j  | j  k  o) ˆ  j k  n oP | j j d  k oO | j j | k Vq d S(   t   funcdefN(   R   t   end_post   parentt   typeR   (   t   .0t   n(   R,   (    s5   lib/python2.7/site-packages/jedi/evaluate/analysis.pys	   <genexpr>m   s   N(   R#   t	   tree_nodeR   R&   t   get_used_namest   KeyErrort   any(   t   instancet   modulet
   stmt_names(    (   R,   s5   lib/python2.7/site-packages/jedi/evaluate/analysis.pyt   _check_for_setattr^   s    	c   	      C   sØ   d | | f } d d l  m } t } | j ƒ  r¯ | j ƒ  r¯ | j d ƒ | j d ƒ } x9 | D]1 } t | | ƒ rb | j j t	 k rb t
 } Pqb qb Wt | ƒ r¯ t
 } q¯ n  | | f } t |  d | | | | ƒ d  S(   Ns'   AttributeError: %s has no attribute %s.iÿÿÿÿ(   t   CompiledInstanceNameu   __getattr__u   __getattribute__s   attribute-error(   t   jedi.evaluate.context.instanceRB   R   t   is_instancet   is_compiledt   get_function_slot_namest
   isinstancet   parent_contextt   objt   objectR    RA   R2   (	   t   name_contextt   lookup_contextR   R
   RB   R-   t
   slot_namesR9   R.   (    (    s5   lib/python2.7/site-packages/jedi/evaluate/analysis.pyt   add_attribute_errors   s    c            së   d „  ‰  ‡  ‡ ‡ f d †  } ‡ ‡ ‡ f d †  } ˆ } x« | d	 k	 ræ t | t j t j f ƒ ræ t | t j ƒ rÚ | j d k r˜ | | | ƒ r˜ t S| t k rÚ | j d
 k rÚ | | j	 d | j	 d ƒ r× t SqÚ n  | j
 } q< Wt S(   s  
    Checks if a jedi object (e.g. `Statement`) sits inside a try/catch and
    doesn't count as an error (if equal to `exception`).
    Also checks `hasattr` for AttributeErrors and uses the `payload` to compare
    it.
    Returns True if the exception was catched.
    c         S   sY   |  j  ƒ  s t SxB | j ƒ  D]4 } |  j ƒ  | j k r |  j |  j j k r t Sq Wt S(   N(	   t   is_classR&   t   mrot
   py__name__R   RH   R'   t   builtins_modulet   True(   t   clsR/   t
   python_cls(    (    s5   lib/python2.7/site-packages/jedi/evaluate/analysis.pyt   check_match’   s    c            sA  t  |  j ƒ } x\ | D]T } t | ƒ } t | ƒ } | d k r | j ˆ j k  o` | j k n r t Sq WxÌ |  j ƒ  D]¾ } | d  k r‘ t Sˆ j	 | ƒ } x– | D]Ž } d d l
 m }	 t | |	 j ƒ r"| j d k r"xT | j ƒ  D]0 }
 x' |
 j ƒ  D] } ˆ  | | ƒ rþ t Sqþ Wqë Wq§ ˆ  | | ƒ r§ t Sq§ Wq{ Wd  S(   Nt   tryiÿÿÿÿ(   t   iterablet   tuple(   t   itert   childrent   nextR   R5   R&   t   get_except_clause_testsR   RS   t	   eval_nodet   jedi.evaluate.contextRX   RG   t   Sequencet
   array_typet
   py__iter__t   infer(   RI   R/   t   iteratort   branch_typet   colont   suiteR,   t   except_classesRT   RX   t   lazy_contextR-   (   RV   t	   jedi_nameR*   (    s5   lib/python2.7/site-packages/jedi/evaluate/analysis.pyt   check_try_for_exceptœ   s*    &c            s¸  yŸ| j  ˆ  j  k o# | j k  n s. t ‚ |  j d k sC t ‚ |  j d } | j d k rn | j d k st t ‚ |  j d } | j d k s– t ‚ | j d } | j d k s¸ t ‚ d	 d
 l m } t | ˆ j	 ˆ | ƒ j
 ƒ  ƒ } t | ƒ d k st ‚ | d \ } } t | j ƒ  ƒ }	 t |	 ƒ d k rEt |	 d ƒ sKt ‚ t |	 d j ƒ  ƒ ˆ d j k stt ‚ | d \ } } | j ƒ  }
 ˆ d |
 k SWn t k
 r³t SXd  S(   Nt   powert	   atom_expri    R   t   hasattri   t   trailert   arglistiÿÿÿÿ(   t   TreeArgumentsi   (   Rl   Rm   (   R   R5   t   AssertionErrorR7   R[   t   valuet   jedi.evaluate.argumentsRq   t   listR'   t   unpackt   lenRc   R   R   t   get_safe_valueR&   (   R,   Rg   t   baseRo   Rp   Rq   t   argst   keyRi   t   namest   objects(   Rj   R*   R.   (    s5   lib/python2.7/site-packages/jedi/evaluate/analysis.pyt   check_hasattr¸   s*    +$!()t   try_stmtt   if_stmtt
   while_stmti   i   N(   R€   R   (   R   RG   R    t   Functiont   Classt   FlowR7   RS   t   AttributeErrorR[   R6   R&   (   R*   Rj   R/   R.   Rk   R~   RI   (    (   RV   Rj   R*   R.   s5   lib/python2.7/site-packages/jedi/evaluate/analysis.pyR"   Š   s    	
+
N(   t   __doc__t   parso.pythonR    t   jedi._compatibilityR   t   jediR   t   jedi.evaluate.helpersR   R…   t	   NameErrort   ImportErrort	   TypeErrorR   t
   ValueErrorR	   RJ   R   R    R2   RA   RN   R"   (    (    (    s5   lib/python2.7/site-packages/jedi/evaluate/analysis.pyt   <module>   s4   .		