U
    9%e                     @   s   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 dejZe Zdd Zd	d
 Zdd Zdd Zdd Zdd Zdd Ze
jre dZee j e  ge_eZeZneZeZdS )    N)wraps)chain)configc                   @   s   e Zd ZdZdd ZdS )TLSzGUse a subclass to properly initialize the TLS variables in all threads.c                 C   s   d| _ d| _d S )NFr   )tracingindent)self r	   Q/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/numba/core/tracing.py__init__   s    zTLS.__init__N)__name__
__module____qualname____doc__r   r	   r	   r	   r
   r   
   s   r   c                 C   s   t | dd}t | dd}t | dd}d}|r4|j}nHt|jrZ|jd dkrZ|d jj}n"t|jr||jd dkr||d j}|rg }|r|dkr|| |d	 |r|| |d	 || d
|}|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   cnameZqnamer	   r	   r
   find_function_info   s*    






r    c                 C   s8   d}t | }t||kr0|d | d |d  S |S d S )Ni@  z...)reprr   )valueZMAX_SIZEsr	   r	   r
   chop1   s
    r%   c           
         s   t   |jr.t t|jt|j d  |j  |  tt|jd t| |  fdd|jD }dd |t|d  D } fddt  D }d	dd t
|||D }dtjd | d	|d
g}dtjd | g}	||	fS )Nc                    s   g | ]}d |  |f qS z%s=%r)pop.0avaluesr	   r
   
<listcomp>@   s     z!create_events.<locals>.<listcomp>c                 S   s   g | ]}t |qS r	   )strr(   r	   r	   r
   r-   A   s     c                    s   g | ]}d | | f qS r&   r	   )r)   kr+   r	   r
   r-   B   s     , c                 S   s   g | ]}|r|qS r	   r	   )r)   fr	   r	   r
   r-   C   s      z>>  ()z<< )dictdefaultszipr   r   updatelistsortedkeysr   r   tlsr   )
fnamer   r   kwds
positionalZ	anonymouskeywordsparamsenterleaver	   r+   r
   create_events9   s    "
"rD   c                  O   sF  | dd}dd }t| r$| d p&d}|rtt|rt|tjD ]\}}t|||| qHt|tjD ]\}}t	|f| d|i qpn4t|rt|dd D ]\}}t|||| qt
|st|ttfkr||S t|tkr>d	\}}	}
|jr||j}|jr ||j}	|jr2||j}
t||	|
S |S d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                    s   d t d fdd}d }dd }t tkrLt } dj n0t tkrlt } d nt tkr|tt	
 |t |S )Ntracec                     s|   tjrtjr | |S t | \}}z@dt_t|| |\}}z d	| t jd7  _z"zdt_ | |}W 5 dt_X W n   t
 \}}}	|d |j}
|
dkr||
 |d ||j |jr|d |d		d
d |jD  |d n
|d  Y n$X |d k	rH|d |t| W 5 t jd8  _d	| X W 5 dt_X |S )NFT   r   z => exception thrown
	raise r   r   r3   r0   c                 s   s   | ]}t |V  qd S N)r%   )r)   vr	   r	   r
   	<genexpr>z   s     z>dotrace.<locals>.decorator.<locals>.wrapper.<locals>.<genexpr>r4   z()z -> )isEnabledForloggingINFOr<   r   r    rD   r   infor   sysexc_infor   r   r   r   r%   )r   r>   r=   ZftyperB   rC   resulttyper#   	tracebackZmnamer   loggerr   r	   r
   wrapper]   sF    







z+dotrace.<locals>.decorator.<locals>.wrapperc                 S   s   | S rH   r	   xr	   r	   r
   <lambda>       z,dotrace.<locals>.decorator.<locals>.<lambda>T)rL   	getLoggerrR   classmethod__get____func__staticmethodpropertyNotImplementedErrorinspectgetfullargspecr   )r   rV   rQ   Zrewrapr	   rT   r
   	decoratorY   s    
.
zdotrace.<locals>.decoratorr   Nc                 S   s   t | pt | S rH   )rb   
isfunctionismethodrW   r	   r	   r
   rY      s   
zdotrace.<locals>.<lambda>)NNN)getr   ra   rb   ismodule
getmembersre   setattrisclassdotracecallablerR   r\   r_   r`   fgetfsetfdel)r   r>   rE   rd   arg0nr1   cZpgetZpsetZpdelr	   r	   r
   rl   J   s2    D





rl   c                  O   sD   dd }t | r| d pd}t|s4t|ttfkr<||S |S dS )z)Just a no-op in case tracing is disabled.c                 S   s   | S rH   r	   )r   r	   r	   r
   rd      s    znotrace.<locals>.decoratorr   N)r   rm   rR   r\   r_   )r   r>   rd   rq   r	   r	   r
   notrace   s
    rt   c                 C   s.   dt jd | g} td}|d|  d S )Nz== r2   rF   r   )r<   r   rL   r[   rN   r   )msgrU   r	   r	   r
   doevent   s    
rv   c                 C   s   d S rH   r	   )ru   r	   r	   r
   noevent   s    rw   rF   )rL   rO   types	threadingrb   	functoolsr   	itertoolsr   Z
numba.corer   localr   r<   r    r%   rD   rl   rt   rv   rw   TRACEr[   rU   setLevelrM   StreamHandlerhandlersrF   eventr	   r	   r	   r
   <module>   s0   s
