
    xKg                     d   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
  G d dej                        Z e       Zd Zd Zd	 Zd
 Zd Zd Zd Ze
j*                  rI e j,                  d      Zej1                  e j2                          e j4                         ge_        eZeZyeZeZy)    N)wraps)chain)configc                       e Zd ZdZd Zy)TLSzGUse a subclass to properly initialize the TLS variables in all threads.c                      d| _         d| _        y )NFr   )tracingindent)selfs    V/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/core/tracing.py__init__zTLS.__init__   s        N)__name__
__module____qualname____doc__r    r   r   r   r   
   s
    Qr   r   c                 N   t        | dd      }t        | dd      }t        | dd      }d}|r|j                  }nwt        |j                        r,|j                  d   dk(  r|d   j                  j                  }n6t        |j                        r!|j                  d   dk(  r|d   j                  }|rqg }|r'|dk7  r"|j                  |       |j                  d	       |r"|j                  |       |j                  d	       |j                  |       d
j                  |      }|dfS )z7Return function meta-data in a tuple.

    (name, type)r   Nr   __self__r   r   cls__main__. )getattrr   lenargs	__class__appendjoin)funcspecr   modulenamer   cnameqnames           r   find_function_infor&      s   
 T<.F4T*D4T*DE 
TYYDIIaLF2Q!!**	TYYDIIaLE1Q  f
*LL LLLLLLTwwu~:r   c                 X    d}t        |       }t        |      |kD  r|d | dz   |d   z   S |S )Ni@  z...)reprr   )valueMAX_SIZEss      r   chopr-   1   s;    HUA
1v(|e#ae++r   c                 *   t               }|j                  r@t        t        |j                  t	        |j                         d  |j                              }|j                  |       |j                  t        t        |j                  d t	        |       |                   |j                  D cg c]  }|d|j                  |       }}|t	        |      d  D cg c]  }t        |       }}t        |j                               D cg c]  }|d||    }	}dj                  t        |||	      D 
cg c]  }
|
s|
	 c}
      }dt        j                  dz  | d|dg}dt        j                  dz  | g}||fS c c}w c c}w c c}w c c}
w )N=, z>>  ()z<< )dictdefaultszipr   r   updatelistpopstrsortedkeysr   r   tlsr
   )fnamer!   r   kwdsvaluesa
positional	anonymouskkeywordsfparamsenterleaves                 r   create_eventsrJ   9   sX   VF}}c$))S%7$7$89$--HI
MM$
MM$s499Zc$i0$7896:ii@i1fjjm,iJ@!%c*o&6!78!7AQ!7I806v{{}0EF0E1F1I&0EHFYY5Y#IO#IaQ#IOPFCJJ$eS&#>ECJJ$e,E%< A8FOs   0FFF;FFc                     |j                  dd      }d }t        |       xr | d   xs d}|rt        t        |      st        |      t        t        fv r ||      S t        |      t        k(  rmd\  }}	}
|j                  r ||j                        }|j                   r ||j                         }	|j"                  r ||j"                        }
t        ||	|
      S |S )zFunction 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(...):...


    	recursiveFc                     d t        j                  d       fd}d }d }t               t        k(  r't               } j	                  d      j
                   nGt               t        k(  rt               } j	                  d       nt               t        k(  rt        t        j                          | t               |            S )Ntracec                     j                  t        j                        rt        j                  r | i |S t        |       \  }}	 dt        _        t        || |      \  }}	 j                  dj                  |             t        xj                  dz  c_	        	 	 dt        _         | i |}dt        _        	 |,|j                  d       |j                  t        |             	 t        xj                  dz  c_	        j                  dj                  |             	 dt        _        |S # dt        _        w xY w#  t        j                         \  }}}	|j                  d       |j                  }
|
dk7  r"|j                  |
       |j                  d       |j                  |j                         |j                   rT|j                  d	       |j                  d
j                  d |j                   D                     |j                  d        |j                  d        xY w# t        xj                  dz  c_	        j                  dj                  |             w xY w# dt        _        w xY w)NTr      Fz -> z => exception thrown
	raise r   r   r2   r0   c              3   2   K   | ]  }t        |        y wN)r-   ).0vs     r   	<genexpr>z>dotrace.<locals>.decorator.<locals>.wrapper.<locals>.<genexpr>z   s     2OJq47Js   r3   z())isEnabledForloggingINFOr=   r	   r&   rJ   infor   r
   r   r-   sysexc_infor   r   r   )r   r?   r>   ftyperH   rI   resulttyper*   	tracebackmnamer    loggerr!   s              r   wrapperz+dotrace.<locals>.decorator.<locals>.wrapper]   s   &&w||4T*T**-dD$?LE5$$",UD$Eu0KK/JJ!OJ7/*/CK%)4%84%8F*.CK" "-!LL0!LLf6JJ!OJKK/#M3 +/CK14.eY%EF $ J.!LL/!LL-T]]3 ::!LL-!LL2OEJJ2O)OP!LL-  "LL. JJ!OJKK/#sO   
I2 '9H4 "D6 5E .H4 /9I2 6EE C+H11H4 4;I//I2 2I?c                     | S rR   r   )xs    r   <lambda>z,dotrace.<locals>.decorator.<locals>.<lambda>   s    1r   T)rW   	getLoggerr^   classmethod__get____func__staticmethodpropertyNotImplementedErrorinspectgetfullargspecr   )r    rb   r]   rewrapra   r!   s   `   @@r   	decoratorzdotrace.<locals>.decoratorY   s    ""7++	\  :$$ZF<<%..D$Z<'$ZF<<%D$Z8#%%%%d+keDk'*++r   r   N)NNN)getr   rl   rm   ismodule
getmembers
isfunctionsetattrisclassdotracecallabler^   rg   rj   rk   fgetfsetfdel)r   r?   rL   rp   arg0nrF   cpgetpsetpdels              r   rw   rw   J   s     e,IB,H t9 a(DD!! ~d\'BB	dx	 ,dD99TYY'D99TYY'D99TYY'DdD)) r   c                      d }t        |       xr | d   xs d}t        |      st        |      t        t        fv r ||      S |S )z)Just a no-op in case tracing is disabled.c                     | S rR   r   )r    s    r   rp   znotrace.<locals>.decorator   s    r   r   N)r   rx   r^   rg   rj   )r   r?   rp   r|   s       r   notracer      sE    t9 a(DD~d\'BBr   c                     dt         j                  dz  | g} t        j                  d      }|j	                  dj                  |              y )Nz== r1   rN   r   )r=   r
   rW   rf   rY   r   )msgra   s     r   doeventr      s;    #**s"C
(Cw'F
KKr   c                      y rR   r   )r   s    r   noeventr      s    r   rN   )rW   rZ   types	threadingrm   	functoolsr   	itertoolsr   
numba.corer   localr   r=   r&   r-   rJ   rw   r   r   r   TRACErf   ra   setLevelrX   StreamHandlerhandlersrN   eventr   r   r   <module>r      s     
      )//  
e>"qf	
	 
<<Ww'F
OOGLL!,w,,./FOEEEEr   