U
    ñ¾|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rÎe  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	   úO/var/www/website-v5/atlas_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}|rÐg }|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>@   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    "
"rE   c                  O   sF  |  dd¡}dd„ }t| ƒr$| d p&d}|rÄt‚t |¡r�t |tj¡D ]\}}t||||ƒƒ qHt |tj¡D ]\}}t	|f| žd|iŽ qpn4t |¡rÄt |dd„ ¡D ]\}}t||||ƒƒ qªt
|ƒsÜt|ƒ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 )
zà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(...):...


    Ú	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   r4   r1   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>r5   z()z -> )ÚisEnabledForÚloggingÚINFOr=   r   r!   rE   r   Úinfor   ÚsysÚexc_infor   r   r   r   r&   )r   r?   r>   ÚftyperC   rD   ÚresultÚtyper$   Ú	tracebackZmname©r   Úloggerr   r	   r
   Úwrapper]   sF    







z+dotrace.<locals>.decorator.<locals>.wrapperc                 S   s   | S rI   r	   ©Úxr	   r	   r
   Ú<lambda>Œ   ó    z,dotrace.<locals>.decorator.<locals>.<lambda>T)rM   Ú	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 rI   )rd   Ú
isfunctionÚismethodrY   r	   r	   r
   r[   §   s   
zdotrace.<locals>.<lambda>)NNN)Úgetr   rc   rd   ÚismoduleÚ
getmembersrg   ÚsetattrÚisclassÚdotraceÚcallablerT   r^   ra   rb   ÚfgetÚfsetÚfdel)r   r?   rF   rf   Úarg0Únr2   ÚcZpgetZpsetZpdelr	   r	   r
   rn   J   s2    D





rn   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 rI   r	   )r   r	   r	   r
   rf   ¿   s    znotrace.<locals>.decoratorr   N)r   ro   rT   r^   ra   )r   r?   rf   rs   r	   r	   r
   Únotrace½   s
    rv   c                 C   s.   dt jd | g} t d¡}| d | ¡¡ d S )Nz== r3   rG   r   )r=   r   rM   r]   rO   r   )ÚmsgrW   r	   r	   r
   ÚdoeventÈ   s    
rx   c                 C   s   d S rI   r	   )rw   r	   r	   r
   ÚnoeventÍ   s    ry   rG   )rM   rP   ÚtypesÚ	threadingrd   Ú	functoolsr   Ú	itertoolsr   Ú
numba.corer   Úlocalr   r=   r!   r&   rE   rn   rv   rx   ry   ÚTRACEr]   rW   ÚsetLevelrN   ÚStreamHandlerÚhandlersrG   Úeventr	   r	   r	   r
   Ú<module>   s0   s
