o
    wZh                      @   s   d dl Z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 d dlmZ d dlZd dlZejdd Zdd	 Zd
d Zdd Zdd Zdd ZG dd dejjjZdd Zdededee ej! e
g ed f f fddZ"dS )    N)AbstractContextManager)Callable)
LazyString)configc               	   c   sh    t jj } t jjt jj  zd V  W t jj|  t jj  d S t jj|  t jj  w N)torch_logging	_internalZ_get_log_stateZ_set_log_stateZLogState
_init_logs)Z
prev_state r   T/var/www/auris/lib/python3.10/site-packages/torch/testing/_internal/logging_utils.pypreserve_log_state   s   r   c                 C   sD   t  }tjjtjd| i}|t	  || t
jj  |S )NZ
TORCH_LOGS)
contextlib	ExitStackunittestmockpatchdictosenvironenter_contextr   r   r   r	   r
   )settings
exit_stackZsettings_patchr   r   r   log_settings   s   
r   c                  K   s*   t  }|t  tjjdi |  |S )Nr   )r   r   r   r   r   r   Zset_logs)kwargsr   r   r   r   log_api"   s   r   c                     s   dddd g  fdd}|   D ]5\}}t|tr"| qt|tr-||| qt|trE|dkrE|  D ]	\}}||| q:qtdd	S )
N+ -)
      (   c                    s:   t | trt |tr| v r | |   d S td)NInvalid value for setting)
isinstancestrintappend
ValueError)namelevelZINT_TO_VERBOSITYr   r   r   append_setting.   s   z*kwargs_to_settings.<locals>.append_settingmodulesr"   ,)itemsr#   boolr&   r%   r   r'   join)r   r+   r(   valZmodule_qnamer)   r   r*   r   kwargs_to_settings)   s   


r2   c                         fdd}|S )Nc                    s    t ddi fdd}|S )NZfx_graph_cacheFc              	      s@  t j  g }tdkr(| |  | | W d    n1 s"w   Y  n3ttdi " | |  | | W d    n1 sGw   Y  W d    n1 sVw   Y  t j  |  tdi + | |  | | W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nr   r   )	r   _dynamoresetlen_handler_watcherr   r2   clearr   selfrecords)fnr   r   r   test_fnP   s"   
  
Pz3make_logging_test.<locals>.wrapper.<locals>.test_fn)inductor_configr   r<   r=   r   r<   r   wrapperO   s   z"make_logging_test.<locals>.wrapperr   )r   rB   r   r@   r   make_logging_testN   s   rC   c                    r3   )Nc                    s    fdd}|S )Nc              	      s   t j  g }t+ | |  | | W d    n1 s!w   Y  W d    d S W d    d S 1 s9w   Y  d S r   )r   r4   r5   r   r7   r9   )r<   r   r   r   r=   j   s
   
Pz4make_settings_test.<locals>.wrapper.<locals>.test_fnr   r?   r   rA   r   rB   i   s   z#make_settings_test.<locals>.wrapperr   )r   rB   r   rD   r   make_settings_testh   s   
rE   c                       sD   e Zd Ze fddZedd Zdd Zdd Zd	d
 Z  Z	S )LoggingTestCasec                    sX   t    | jtjjtj	ddi | jtjdd | jtjdd d S )NZ___LOG_TESTINGr   z$torch._dynamo.config.suppress_errorsTztorch._dynamo.config.verboseF)
super
setUpClass_exit_stackr   r   r   r   r   r   r   cls	__class__r   r   rH   v   s   
zLoggingTestCase.setUpClassc                 C   s&   | j   tjjj  tj  d S r   )rI   closer   r   r	   Z	log_stater8   r
   rJ   r   r   r   tearDownClass   s   
