ó
\K]c           @@  s6  d  d l  m Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l m Z d  d l	 m
 Z
 d d l m Z d e j f d „  ƒ  YZ e ƒ  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z e j r&e j d ƒ Z e j e j ƒ e j ƒ  g e _ e Z e Z n e Z e Z d S(   i    (   t   absolute_importN(   t   wraps(   t   chaini   (   t   configt   TLSc           B@  s   e  Z d  Z d „  Z RS(   sG   Use a subclass to properly initialize the TLS variables in all threads.c         C@  s   t  |  _ d |  _ d  S(   Ni    (   t   Falset   tracingt   indent(   t   self(    (    s,   lib/python2.7/site-packages/numba/tracing.pyt   __init__   s    	(   t   __name__t
   __module__t   __doc__R	   (    (    (    s,   lib/python2.7/site-packages/numba/tracing.pyR      s   c         C@  s<  t  |  d d
 ƒ } t  |  d d
 ƒ } t  |  d d
 ƒ } d
 } | rN | j } ng t | j ƒ rƒ | j d d k rƒ | d j j } n2 t | j ƒ rµ | j d d k rµ | d j } n  | r2g  } | rð | d k rð | j | ƒ | j d ƒ n  | r| j | ƒ | j d ƒ n  | j | ƒ d	 j | ƒ } n  | d
 f S(   s7   Return function meta-data in a tuple.

    (name, type)R   R
   t   __self__i    R   t   clst   __main__t   .t    N(   t   getattrt   NoneR
   t   lent   argst	   __class__t   appendt   join(   t   funct   specR   t   modulet   nameR   t   cnamet   qname(    (    s,   lib/python2.7/site-packages/numba/tracing.pyt   find_function_info   s*    ""c         C@  s@   d } t  |  ƒ } t | ƒ | k r8 | |  d | d S| Sd  S(   Ni@  s   ...iÿÿÿÿ(   t   reprR   (   t   valuet   MAX_SIZEt   s(    (    s,   lib/python2.7/site-packages/numba/tracing.pyt   chop3   s
    c         C@  sr  t  ƒ  } | j r> t  t | j t | j ƒ | j ƒ ƒ } n  | j | ƒ | j t t | j t | ƒ  | ƒ ƒ ƒ g  | j D] } d | | j | ƒ f ^ q~ } g  | t | ƒ D] } t | ƒ ^ q´ } g  t	 | j
 ƒ  ƒ D] } d | | | f ^ qß }	 d j g  t | | |	 ƒ D] }
 |
 r|
 ^ qƒ } d t j d |  d | d g } d t j d |  g } | | f S(   Ns   %s=%rs   , s   >> t    t   (t   )s   << (   t   dictt   defaultst   zipR   R   t   updatet   listt   popt   strt   sortedt   keysR   R   t   tlsR   (   t   fnameR   R   t   kwdst   valuest   at
   positionalt	   anonymoust   kt   keywordst   ft   paramst   entert   leave(    (    s,   lib/python2.7/site-packages/numba/tracing.pyt   create_events;   s    		,)/)34c          O@  sÓ  | j  d t ƒ } d „  } t |  ƒ r1 |  d p4 d } | rt ‚ t j | ƒ rÊ x9 t j | t j ƒ D]" \ } } t	 | | | | ƒ ƒ qh Wx‡ t j | t j
 ƒ D] \ } } t | d | |  Œq¤ Wqt j
 | ƒ rx< t j | d „  ƒ D]" \ } } t	 | | | | ƒ ƒ qï Wqn  t | ƒ s?t | ƒ t t f k rI| | ƒ St | ƒ t k rËd \ } }	 }
 | j r…| | j ƒ } n  | j r | | j ƒ }	 n  | j r»| | j ƒ }
 n  t | |	 |
 ƒ S| Sd S(   sà   Function decorator to trace a function's entry and exit.

    *args: categories in which to trace this function. Example usage:

    @trace
    def function(...):...

    @trace('mycategory')
    def function(...):...


    t	   recursivec         @  sý   d  ‰ t j d ƒ ‰ ‡  ‡ ‡ f d †  } d  } d „  } t ˆ  ƒ t k rl t ˆ  ƒ } ˆ  j t ƒ j ‰  nK t ˆ  ƒ t k rœ t ˆ  ƒ } ˆ  j t ƒ ‰  n t ˆ  ƒ t	 k r· t
 ‚ n  t j d k rØ t j ˆ  ƒ ‰ n t j ˆ  ƒ ‰ | t ˆ  ƒ | ƒ ƒ S(   Nt   tracec          @  sï  ˆ j  t j ƒ s t j r) ˆ  |  | Ž  St ˆ  ˆ |  ƒ \ } } zt t _ t | ˆ |  | ƒ \ } } zLˆ j d j	 | ƒ ƒ t j
 d 7_
 y- z t t _ ˆ  |  | Ž  } Wd  t t _ XWnÄ t j ƒ  \ } } }	 | j d ƒ | j }
 |
 d k r| j |
 ƒ | j d ƒ n  | j | j ƒ | j rp| j d ƒ | j d j	 d „  | j Dƒ ƒ ƒ | j d	 ƒ n | j d
 ƒ ‚  n0 X| d  k	 r³| j d ƒ | j t | ƒ ƒ n  Wd  t j
 d 8_
 ˆ j d j	 | ƒ ƒ XWd  t t _ X| S(   NR   i   s    => exception thrown
	raise R   R   R&   s   , c         s@  s   |  ] } t  | ƒ Vq d  S(   N(   R$   (   t   .0t   v(    (    s,   lib/python2.7/site-packages/numba/tracing.pys	   <genexpr>|   s    R'   s   ()s    -> (   t   isEnabledFort   loggingt   INFOR1   R   R   t   TrueR>   t   infoR   R   R   t   syst   exc_infoR   R   R
   R   R   R$   (   R   R3   R2   t   ftypeR<   R=   t   resultt   typeR!   t	   tracebackt   mname(   R   t   loggerR   (    s,   lib/python2.7/site-packages/numba/tracing.pyt   wrapper_   sF    				#
c         S@  s   |  S(   N(    (   t   x(    (    s,   lib/python2.7/site-packages/numba/tracing.pyt   <lambda>Ž   R   i   i    (   i   i    (   R   RD   t	   getLoggerRL   t   classmethodt   __get__RF   t   __func__t   staticmethodt   propertyt   NotImplementedErrorR   t	   PYVERSIONt   inspectt   getfullargspect
   getargspecR   (   R   RP   RK   t   rewrap(    (   R   RO   R   s,   lib/python2.7/site-packages/numba/tracing.pyt	   decorator[   s"    .		i    c         S@  s   t  j |  ƒ p t  j |  ƒ S(   N(   R[   t
   isfunctiont   ismethod(   RQ   (    (    s,   lib/python2.7/site-packages/numba/tracing.pyRR   ¬   s   N(   NNN(   t   getR   R   R   RY   R[   t   ismodulet
   getmembersR`   t   setattrt   isclasst   dotracet   callableRL   RT   RW   RX   t   fgett   fsett   fdel(   R   R3   R?   R_   t   arg0t   nR:   t   ct   pgett   psett   pdel(    (    s,   lib/python2.7/site-packages/numba/tracing.pyRg   L   s2    	G""" $
			c          O@  s[   d „  } t  |  ƒ r |  d p" d } t | ƒ sI t | ƒ t t f k rS | | ƒ S| Sd S(   s)   Just a no-op in case tracing is disabled.c         S@  s   |  S(   N(    (   R   (    (    s,   lib/python2.7/site-packages/numba/tracing.pyR_   Ä   s    i    N(   R   R   Rh   RL   RT   RW   (   R   R3   R_   Rl   (    (    s,   lib/python2.7/site-packages/numba/tracing.pyt   notraceÂ   s
    	$
c         C@  s?   d t  j d |  g }  t j d ƒ } | j d j |  ƒ ƒ d  S(   Ns   == R%   R@   R   (   R1   R   RD   RS   RG   R   (   t   msgRO   (    (    s,   lib/python2.7/site-packages/numba/tracing.pyt   doeventÍ   s    c         C@  s   d  S(   N(    (   Rs   (    (    s,   lib/python2.7/site-packages/numba/tracing.pyt   noeventÒ   s    R@   (    t
   __future__R    RD   RH   t   typest	   threadingR[   t	   functoolsR   t	   itertoolsR   R   R   t   localR   R1   R   R$   R>   Rg   Rr   Rt   Ru   t   TRACERS   RO   t   setLevelRE   t   StreamHandlert   handlersR@   t   event(    (    (    s,   lib/python2.7/site-packages/numba/tracing.pyt   <module>   s2   					v					