ó
cœt\c           @   s¶  d  Z  d d l Z d d l Z d d l Z d d l m Z m Z d „  Z d „  Z d e	 f d „  ƒ  YZ
 e d „ Z d d	 „ Z d
 „  Z i d e j 6d e j 6d e j 6d e j 6d e j 6d e j 6d e j 6d e j 6d e j 6d e j 6d e j 6d e j 6d e j 6d e j 6d e j 6d e j 6d e j  6d e j! 6d e j" 6d e j# 6d e j$ 6d  e j% 6Z& i d! e j' 6d" e j( 6d# e j) 6d$ e j* 6Z+ d% e j, f d& „  ƒ  YZ- d S('   s‚   
Find intermediate evalutation results in assert statements through builtin AST.
This should replace _assertionold.py eventually.
iÿÿÿÿN(   t   _format_explanationt   BuiltinAssertionErrorc         C   s   t  |  t j ƒ S(   N(   t
   isinstancet   astt   expr(   t   node(    (    s5   lib/python2.7/site-packages/py/_code/_assertionnew.pyt   _is_ast_expr   s    c         C   s   t  |  t j ƒ S(   N(   R   R   t   stmt(   R   (    (    s5   lib/python2.7/site-packages/py/_code/_assertionnew.pyt   _is_ast_stmt   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   (    (    s5   lib/python2.7/site-packages/py/_code/_assertionnew.pyt   __init__   s    (   t   __name__t
   __module__t   __doc__R   (    (    (    s5   lib/python2.7/site-packages/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(    (    s5   lib/python2.7/site-packages/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	   _getframeR   (   t   offending_lineR   (    (    s5   lib/python2.7/site-packages/py/_code/_assertionnew.pyt   run(   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   joinR   t
   startswith(   R   R   t   valuet   linest   text(    (    s5   lib/python2.7/site-packages/py/_code/_assertionnew.pyR   -   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   +%sR   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(   R   (   R   R   (    (    s5   lib/python2.7/site-packages/py/_code/_assertionnew.pyR   `   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(   R   R   t
   Expressiont   _compileR   t   evalt	   ExceptionR	   t   reprR   t   Modulet   exec_R   t   AssertionError(   R   R   R   t   cot   resultR   (    (    s5   lib/python2.7/site-packages/py/_code/_assertionnew.pyt   generic_visitc   s$    
R=   c         C   s   t  | d | ƒ S(   Ns   <assertion interpretation>(   t   compile(   R   R   t   mode(    (    s5   lib/python2.7/site-packages/py/_code/_assertionnew.pyR<   y   s    c         C   s   |  j  | j ƒ S(   N(   R   R+   (   R   R   (    (    s5   lib/python2.7/site-packages/py/_code/_assertionnew.pyt
   visit_Expr|   s    c         C   s%   x | j  D] } |  j | ƒ q
 Wd  S(   N(   t   bodyR   (   R   R   R   (    (    s5   lib/python2.7/site-packages/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()(   RE   t   idR<   R   R=   R>   t   False(   R   t   nameR   RD   R   RC   t   local(    (    s5   lib/python2.7/site-packages/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   leftR   t   zipt   opst   comparatorst   operator_mapt	   __class__R<   R   R=   R>   R	   t   KeyboardInterruptR    R!   t   _reprcompare(   R   t   compRR   t   left_explanationt   left_resultt   opt   next_opt   next_explanationt   next_resultt	   op_symbolR   R   RC   RD   t   rcompt   res(    (    s5   lib/python2.7/site-packages/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   )(   R   R]   R   t   Ort   valuesR   R(   R)   (   R   t   boolopt   is_ort   explanationst   operandR   RD   RM   (    (    s5   lib/python2.7/site-packages/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(   Rn   (
   t	   unary_mapR]   RW   R   Rl   R<   R   R=   R>   R	   (   R   t   unaryt   patternt   operand_explanationt   operand_resultR   RC   RD   (    (    s5   lib/python2.7/site-packages/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_rightRP   RQ   (   R   RR   t   rightRV   R]   RW   R<   R   R=   R>   R	   (   R   t   binopR[   R\   t   right_explanationt   right_resultt   symbolR   R   RC   RD   (    (    s5   lib/python2.7/site-packages/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
}(   R   t   funct   argst   lenR(   t   keywordsR+   t   argt   starargst   kwargsR)   R<   R   R=   R>   R	   R?   (   R   t   callt   func_explanationR~   t   arg_explanationst   nst	   argumentsR‚   t   arg_explanationt
   arg_resultt   arg_namet   keywordt   keyword_sourcet   args_explainedR   R   R   RC   RD   Rq   t   rep(    (    s5   lib/python2.7/site-packages/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()(   RK   R<   R   R=   R>   RL   (   R   RM   Rq   R   RC   (    (    s5   lib/python2.7/site-packages/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.%sRn   s   %s
{%s = %s.%s
}s.   %r in getattr(__exprinfo_expr, '__dict__', {})s   %s
{%s = %s
}(   R   t   ctxR   t   LoadRE   R   R+   t   attrR<   R   R=   R>   R	   R?   t   True(   R   R•   t   source_explanationt   source_resultR   R   RC   RD   t   from_instanceR   Rq   (    (    s5   lib/python2.7/site-packages/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   iþÿÿÿs	   assert %s(   R   t   testR*   t   endswithR   R>   R	   (   R   t   assrtt   test_explanationt   test_resultR   (    (    s5   lib/python2.7/site-packages/py/_code/_assertionnew.pyt   visit_Assert'  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   ... = %sRn   t   linenot
   col_offsetR:   (   R   R+   R   t   NameR”   R¡   R¢   t   Assignt   targetsR@   R<   R   RA   R>   R	   (	   R   t   assignt   value_explanationt   value_resultR   RM   t
   new_assignR   RC   (    (    s5   lib/python2.7/site-packages/py/_code/_assertionnew.pyt   visit_Assign4  s    (   R   R   R   R   RE   R<   RH   RJ   RO   Rd   Rm   Rt   Rz   R‘   R’   Rš   R    Rª   (    (    (    s5   lib/python2.7/site-packages/py/_code/_assertionnew.pyR   ]   s    										,				(.   R   R   R   R    t   py._code.assertionR    R   R   R   R>   R	   RL   R   R   R%   R   t   BitOrt   BitXort   BitAndt   LShiftt   RShiftt   Addt   Subt   Multt   Divt   FloorDivt   Modt   Eqt   NotEqt   Ltt   LtEt   Gtt   GtEt   Powt   Ist   IsNott   Int   NotInRV   t   Nott   Invertt   USubt   UAddRo   t   NodeVisitorR   (    (    (    s5   lib/python2.7/site-packages/py/_code/_assertionnew.pyt   <module>   sN   			























