
    sg                         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Zd dlZej                  d        Zd Zd Zd Zd Zd	 Z G d
 dej,                  j.                  j0                        Zd Zy)    N)
LazyString)configc               #   R  K   t         j                  j                  j                         } t         j                  j                  j	                  t         j                  j                  j                                	 d  t         j                  j                  j	                  |        t         j                  j                  j                          y # t         j                  j                  j	                  |        t         j                  j                  j                          w xY wwN)torch_logging	_internal_get_log_state_set_log_stateLogState
_init_logs)
prev_states    X/var/www/html/venv/lib/python3.12/site-packages/torch/testing/_internal/logging_utils.pypreserve_log_stater      s     ))88:J	NN++ENN,D,D,M,M,OP.  //
;  ++- 	  //
;  ++-s    A8D';C ?AD'AD$$D'c                 F   t        j                         }t        j                  j                  j                  t        j                  d| i      }|j                  t                      |j                  |       t        j                  j                  j                          |S )N
TORCH_LOGS)
contextlib	ExitStackunittestmockpatchdictosenvironenter_contextr   r   r   r	   r   )settings
exit_stacksettings_patchs      r   log_settingsr      sq    %%'J]]((--bjj<:RSN/12^,	NN'')    c                      t        j                         }|j                  t                      t	        j
                  j                  di |  |S )N )r   r   r   r   r   r   set_logs)kwargsr   s     r   log_apir%       s=    %%'J/12	NN%f%r    c                  n   ddddg fd}| j                         D ]  \  }}t        |t              rj                  |       (t        |t              r
 |||       Bt        |t
              r'|dk(  r"|j                         D ]  \  }} |||        yt        d       dj                        S )	N+ -)
      (   c                     t        | t              r,t        |t              r|v rj                  |   | z          y t	        d      )NInvalid value for setting)
isinstancestrintappend
ValueError)namelevelINT_TO_VERBOSITYr   s     r   append_settingz*kwargs_to_settings.<locals>.append_setting,   sD    dC Zs%;IY@YOO,U3d:;899r    modulesr.   ,)itemsr/   boolr2   r1   r   r3   join)r$   r7   r4   valmodule_qnamer5   r6   r   s         @@r   kwargs_to_settingsr?   '   s    RS1H: \\^ 	:	cc4 OOD!S!4%T"ty'8'*yy{ 4#e|U34 899	: 88Hr    c                        fd}|S )Nc                 J     t        j                  ddi       fd       }|S )Nfx_graph_cacheFc                 l   t         j                  j                          g }t              dk(  r$| j	                  |      5   | |       d d d        n@t        t        di       5  | j	                  |      5   | |       d d d        d d d        t         j                  j                          |j                          t        di 5  | j	                  |      5   | |       d d d        d d d        y # 1 sw Y   oxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   6xY w# 1 sw Y   y xY w)Nr   r"   )	r   _dynamoresetlen_handler_watcherr   r?   clearr%   )selfrecordsfnr$   s     r   test_fnz3make_logging_test.<locals>.wrapper.<locals>.test_fnN   s    MM!G6{a**73 &tW%& & ""4">v">? &AVAVW^A_ &tW%& & MM!MMO"6" "D$9$9'$B "4!" " "& && & & &" " " "sT   
C:(D:
DDD*
D)D*:DD	DDD'	#D**D3)inductor_configr   )rK   rL   r$   s   ` r   wrapperz"make_logging_test.<locals>.wrapperM   s-    			 0%8	9	" 
:	"& r    r"   )r$   rN   s   ` r   make_logging_testrO   L   s    . Nr    c                       fd}|S )Nc                       fd}|S )Nc                     t         j                  j                          g }t              5  | j	                  |      5   | |       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY wr   )r   rD   rE   r   rG   )rI   rJ   rK   r   s     r   rL   z4make_settings_test.<locals>.wrapper.<locals>.test_fnh   sa    MM!Gh' ")>)>w)G "4!" " " " " "s"   A&
A	A&A#	A&&A/r"   )rK   rL   r   s   ` r   rN   z#make_settings_test.<locals>.wrapperg   s    	" r    r"   )r   rN   s   ` r   make_settings_testrS   f   s     Nr    c                   J     e Zd Ze fd       Zed        Zd Zd Zd Z xZ	S )LoggingTestCasec                    t         |           | j                  j                  t        j
                  j                  j                  t        j                  ddi             | j                  j                  t        j
                  j                  dd             | j                  j                  t        j
                  j                  dd             y )N___LOG_TESTINGr(   z$torch._dynamo.config.suppress_errorsTztorch._dynamo.config.verboseF)
