ó
’›V]c           @   sš   d  d l  m Z m Z m Z d  d l m Z d e f d „  ƒ  YZ e e d ƒ Z	 e e
 d ƒ Z e d d ƒ Z d „  Z d d	 „ Z d
 „  Z d „  Z d S(   iÿÿÿÿ(   t   get_flow_branch_keywordt   is_scopet   get_parent_scope(   t   execution_allowedt   Statusc           B   s2   e  Z i  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C   s#   | |  _  | |  _ |  t j | <d  S(   N(   t   _valuet   _nameR   t   lookup_table(   t   selft   valuet   name(    (    s:   lib/python2.7/site-packages/jedi/evaluate/flow_analysis.pyt   __init__   s    		c         C   s(   |  t  k r t S|  t k r  t  St Sd  S(   N(   t	   REACHABLEt   UNREACHABLEt   UNSURE(   R   (    (    s:   lib/python2.7/site-packages/jedi/evaluate/flow_analysis.pyt   invert   s
    c         C   s4   t  |  | f k r t  S|  j r, | j r, t St Sd  S(   N(   R   R   R   R   (   R   t   other(    (    s:   lib/python2.7/site-packages/jedi/evaluate/flow_analysis.pyt   __and__   s    c         C   s   d t  |  ƒ j |  j f S(   Ns   <%s: %s>(   t   typet   __name__R   (   R   (    (    s:   lib/python2.7/site-packages/jedi/evaluate/flow_analysis.pyt   __repr__   s    (   R   t
   __module__R   R   R   R   R   (    (    (    s:   lib/python2.7/site-packages/jedi/evaluate/flow_analysis.pyR      s
   			t	   reachablet   unreachablet   unsurec         c   sD   x= t  r? t |  d t  ƒ}  |  d  k s3 t |  ƒ r7 d  S|  Vq Wd  S(   Nt   include_flows(   t   TrueR   t   NoneR   (   t   node(    (    s:   lib/python2.7/site-packages/jedi/evaluate/flow_analysis.pyt   _get_flow_scopes$   s
    	c         C   s5  t  | d t ƒ} | d  k	 r"t t | ƒ ƒ } t t | ƒ ƒ } t } x¢ | D]š } | | k rO t | | ƒ }	 t | | ƒ }
 |	 |
 k } | j d k r§ | sÜ t Sn5 | j d k rÜ | rÜ |
 d k rÜ |	 d k rÜ t Sn  | ré Pqé qO qO Wx2 | d  k	 r| | k r| rt S| j	 } qð Wn  t
 |  | | | ƒ S(   NR   t   if_stmtt   try_stmtt   elset   except(   R   R   R   t   listR   R    R   R   R   t   parentt   _break_check(   t   contextt   context_scopeR   t   origin_scopet   first_flow_scopet   origin_flow_scopest   node_flow_scopest   branch_matchest
   flow_scopet   node_keywordt   origin_keyword(    (    s:   lib/python2.7/site-packages/jedi/evaluate/flow_analysis.pyt   reachability_check,   s0    	c         C   s  t  } | j d k rŸ | j | ƒ ro x9 | j ƒ  D]+ } t |  | ƒ } | t  t f k r1 Pq1 q1 W| j ƒ  } q² | j | ƒ } | d  k	 r² t |  | ƒ } q² n | j d k r² t S| t	 t f k rÈ | S| | k r| | j
 k rt | d t ƒ} | t |  | | | ƒ @S| Sd  S(   NR   R   t
   while_stmtR   (   R   R0   (   R   R   t   is_node_after_elset   get_test_nodest	   _check_ifR   R   t   get_corresponding_test_nodeR   R   R#   R   R   R$   (   R%   R&   R,   R   R   t
   check_nodet	   flow_node(    (    s:   lib/python2.7/site-packages/jedi/evaluate/flow_analysis.pyR$   Q   s&    c         C   su   t  |  j | ƒ ] } | s t S|  j | ƒ } t d „  | Dƒ ƒ } t | ƒ d k rg t j | j ƒ  St SWd  QXd  S(   Nc         s   s   |  ] } | j  ƒ  Vq d  S(   N(   t
   py__bool__(   t   .0t   x(    (    s:   lib/python2.7/site-packages/jedi/evaluate/flow_analysis.pys	   <genexpr>r   s    i   (	   R   t	   evaluatorR   t	   eval_nodet   sett   lenR   R   t   pop(   R%   R   t   allowedt   typest   values(    (    s:   lib/python2.7/site-packages/jedi/evaluate/flow_analysis.pyR3   l   s    N(   t   jedi.parser_utilsR    R   R   t   jedi.evaluate.recursionR   t   objectR   R   R   t   FalseR   R   R   R   R/   R$   R3   (    (    (    s:   lib/python2.7/site-packages/jedi/evaluate/flow_analysis.pyt   <module>   s   	%	