
    |h                     f   S SK r S SKrS SKrS SKrS SKJr  S SKJr  S SKJ	r	   " S S\R                  5      r\" 5       rS rS rS	 rS
 rS rS rS r\	R(                  (       aI  \R*                  " S5      r\R/                  \R0                  5        \R2                  " 5       /\l        \r\rg\r\rg)    N)wraps)chain)configc                       \ rS rSrSrS rSrg)TLS   zGUse a subclass to properly initialize the TLS variables in all threads.c                      SU l         SU l        g )NFr   )tracingindent)selfs    L/home/james-whalen/.local/lib/python3.13/site-packages/numba/core/tracing.py__init__TLS.__init__   s        )r   r
   N)__name__
__module____qualname____firstlineno____doc__r   __static_attributes__ r   r   r   r      s
    Qr   r   c                    [        U SS5      n[        U SS5      n[        U SS5      nSnU(       a  UR                  nO[        UR                  5      (       a-  UR                  S   S:X  a  US   R                  R                  nO<[        UR                  5      (       a"  UR                  S   S:X  a  US   R                  nU(       a|  / nU(       a(  US:w  a"  UR                  U5        UR                  S	5        U(       a"  UR                  U5        UR                  S	5        UR                  U5        S
R                  U5      nUS4$ )z3Return 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                 Z    Sn[        U 5      n[        U5      U:  a  US U S-   US   -   $ U$ )Ni@  z...)reprr   )valueMAX_SIZEss      r   chopr1   6   s;    HUA
1v(|e#ae++r   c                 T   [        5       nUR                  (       a@  [        [        UR                  [	        UR                  5      * S  UR                  5      5      nUR                  U5        UR                  [        [        UR                  S [	        U5       U5      5      5        UR                   Vs/ s H  oU< SUR                  U5      < 3PM     nnU[	        U5      S   Vs/ s H  n[        U5      PM     nn[        UR                  5       5       Vs/ s H  o< SXH   < 3PM     n	nSR                  [        XgU	5       V
s/ s H  o(       d  M  U
PM     sn
5      nS[        R                  S-  U SUS/nS[        R                  S-  U /nX4$ s  snf s  snf s  snf s  sn
f )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_eventsrN   ?   sR   VF}}c$))S%7$7$9:DMMJK
MM$
MM$s499[s4y1489:8<		B	1Q

1.	JB!%c*o&7!89!8AQ!8I9282GH2GQ1fi(2GHHYY5#IO#IaQ#IOPFCJJ$eS&#>ECJJ$e,E< C9HOs   5!F(FF 	
F%F%c                  
   UR                  SS5      nS n[        U 5      =(       a    U S   =(       d    SnU(       a  [        e[        U5      (       d  [        U5      [        [        4;   a  U" U5      $ [        U[        5      (       az  Su  pn
UR                   (       a  U" UR                   5      nUR"                  (       a  U" UR"                  5      n	UR$                  (       a  U" UR$                  5      n
[        XU
5      $ U$ )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                   ^ ^^ S m[         R                  " S5      mU UU4S jnS n[        T [        5      (       a'  [	        T 5      nT R                  S5      R                  m OM[        T [        5      (       a  [	        T 5      nT R                  S5      m O[        T [        5      (       a  [        e[        R                  " T 5      mU" [        T 5      " U5      5      $ )Ntracec                    > TR                  [        R                  5      (       a  [        R                  (       a  T" U 0 UD6$ [        TTU 5      u  p# S[        l        [        UTX5      u  pE TR                  SR                  U5      5        [        =R                  S-  sl	          S[        l        T" U 0 UD6nS[        l         Ub+  UR                  S5        UR                  [        U5      5        [        =R                  S-  sl	        TR                  SR                  U5      5         S[        l        U$ ! S[        l        f = f!   [        R                  " 5       u  pxn	UR                  S5        UR                  n
U
S:w  a"  UR                  U
5        UR                  S5        UR                  UR                  5        UR                   (       aT  UR                  S	5        UR                  S
R                  S UR                    5       5      5        UR                  S5        e UR                  S5        e = f! [        =R                  S-  sl	        TR                  SR                  U5      5        f = f! S[        l        f = f)NTr      Fz -> z => exception thrown
	raise r   r   r6   r4   c              3   8   #    U  H  n[        U5      v   M     g 7fN)r1   ).0vs     r   	<genexpr>>dotrace.<locals>.decorator.<locals>.wrapper.<locals>.<genexpr>   s     2OJq477Js   r7   z())isEnabledForloggingINFOrA   r
   r*   rN   infor#   r   r"   r1   sysexc_infor   r   r    )r    rC   rB   ftyperL   rM   resulttyper.   	tracebackmnamer$   loggerr%   s              r   wrapper+dotrace.<locals>.decorator.<locals>.wrapperc   s   &&w||44T*T**-dD$?LE$$",UD$E0KK/JJ!OJ7/*/CK%)4%84%8F*.CK" "-!LL0!LLf6JJ!OJKK/#M3 +/CK14.Y%EF $ J.!LL/!LL-T]]3 ::!LL-!LL2OEJJ2O)OP!LL-  "LL. JJ!OJKK/#sO   I? .9I )D= <E .I 69I? =E

E C1H>>I ;I<<I? ?Jc                     U $ rV   r   )xs    r   <lambda>,dotrace.<locals>.decorator.<locals>.<lambda>   s    1r   T)r\   	getLogger
isinstanceclassmethodrc   __get____func__staticmethodpropertyNotImplementedErrorinspectgetfullargspecr   )r$   rg   rewraprf   r%   s   `  @@r   	decoratordotrace.<locals>.decorator_   s    ""7++	^  dK(($ZF<<%..Dl++$ZF<<%Dh''%%%%d+eDk'*++r   r   N)NNN)getr   rt   ru   ismodule
getmembers
isfunctionsetattrisclassdotracecallablerc   ro   rr   rn   rs   fgetfsetfdel)r    rC   rP   rx   arg0nrJ   cpgetpsetpdels              r   r   r   O   s     e,IB,H t9 a(DD!! ~~d\'BB	D(	#	# ,D99TYY'D99TYY'D99TYY'DD)) r   c                      S n[        U 5      =(       a    U S   =(       d    Sn[        U5      (       d  [        U5      [        [        4;   a  U" U5      $ U$ )z)Just a no-op in case tracing is disabled.c                     U $ rV   r   )r$   s    r   rx   notrace.<locals>.decorator   s    r   r   N)r   r   rc   ro   rr   )r    rC   rx   r   s       r   notracer      sI     t9 a(DD~~d\'BBr   c                     S[         R                  S-  U /n [        R                  " S5      nUR	                  SR                  U 5      5        g )Nz== r5   rR   r   )rA   r   r\   rm   r^   r#   )msgrf   s     r   doeventr      s;    #**s"C
(Cw'F
KKr   c                     g rV   r   )r   s    r   noeventr      s    r   rR   )ru   r\   r_   	threading	functoolsr   	itertoolsr   
numba.corer   localr   rA   r*   r1   rN   r   r   r   r   TRACErm   rf   setLevelr]   StreamHandlerhandlersrR   eventr   r   r   <module>r      s      
    )//  
e@ rj	 
<<w'F
OOGLL!,,./FOEEEEr   