zLoggingTestCase.tearDownClassc                    s   t  fdd|D S )Nc                 3   s    | ]	} |  v V  qd S r   )
getMessage).0rmr   r   	<genexpr>   s    z,LoggingTestCase.hasRecord.<locals>.<genexpr>)anyr:   r;   rT   r   rS   r   	hasRecord   s   zLoggingTestCase.hasRecordc                    s^   d D ] |   v r| jt fddd  qd u r-| d| d  S )Nc                      s   d d  d S )Nzmultiple matching records: z and  among r   r   rR   recordr;   r   r   <lambda>   s    z+LoggingTestCase.getRecord.<locals>.<lambda>)msgzdid not find record with rY   )rP   ZassertIsNoner   ZfailrW   r   rZ   r   	getRecord   s   zLoggingTestCase.getRecordc              	      s   t  }fdd tjjj D ]6}t|}t	|j
}| |dd | |dd |j
D ]}|j fdd}|tjj|d	| q.q|S )
Nc                    s     |  d S r   )r&   r[   )record_listr   r   emit_post_hook   s   z8LoggingTestCase._handler_watcher.<locals>.emit_post_hook   zgAll pt2 loggers should only have at most two handlers (debug artifacts and messages above debug level).r   z3All pt2 loggers should have more than zero handlersc                    s   |   |  d S r   r   r_   )ra   old_emitr   r   new_emit   s   z2LoggingTestCase._handler_watcher.<locals>.new_emitemit)r   r   r   r   r	   Zlog_registryZget_log_qnameslogging	getLoggerr6   handlersZassertLessEqualZassertGreaterre   r   r   r   r   object)r:   r`   r   Z	log_qnameloggerZnum_handlershandlerrd   r   )ra   rc   r`   r   r7      s&   


z LoggingTestCase._handler_watcher)
__name__
__module____qualname__classmethodrH   rO   rX   r^   r7   __classcell__r   r   rL   r   rF   u   s    
rF   c                    s@   t  }tj|d tj fddfdd}||fS )zExample:
    logs_to_string("torch._inductor.compile_fx", "post_grad_graphs")
    returns the output of TORCH_LOGS="post_grad_graphs" from the
    torch._inductor.compile_fx module.
    streamc               	   3   s>    zt j} |   d V  W |   d S |   w r   )r   r   getArtifactLogger
addHandlerremoveHandler)rj   )rk   
log_optionmoduler   r   tmp_redirect_logs   s   
z)logs_to_string.<locals>.tmp_redirect_logsc                     s   t  } |   | S r   )r   r   r   )rv   rx   r   r   ctx_manager   s   z#logs_to_string.<locals>.ctx_manager)ioStringIOrf   StreamHandlerr   contextmanager)rw   rv   
log_streamrz   r   )rk   rv   rw   rx   r   logs_to_string   s   r   rw   log_optionsreturnc                    sZ   dd t tD }dd |D  tj fdddtd ffdd	}||fS )
zExample:
    multiple_logs_to_string("torch._inductor.compile_fx", "pre_grad_graphs", "post_grad_graphs")
    returns the output of TORCH_LOGS="pre_graph_graphs, post_grad_graphs" from the
    torch._inductor.compile_fx module.
    c                 S   s   g | ]}t  qS r   )r{   r|   )rQ   _r   r   r   
<listcomp>   s    z+multiple_logs_to_string.<locals>.<listcomp>c                 S   s   g | ]}t j|d qS )rq   )rf   r}   )rQ   r   r   r   r   r      s    c               
   3   s~    fddD } z$t |  D ]	\}}|| qd V  W t |  D ]	\}}|| q#d S t |  D ]	\}}|| q4w )Nc                    s   g | ]	}t j |qS r   )r   r   rs   )rQ   option)rw   r   r   r      s    zFmultiple_logs_to_string.<locals>.tmp_redirect_logs.<locals>.<listcomp>)ziprt   ru   )loggersrj   rk   )rh   r   rw   r   r   rx      s   z2multiple_logs_to_string.<locals>.tmp_redirect_logsr   Nc                     s   t d } |   | S )Nz, )r   r0   r   ry   )r   rx   r   r   rz      s   z,multiple_logs_to_string.<locals>.ctx_manager)ranger6   r   r~   r   )rw   r   log_streamsrz   r   )rh   r   rw   rx   r   multiple_logs_to_string   s   
r   )#Ztorch._dynamo.test_caser   Zunittest.mockr   r   r   Ztorch._loggingZtorch._logging._internalr   typingr   Ztorch._dynamo.utilsr   Ztorch._inductorr   r>   rf   r{   r~   r   r   r   r2   rC   rE   r4   Z	test_caseZTestCaserF   r   r$   tuplelistr|   r   r   r   r   r   <module>   s,   
	%K4