a
    
d                     @   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	   [/var/www/html/stable-diffusion-webui/venv/lib/python3.9/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   cname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>@       z!create_events.<locals>.<listcomp>c                 S   s   g | ]}t |qS r	   )strr)   r	   r	   r
   r.   A   r/   c                    s   g | ]}d | | f qS r'   r	   )r*   kr,   r	   r
   r.   B   r/   , c                 S   s   g | ]}|r|qS r	   r	   )r*   fr	   r	   r
   r.   C   r/   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    "
"rF   c                  O   sH  | dd}dd }t| r$| d p&d}|rtt|rt|tjD ]\}}t|||| qHt|tjD ]\}}t	|g| R d|i qpn4t|rt|dd D ]\}}t|||| qt
|st|ttfv r||S t|tkr@d	\}}	}
|jr||j}|jr"||j}	|jr4||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  | i |S t | \}}zndt_t|| |\}}z(d| t j	d7  _	z,zdt_ | i |}W dt_ndt_0 W n   t
 \}}}	|d |j}
|
dkr||
 |d ||j |jr"|d |d	d
d |jD  |d n
|d  Y n$0 |d urV|d |t| W t j	d8  _	d| n t j	d8  _	d| 0 W dt_ndt_0 |S )NTr      Fz => exception thrown
	raise r   r   r5   r2   c                 s   s   | ]}t |V  qd S N)r&   )r*   vr	   r	   r
   	<genexpr>z   r/   z>dotrace.<locals>.decorator.<locals>.wrapper.<locals>.<genexpr>r6   z()z -> )isEnabledForloggingINFOr>   r   r!   rF   infor   r   sysexc_infor   r   r   r   r&   )r   r@   r?   ZftyperD   rE   resulttyper$   	tracebackZmnamer   loggerr   r	   r
   wrapper]   sJ    






z+dotrace.<locals>.decorator.<locals>.wrapperc                 S   s   | S rJ   r	   xr	   r	   r
   <lambda>   r/   z,dotrace.<locals>.decorator.<locals>.<lambda>T)rN   	getLoggerrT   classmethod__get____func__staticmethodpropertyNotImplementedErrorinspectgetfullargspecr   )r   rX   rS   Zrewrapr	   rV   r
   	decoratorY   s    
.
zdotrace.<locals>.decoratorr   Nc                 S   s   t | pt | S rJ   )rc   
isfunctionismethodrY   r	   r	   r
   r[      s   
zdotrace.<locals>.<lambda>)NNN)getr   rb   rc   ismodule
getmembersrf   setattrisclassdotracecallablerT   r]   r`   ra   fgetfsetfdel)r   r@   rG   re   arg0nr3   cZpgetZpsetZpdelr	   r	   r
   rm   J   s2    D





rm   c                  O   sD   dd }t | r| d pd}t|s4t|ttfv r<||S |S dS )z)Just a no-op in case tracing is disabled.c                 S   s   | S rJ   r	   )r   r	   r	   r
   re      s    znotrace.<locals>.decoratorr   N)r   rn   rT   r]   r`   )r   r@   re   rr   r	   r	   r
   notrace   s
    ru   c                 C   s.   dt jd | g} td}|d|  d S )Nz== r4   rH   r   )r>   r   rN   r\   rP   r   )msgrW   r	   r	   r
   doevent   s    
rw   c                 C   s   d S rJ   r	   )rv   r	   r	   r
   noevent   s    rx   rH   )rN   rQ   types	threadingrc   	functoolsr   	itertoolsr   Z
numba.corer   localr   r>   r!   r&   rF   rm   ru   rw   rx   TRACEr\   rW   setLevelrO   StreamHandlerhandlersrH   eventr	   r	   r	   r
   <module>   s0   s
