U
    hâË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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	   úK/home/sam/Atlas/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   Ú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}|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   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
