ó
\K]c           @  s„   d  d l  m Z d  d l m Z m Z d d l m Z m Z e d ƒ d e f d „  ƒ  Yƒ Z e d ƒ d e f d	 „  ƒ  Yƒ Z	 d
 S(   iÿÿÿÿ(   t   print_function(   t   irt   errorsi   (   t   register_rewritet   Rewrites   before-inferencet   RewritePrintCallsc           B  s    e  Z d  Z d „  Z d „  Z RS(   sU   
    Rewrite calls to the print() global function to dedicated IR print() nodes.
    c   
      C  sæ   i  |  _  } | |  _ x½ | j t j ƒ D]© } t | j t j ƒ r) | j j d k r) | j } y | j	 | j
 ƒ } Wn t j k
 rŽ q) n X| t k rÒ | j rÂ d }	 t j |	 | j ƒ ‚ n  | | | <qÒ q) q) Wt | ƒ d k S(   Nt   callsK   Numba's print() function implementation does not support keyword arguments.i    (   t   printst   blockt
   find_instsR   t   Assignt
   isinstancet   valuet   Exprt   opt   infer_constantt   funcR   t   ConstantInferenceErrort   printt   kwst   UnsupportedErrort   loct   len(
   t   selft   func_irR   t   typemapt	   calltypesR   t   instt   exprt   calleet   msg(    (    s6   lib/python2.7/site-packages/numba/rewrites/ir_print.pyt   match   s    	'		c         C  s×   |  j  j ƒ  } | j ƒ  x· |  j  j D]© } | |  j k rÂ |  j | } t j d | j d | j d | j	 ƒ } | j
 | ƒ t j d t j d d | j	 ƒd | j d | j	 ƒ } | j
 | ƒ q& | j
 | ƒ q& W| S(   s{   
        Rewrite `var = call <print function>(...)` as a sequence of
        `print(...)` and `var = const(None)`.
        t   argst   varargR   R   t   targetN(   R   t   copyt   cleart   bodyR   R   t   PrintR    R!   R   t   appendR
   t   Constt   NoneR"   (   R   t	   new_blockR   R   t
   print_nodet   assign_node(    (    s6   lib/python2.7/site-packages/numba/rewrites/ir_print.pyt   apply!   s    
!	(   t   __name__t
   __module__t   __doc__R   R-   (    (    (    s6   lib/python2.7/site-packages/numba/rewrites/ir_print.pyR      s   	t   DetectConstPrintArgumentsc           B  s    e  Z d  Z d „  Z d „  Z RS(   s?   
    Detect and store constant arguments to print() nodes.
    c   
      C  sµ   i  |  _  } | |  _ xŒ | j t j ƒ D]x } | j  r> q) n  x` t | j ƒ D]O \ } } y | j | ƒ }	 Wn t j	 k
 r† qN n X|	 | j
 | i  ƒ | <qN Wq) Wt | ƒ d k S(   Ni    (   t   constsR   R	   R   R&   t	   enumerateR    R   R   R   t
   setdefaultR   (
   R   R   R   R   R   R2   R   t   idxt   vart   const(    (    s6   lib/python2.7/site-packages/numba/rewrites/ir_print.pyR   =   s    		c         C  s@   x6 |  j  j D]( } | |  j k r |  j | | _ q q W|  j  S(   sC   
        Store detected constant arguments on their nodes.
        (   R   R%   R2   (   R   R   (    (    s6   lib/python2.7/site-packages/numba/rewrites/ir_print.pyR-   M   s    (   R.   R/   R0   R   R-   (    (    (    s6   lib/python2.7/site-packages/numba/rewrites/ir_print.pyR1   7   s   	N(
   t
   __future__R    t   numbaR   R   t    R   R   R   R1   (    (    (    s6   lib/python2.7/site-packages/numba/rewrites/ir_print.pyt   <module>   s   /