super
setUpClass_exit_stackr   r   r   r   r   r   r   )cls	__class__s    r   rY   zLoggingTestCase.setUpClasst   s    %%MM$$RZZ2BB1GH	
 	%%MM FM	
 	%%MM >F	
r    c                     | j                   j                          t        j                  j                  j
                  j                          t        j                  j                          y r   )rZ   closer   r   r	   	log_staterH   r   )r[   s    r   tearDownClasszLoggingTestCase.tearDownClass   s>      **002!!#r    c                 ,    t        fd|D              S )Nc              3   B   K   | ]  }|j                         v   y wr   )
getMessage).0rms     r   	<genexpr>z,LoggingTestCase.hasRecord.<locals>.<genexpr>   s     811&8s   )any)rI   rJ   rf   s     `r   	hasRecordzLoggingTestCase.hasRecord   s    8888r    c           	          d D ]8  |j                         v s| j                  t        fd             : | j                  d| d        S )Nc                      d d  d S )Nzmultiple matching records: z and  among r"   )re   recordrJ   s   r   <lambda>z+LoggingTestCase.getRecord.<locals>.<lambda>   s    "=fXU1#WU\T] ^ r    )msgzdid not find record with rl   )rc   assertIsNoner   fail)rI   rJ   rf   re   rm   s    ` @@r   	getRecordzLoggingTestCase.getRecord   su     
	A ALLN"!!"^ "  
	 >II1!GG9EFr    c           	        	 t        j                         }fdt        j                  j                  j
                  j                         D ]  }t        j                  |      }t        |j                        }| j                  |dd       | j                  |dd       |j                  D ]N  }|j                  		fd}|j                  t        j                   j"                  j%                  |d|             P  |S )Nc                 (    j                  |        y r   )r2   )rm   record_lists    r   emit_post_hookz8LoggingTestCase._handler_watcher.<locals>.emit_post_hook   s    v&r       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                 &     |         |        y r   r"   )rm   rv   old_emits    r   new_emitz2LoggingTestCase._handler_watcher.<locals>.new_emit   s    V$"6*r    emit)r   r   r   r   r	   log_registryget_log_qnameslogging	getLoggerrF   handlersassertLessEqualassertGreaterr{   r   r   r   r   object)
rI   ru   r   	log_qnameloggernum_handlershandlerrz   rv   ry   s
    `      @@r   rG   z LoggingTestCase._handler_watcher   s    ))+
	'
 11>>MMO 	I&&y1Fv/L  y |Q0ef!?? 	"<<+ ((MM''..wI		, r    )
__name__
__module____qualname__classmethodrY   r`   ri   rr   rG   __classcell__)r\   s   @r   rU   rU   s   s8    

 

 $ $
9&r    rU   c                      t        j                         }t        j                  |      t        j
                   fd       f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      K   	 t         j                  j                        } | j                         d  | j	                         y #  j	                         w xY wwr   )r   r   getArtifactLogger
addHandlerremoveHandler)r   r   
log_optionmodules    r   tmp_redirect_logsz)logs_to_string.<locals>.tmp_redirect_logs   sO     	*^^55fjIFg&  )F  )s   A"5A A"AA"c                  J    t              } | j                                 | S r   )r   r   )r   r   r   s    r   ctx_managerz#logs_to_string.<locals>.ctx_manager   s%    !*-
  !2!45r    )ioStringIOr~   StreamHandlerr   contextmanager)r   r   
log_streamr   r   r   s   ``  @@r   logs_to_stringr      sJ     J##:6G* *
 {""r    )torch._dynamo.test_caser   unittest.mockr   r   r   torch._loggingtorch._logging._internaltorch._dynamo.utilsr   torch._inductorr   rM   r~   r   r   r   r   r%   r?   rO   rS   rD   	test_caseTestCaserU   r   r"   r    r   <module>r      s{      	    * 5  	. .J4Hemm--66 HV#r    