
^Yc           @   s$  d  Z  d d l Z d d l Z d d l Z d d l m Z m Z e j j d  r e j	 dX k  r dY Z
 dZ Z e d1   e
 D  Z e d2   e D  Z d3   Z d4   Z n d5   Z d6   Z d7 e f d8     YZ e d9  Z d d:  Z d;   Z i d< e j 6d= e j 6d> e j 6d? e j 6d@ e j 6dA e j 6dB e j 6dC e j 6dD e j  6dE e j! 6dF e j" 6dG e j# 6dH e j$ 6dI e j% 6dJ e j& 6dK e j' 6dL e j( 6dM e j) 6dN e j* 6dO e j+ 6dP e j, 6dQ e j- 6Z. i dR e j/ 6dS e j0 6dT e j1 6dU e j2 6Z3 dV e j4 f dW     YZ5 d S([   s   
Find intermediate evalutation results in assert statements through builtin AST.
This should replace _assertionold.py eventually.
iN(   t   _format_explanationt   BuiltinAssertionErrort   javai   i   t   BoolOpt   BinOpt   UnaryOpt   Lambdat   IfExpt   Dictt   ListCompt   GeneratorExpt   Yieldt   Comparet   Callt   Reprt   Numt   Strt	   Attributet	   Subscriptt   Namet   Listt   Tuplet   FunctionDeft   ClassDeft   Returnt   Deletet   Assignt	   AugAssignt   Printt   Fort   Whilet   Ift   Witht   Raiset	   TryExceptt
   TryFinallyt   Assertt   Importt
   ImportFromt   Exect   Globalt   Exprt   Passt   Breakt   Continuec         c   s   |  ] } t  t |  Vq d  S(   N(   t   getattrt   ast(   t   .0t   name(    (    s2   /tmp/pip-build-hU8Cw8/py/py/_code/_assertionnew.pys	   <genexpr>   s    c         c   s   |  ] } t  t |  Vq d  S(   N(   R-   R.   (   R/   R0   (    (    s2   /tmp/pip-build-hU8Cw8/py/py/_code/_assertionnew.pys	   <genexpr>   s    c         C   s   |  j  t k S(   N(   t	   __class__t   _expr_nodes(   t   node(    (    s2   /tmp/pip-build-hU8Cw8/py/py/_code/_assertionnew.pyt   _is_ast_expr   s    c         C   s   |  j  t k S(   N(   R1   t   _stmt_nodes(   R3   (    (    s2   /tmp/pip-build-hU8Cw8/py/py/_code/_assertionnew.pyt   _is_ast_stmt   s    c         C   s   t  |  t j  S(   N(   t
   isinstanceR.   t   expr(   R3   (    (    s2   /tmp/pip-build-hU8Cw8/py/py/_code/_assertionnew.pyR4      s    c         C   s   t  |  t j  S(   N(   R7   R.   t   stmt(   R3   (    (    s2   /tmp/pip-build-hU8Cw8/py/py/_code/_assertionnew.pyR6       s    t   Failurec           B   s   e  Z d  Z d d  Z RS(   s#   Error found while interpreting AST.t    c         C   s   t  j   |  _ | |  _ d  S(   N(   t   syst   exc_infot   causet   explanation(   t   selfR?   (    (    s2   /tmp/pip-build-hU8Cw8/py/py/_code/_assertionnew.pyt   __init__'   s    (   t   __name__t
   __module__t   __doc__RA   (    (    (    s2   /tmp/pip-build-hU8Cw8/py/py/_code/_assertionnew.pyR:   $   s   c         C   se   t  j |   } t |  } y | j |  Wn( t k
 rV t j   d } t |  SX| ra d Sd  S(   Ni   s   (assertion failed, but when it was re-run for printing intermediate values, it did not fail.  Suggestions: compute assert expression before the assert or use --no-assert)(   R.   t   parset   DebugInterpretert   visitR:   R<   R=   t
   getfailure(   t   sourcet   framet   should_failt   modt   visitort   failure(    (    s2   /tmp/pip-build-hU8Cw8/py/py/_code/_assertionnew.pyt	   interpret,   s    c         C   s7   | d  k r* t j j t j d   } n  t |  |  S(   Ni   (   t   Nonet   pyt   codet   FrameR<   t	   _getframeRO   (   t   offending_lineRJ   (    (    s2   /tmp/pip-build-hU8Cw8/py/py/_code/_assertionnew.pyt   run9   s    c         C   s   t  |  j  } |  j d } t |  rs | j   } | sJ | j d  n  | d c d | f 7<d j |  } n  d |  j d j | f } | j d  r | d } n  | S(	   Ni   R;   i    s    << %ss   
s   %s: %ss   AssertionError: assert i   (	   R    R?   R>   t   strt
   splitlinest   appendt   joinRB   t
   startswith(   RN   R?   t   valuet   linest   text(    (    s2   /tmp/pip-build-hU8Cw8/py/py/_code/_assertionnew.pyRH   >   s    t   |t   ^t   &s   <<s   >>t   +t   -t   *t   /s   //t   %s   ==s   !=t   <s   <=t   >s   >=s   **t   iss   is nott   ins   not ins   not %ss   ~%ss   -%ss   +%sRF   c           B   s   e  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   Z d   Z d   Z d   Z RS(   s;   Interpret AST nodes to gleam useful debugging information. c         C   s   | |  _  d  S(   N(   RJ   (   R@   RJ   (    (    s2   /tmp/pip-build-hU8Cw8/py/py/_code/_assertionnew.pyRA   q   s    c         C   s   t  |  ry t j |  } |  j |  } y |  j j |  } Wn t k
 r\ t    n X|  j j |  } | | f St	 |  r t j
 | g  } |  j | d  } y |  j j |  Wn t k
 r t    n Xd St d | f   d  S(   Nt   execs   can't handle %s(   NN(   R4   R.   t
   Expressiont   _compileRJ   t   evalt	   ExceptionR:   t   reprR6   t   Modulet   exec_RP   t   AssertionError(   R@   R3   RL   t   cot   resultR?   (    (    s2   /tmp/pip-build-hU8Cw8/py/py/_code/_assertionnew.pyt   generic_visitt   s$    
Rn   c         C   s   t  | d |  S(   Ns   <assertion interpretation>(   t   compile(   R@   RI   t   mode(    (    s2   /tmp/pip-build-hU8Cw8/py/py/_code/_assertionnew.pyRm      s    c         C   s   |  j  | j  S(   N(   RG   R\   (   R@   R8   (    (    s2   /tmp/pip-build-hU8Cw8/py/py/_code/_assertionnew.pyt
   visit_Expr   s    c         C   s%   x | j  D] } |  j |  q
 Wd  S(   N(   t   bodyRG   (   R@   RL   R9   (    (    s2   /tmp/pip-build-hU8Cw8/py/py/_code/_assertionnew.pyt   visit_Module   s    c         C   s   |  j  |  \ } } d | j f } |  j |  } y |  j j |  } Wn t k
 rc t } n X| sw | j | f S| | f S(   Ns   %r in locals() is not globals()(   Rv   t   idRm   RJ   Rn   Ro   t   False(   R@   R0   R?   Ru   RI   Rt   t   local(    (    s2   /tmp/pip-build-hU8Cw8/py/py/_code/_assertionnew.pyt
   visit_Name   s    
c         C   sP  | j  } |  j |  \ } } x t | j | j  D] \ } } |  j |  \ } } t | j }	 d | |	 | f }
 d |	 f } |  j |  } y" |  j j	 | d | d | } Wn t
 k
 r t |
   n Xy | s Pn  Wn t k
 r   n Pn X| | } } q4 Wt j j } | rF| |	 | |  } | rF| }
 qFn  |
 | f S(   Ns   %s %s %ss#   __exprinfo_left %s __exprinfo_rightt   __exprinfo_leftt   __exprinfo_right(   t   leftRG   t   zipt   opst   comparatorst   operator_mapR1   Rm   RJ   Rn   Ro   R:   t   KeyboardInterruptRQ   RR   t   _reprcompare(   R@   t   compR   t   left_explanationt   left_resultt   opt   next_opt   next_explanationt   next_resultt	   op_symbolR?   RI   Rt   Ru   t   rcompt   res(    (    s2   /tmp/pip-build-hU8Cw8/py/py/_code/_assertionnew.pyt   visit_Compare   s8    	"	
c         C   s   t  | j t j  } g  } xC | j D]8 } |  j |  \ } } | j |  | | k r% Pq% q% W| rm d pp d } d | j |  d } | | f S(   Ns    or s    and t   (t   )(   R7   R   R.   t   Ort   valuesRG   RY   RZ   (   R@   t   boolopt   is_ort   explanationst   operandR?   Ru   R0   (    (    s2   /tmp/pip-build-hU8Cw8/py/py/_code/_assertionnew.pyt   visit_BoolOp   s    c         C   s   t  | j j } |  j | j  \ } } | | f } |  j | d  } y |  j j | d | } Wn t k
 r t	 |   n X| | f S(   Nt   __exprinfo_expr(   s   __exprinfo_expr(
   t	   unary_mapR   R1   RG   R   Rm   RJ   Rn   Ro   R:   (   R@   t   unaryt   patternt   operand_explanationt   operand_resultR?   Rt   Ru   (    (    s2   /tmp/pip-build-hU8Cw8/py/py/_code/_assertionnew.pyt   visit_UnaryOp   s    c         C   s   |  j  | j  \ } } |  j  | j  \ } } t | j j } d | | | f } d | f } |  j |  }	 y" |  j j |	 d | d | }
 Wn t	 k
 r t
 |   n X| |
 f S(   Ns
   (%s %s %s)s#   __exprinfo_left %s __exprinfo_rightR   R   (   RG   R   t   rightR   R   R1   Rm   RJ   Rn   Ro   R:   (   R@   t   binopR   R   t   right_explanationt   right_resultt   symbolR?   RI   Rt   Ru   (    (    s2   /tmp/pip-build-hU8Cw8/py/py/_code/_assertionnew.pyt   visit_BinOp   s    	
c         C   s  |  j  | j  \ } } g  } i | d 6} g  } x] | j D]R } |  j  |  \ } }	 d t |  f }
 |	 | |
 <| j |
  | j |  q; Wx{ | j D]p } |  j  | j  \ } }	 d t |  f }
 |	 | |
 <d | j } | j | |
 f  | j | | f  q W| j rk|  j  | j  \ } }	 d }
 |	 | |
 <| j d |
 f  | j d | f  n  | j	 r|  j  | j	  \ } }	 d }
 |	 | |
 <| j d |
 f  | j d | f  n  d j
 |  } d	 | | f } d j
 |  } d
 | f } |  j |  } y |  j j | |  } Wn t k
 rIt |   n Xd } |  j j |  } | | | | f } | | f S(   Nt   __exprinfo_funcs   __exprinfo_%ss   %s=%%st   __exprinfo_stars   *%st   __exprinfo_kwdss   **%ss   , s   %s(%s)s   __exprinfo_func(%s)s   %s
{%s = %s
}(   RG   t   funct   argst   lenRY   t   keywordsR\   t   argt   starargst   kwargsRZ   Rm   RJ   Rn   Ro   R:   Rp   (   R@   t   callt   func_explanationR   t   arg_explanationst   nst	   argumentsR   t   arg_explanationt
   arg_resultt   arg_namet   keywordt   keyword_sourcet   args_explainedR?   R   RI   Rt   Ru   R   t   rep(    (    s2   /tmp/pip-build-hU8Cw8/py/py/_code/_assertionnew.pyt
   visit_Call   sT    

	
	
c         C   sX   d } | | j  | j  f } |  j |  } y |  j j |  SWn t k
 rS t SXd  S(   Ns*   %r not in globals() and %r not in locals()(   R|   Rm   RJ   Rn   Ro   R}   (   R@   R0   R   RI   Rt   (    (    s2   /tmp/pip-build-hU8Cw8/py/py/_code/_assertionnew.pyt   _is_builtin_name  s    c         C   sr  t  | j t j  s" |  j |  S|  j | j  \ } } d | | j f } d | j f } |  j |  } y |  j	 j
 | d | } Wn t k
 r t |   n Xd |  j	 j |  |  j	 j |  | | j f } d } | | j f } |  j |  } y |  j	 j
 | d | } Wn t k
 r3t } n X| rh|  j	 j |  }	 d }
 |
 |	 |	 | f } n  | | f S(   Ns   %s.%ss   __exprinfo_expr.%sR   s   %s
{%s = %s.%s
}s.   %r in getattr(__exprinfo_expr, '__dict__', {})s   %s
{%s = %s
}(   R7   t   ctxR.   t   LoadRv   RG   R\   t   attrRm   RJ   Rn   Ro   R:   Rp   t   True(   R@   R   t   source_explanationt   source_resultR?   RI   Rt   Ru   t   from_instanceR   R   (    (    s2   /tmp/pip-build-hU8Cw8/py/py/_code/_assertionnew.pyt   visit_Attribute  s2    
c         C   s   |  j  | j  \ } } | j d  rF | j d  rF | d d !} n  d | f } | s y
 t  Wq t k
 r t |   q Xn  | | f S(   Ns   False
{False =s   
i   is	   assert %s(   RG   t   testR[   t   endswithR   Ro   R:   (   R@   t   assrtt   test_explanationt   test_resultR?   (    (    s2   /tmp/pip-build-hU8Cw8/py/py/_code/_assertionnew.pyt   visit_Assert8  s    
c   	      C   s   |  j  | j  \ } } d | f } t j d t j   d | j j d | j j } t j | j | d | j d | j } t j	 | g  } |  j
 | d  } y |  j j | d | Wn t k
 r t |   n X| | f S(   Ns   ... = %sR   t   linenot
   col_offsetRk   (   RG   R\   R.   R   R   R   R   R   t   targetsRq   Rm   RJ   Rr   Ro   R:   (	   R@   t   assignt   value_explanationt   value_resultR?   R0   t
   new_assignRL   Rt   (    (    s2   /tmp/pip-build-hU8Cw8/py/py/_code/_assertionnew.pyt   visit_AssignE  s    (   RB   RC   RD   RA   Rv   Rm   Ry   R{   R   R   R   R   R   R   R   R   R   R   (    (    (    s2   /tmp/pip-build-hU8Cw8/py/py/_code/_assertionnew.pyRF   n   s    										,				(   i   i   i   (   R   R   R   s   LambdaR   s   DictR	   R
   R   R   R   R   R   R   R   R   s   NameR   R   (   R   R   R   R   s   AssignR   R   R   R   R   R    R!   R"   R#   R$   R%   R&   R'   R(   R)   R*   R+   s   Continue(6   RD   R<   R.   RQ   t   py._code.assertionR    R   t   platformR[   t   version_infot   _exprst   _stmtst   setR2   R5   R4   R6   Ro   R:   R}   RO   RP   RV   RH   t   BitOrt   BitXort   BitAndt   LShiftt   RShiftt   Addt   Subt   Multt   Divt   FloorDivt   Modt   Eqt   NotEqt   Ltt   LtEt   Gtt   GtEt   Powt   Ist   IsNott   Int   NotInR   t   Nott   Invertt   USubt   UAddR   t   NodeVisitorRF   (    (    (    s2   /tmp/pip-build-hU8Cw8/py/py/_code/_assertionnew.pyt   <module>   sh   !      				























