ó
\K]c           @   st   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   irt   errorsi   (   t   register_rewritet   Rewrites   before-inferencet   RewriteConstGetitemsc           B   s    e  Z d  Z d „  Z d „  Z RS(   s¶   
    Rewrite IR expressions of the kind `getitem(value=arr, index=$constXX)`
    where `$constXX` is a known constant as
    `static_getitem(value=arr, index=<constant value>)`.
    c         C   s   i  |  _  } | |  _ xf | j d d ƒ D]R } | j d k r) y | j | j ƒ } Wn t j k
 rm q) n X| | | <q) q) Wt | ƒ d k S(   Nt   opt   getitemi    (	   t   getitemst   blockt
   find_exprsR   t   infer_constantt   indexR   t   ConstantInferenceErrort   len(   t   selft   func_irR   t   typemapt	   calltypesR   t   exprt   const(    (    s<   lib/python2.7/site-packages/numba/rewrites/static_getitem.pyt   match   s    	c      
   C   sÒ   |  j  j ƒ  } | j ƒ  x² |  j  j D]¤ } t | t j ƒ r½ | j } | |  j k r½ |  j | } t j	 j
 d | j d | d | j d | j ƒ } t j d | d | j d | j ƒ } q½ n  | j | ƒ q& W| S(   sC   
        Rewrite all matching getitems as static_getitems.
        t   valueR   t	   index_vart   loct   target(   R   t   copyt   cleart   bodyt
   isinstanceR    t   AssignR   R   t   Exprt   static_getitemR   R   R   t   append(   R   t	   new_blockt   instR   R   t   new_expr(    (    s<   lib/python2.7/site-packages/numba/rewrites/static_getitem.pyt   apply   s    
		(   t   __name__t
   __module__t   __doc__R   R$   (    (    (    s<   lib/python2.7/site-packages/numba/rewrites/static_getitem.pyR      s   	t   RewriteConstSetitemsc           B   s    e  Z d  Z d „  Z d „  Z RS(   sÁ   
    Rewrite IR statements of the kind `setitem(target=arr, index=$constXX, ...)`
    where `$constXX` is a known constant as
    `static_setitem(target=arr, index=<constant value>, ...)`.
    c         C   s}   i  |  _  } | |  _ xT | j t j ƒ D]@ } y | j | j ƒ } Wn t j k
 r^ q) n X| | | <q) Wt	 | ƒ d k S(   Ni    (
   t   setitemsR   t
   find_instsR    t   SetItemR
   R   R   R   R   (   R   R   R   R   R   R)   R"   R   (    (    s<   lib/python2.7/site-packages/numba/rewrites/static_getitem.pyR   9   s    	c         C   s”   |  j  j ƒ  } | j ƒ  xt |  j  j D]f } | |  j k r |  j | } t j | j | | j | j	 | j
 ƒ } | j | ƒ q& | j | ƒ q& W| S(   sC   
        Rewrite all matching setitems as static_setitems.
        (   R   R   R   R   R)   R    t   StaticSetItemR   R   R   R   R    (   R   R!   R"   R   t   new_inst(    (    s<   lib/python2.7/site-packages/numba/rewrites/static_getitem.pyR$   G   s    
(   R%   R&   R'   R   R$   (    (    (    s<   lib/python2.7/site-packages/numba/rewrites/static_getitem.pyR(   1   s   	N(   t   numbaR    R   t    R   R   R   R(   (    (    (    s<   lib/python2.7/site-packages/numba/rewrites/static_getitem.pyt   <module>   s
   +