U
    <c                     @   s   d dl Z d dlmZ d dlmZmZ d dlZd dlZd dlZd dl	m
Z
 G dd de jZG dd de
ZG d	d
 d
eZG dd dejZeedddZejdeee  dddZejdd ZdS )    N)tree_map)IteratorList)TorchDispatchModec                       sV   e Zd ZU ejed< dgZejZ	ej
jZedd Z fddZed
dd	Z  ZS )LoggingTensorelemc                 O   sN   t jj| | | | |j|j|j|	ddd}|j
rD| n||_|S )Nrequires_gradF)stridesstorage_offsetdtypelayoutdevicer   )torchTensorZ_make_wrapper_subclasssizeZstrider
   r   r   r   getr   detachr   )clsr   argskwargsr r   J/tmp/pip-unpacked-wheel-gikjz4vx/torch/testing/_internal/logging_tensor.py__new__"   s        
zLoggingTensor.__new__c                    s   t  j| j dS )N)Ztensor_contents)super__repr__r   self	__class__r   r   r   2   s    zLoggingTensor.__repr__r   Nc              	      sp    fdd} fdd}   " t||t||t||}W 5 Q R X td|j d|j ||| |S )Nc                    s   t |  r| jS | S N)
isinstancer   er   r   r   unwrap7   s    z0LoggingTensor.__torch_dispatch__.<locals>.unwrapc                    s   t | tjr | S | S r    )r!   r   r   r"   r$   r   r   wrap:   s    z.LoggingTensor.__torch_dispatch__.<locals>.wrapr   .)contextr   logging	getLoggerinfo
__module____name__)r   functypesr   r   r%   r&   rsr   r$   r   __torch_dispatch__5   s    
&$z LoggingTensor.__torch_dispatch__)r   N)r-   r,   __qualname__r   r   __annotations__	__slots__
contextlibnullcontextr(   Z_CZ_disabled_torch_function_implZ__torch_function__staticmethodr   r   classmethodr1   __classcell__r   r   r   r   r      s   


r   c                   @   s   e Zd ZdddZdS )LoggingTensorModer   Nc                 C   s>   |d kri }|||}t d|j d|j ||| |S )Nr   r'   )r)   r*   r+   r,   r-   )r   r.   r/   r   r   r0   r   r   r   r1   C   s
    
$z$LoggingTensorMode.__torch_dispatch__)r   N)r-   r,   r2   r1   r   r   r   r   r:   B   s   r:   c                   @   s   e Zd ZejjZdS )LoggingTensorReentrantN)r-   r,   r2   r   Z	overridesZenable_reentrant_dispatchr(   r   r   r   r   r;   J   s   r;   c                   @   s`   e Zd ZU ee ed< eed< ee eddddZe	eddd	Z
e	ed
ddZdd ZdS )LoggingTensorHandlerlog_listnext_shortidN)r=   use_shortid_for_all_tensorsreturnc                 C   s"   t j|  || _d| _|| _d S )Nr   )r)   Handler__init__r=   r>   r?   )r   r=   r?   r   r   r   rB   R   s    zLoggingTensorHandler.__init__)or@   c                 C   s&   t |ds | j|_|  jd7  _|jS )N_shortid   )hasattrr>   rD   )r   rC   r   r   r   rD   Z   s    
zLoggingTensorHandler._shortid)ar@   c                 C   s2   | j rtjnt}t||r*d| | S t|S )N$)r?   r   r   r   r!   rD   repr)r   rG   Zcond_clsr   r   r   _fmt`   s    zLoggingTensorHandler._fmtc                    s   d t fdd|jd D  fdd|jd  D }t|jd ttfrpd  fdd|jd D n |jd } j	
| d	|j d
| d d S )Nz, c                 3   s   | ]}  |V  qd S r    rJ   .0rG   r   r   r   	<genexpr>f   s     z,LoggingTensorHandler.emit.<locals>.<genexpr>r   c                 3   s&   | ]\}}| d   | V  qdS )=NrK   )rM   kvr   r   r   rN   g   s     rE      c                 3   s   | ]}  |V  qd S r    rK   rL   r   r   r   rN   i   s     z = ())join	itertoolschainr   itemsr!   listtuplerJ   r=   appendmsg)r   recordZfmt_argsZfmt_retsr   r   r   emitd   s     zLoggingTensorHandler.emit)r-   r,   r2   r   strr3   intboolrB   objectrD   rJ   r^   r   r   r   r   r<   N   s   
r<   namevarc                 C   s   t dd| fi |f d S )Nr   input)r)   r*   r+   rc   r   r   r   	log_inputm   s    rg   F)r@   c              	   c   sR   t d}g }t|| d}|| |t j d|_z
|V  W 5 || X d S )Nr   )r?   F)r)   r*   r<   
addHandlersetLevelINFO	propagateremoveHandler)Zis_modeloggerr=   handlerr   r   r   capture_logsp   s    


ro   c               
   c   s0   t    td} | V  W 5 Q R X W 5 Q R X d S )NT)r:   ro   )Zlogsr   r   r   %capture_logs_with_logging_tensor_mode}   s    rp   )F)r   Ztorch.utils._pytreer   typingr   r   r)   r5   rV   Ztorch.utils._python_dispatchr   r   r   r:   r;   rA   r<   r_   rb   rg   contextmanagerro   rp   r   r   r   r   <module>   s   )