
    sh                      X   S SK rS SKrS SKrS SKrS SKrS SKrS SKJr  S SK	J
r
  S SKJr  S SKJr  S SKrS SKr\R$                  S 5       rS rS rS	 rS
 rS r " S S\R2                  R4                  R6                  5      rS rS\S\S\\ \RB                     \
/ \S   4   4   4S jr"g)    N)AbstractContextManager)Callable)
LazyString)configc               #   R  #    [         R                  R                  R                  5       n [         R                  R                  R	                  [         R                  R                  R                  5       5         S v   [         R                  R                  R	                  U 5        [         R                  R                  R                  5         g ! [         R                  R                  R	                  U 5        [         R                  R                  R                  5         f = f7fN)torch_logging	_internal_get_log_state_set_log_stateLogState
_init_logs)
prev_states    y/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/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                 H   [         R                  " 5       n[        R                  R                  R                  [        R                  SU 05      nUR                  [        5       5        UR                  U5        [        R                  R                  R                  5         U$ )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                      [         R                  " 5       nUR                  [        5       5        [        R
                  R                  " S0 U D6  U$ )N )r   r   r   r   r	   r
   set_logs)kwargsr   s     r   log_apir'   "   s=    %%'J/12	NN%f%r"   c                    ^^ SSSS.m/ mUU4S jnU R                  5        H  u  p#[        U[        5      (       a  TR                  U5        M-  [        U[        5      (       a
  U" X#5        ML  [        U[
        5      (       a)  US:X  a#  UR                  5        H  u  pEU" XE5        M     M  [        S5      e   SR                  T5      $ )	N+ -)
      (   c                    > [        U [        5      (       a3  [        U[        5      (       a  UT;   a  TR                  TU   U -   5        g [	        S5      e)NInvalid value for setting)
isinstancestrintappend
ValueError)namelevelINT_TO_VERBOSITYr   s     r   append_setting*kwargs_to_settings.<locals>.append_setting.   sJ    dC  Zs%;%;IY@YOO,U3d:;899r"   modulesr0   ,)itemsr1   boolr4   r3   r   r5   join)r&   r9   r6   valmodule_qnamer7   r8   r   s         @@r   kwargs_to_settingsrB   )   s    RS1H: \\^	c4  OOD!S!!4%T""ty'8'*yy{#|3 (3 899 $ 88Hr"   c                     ^  U 4S jnU$ )Nc                 N   >^  [         R                  " SS05      U U4S j5       nU$ )Nfx_graph_cacheFc                   > [         R                  R                  5         / n[        T5      S:X  a#  U R	                  U5         T" X5        S S S 5        O?[        [        S0 TD65         U R	                  U5         T" X5        S S S 5        S S S 5        [         R                  R                  5         UR                  5         [        S0 TD6   U R	                  U5         T" X5        S S S 5        S S S 5        g ! , (       d  f       Ns= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       NJ= f! , (       d  f       g = f)Nr   r$   )	r	   _dynamoresetlen_handler_watcherr!   rB   clearr'   )selfrecordsfnr&   s     r   test_fn3make_logging_test.<locals>.wrapper.<locals>.test_fnP   s     MM!G6{a**73t% 43 ""4">v">?AVAVW^A_t% B`? MM!MMO"6"D$9$9'$B4! %C"" 43 B`A_?? %C$B""sT   	C8(D:	D	DD<	D+'D<8
D	
D	D
D(+
D9	5D<<
E
)inductor_configr   )rN   rO   r&   s   ` r   wrapper"make_logging_test.<locals>.wrapperO   s-    			 0%8	9	" 
:	"& r"   r$   )r&   rR   s   ` r   make_logging_testrT   N   s    . Nr"   c                    ^  U 4S jnU$ )Nc                    >^  U U4S jnU$ )Nc                    > [         R                  R                  5         / n[        T5         U R	                  U5         T" X5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = fr   )r	   rG   rH   r!   rJ   )rL   rM   rN   r   s     r   rO   4make_settings_test.<locals>.wrapper.<locals>.test_fnj   sO    MM!Gh')>)>w)G4! *H'')G)G''s"   A*	AA*
A'	#A**
A8r$   )rN   rO   r   s   ` r   rR   #make_settings_test.<locals>.wrapperi   s    	" r"   r$   )r   rR   s   ` r   make_settings_testrZ   h   s     Nr"   c                   T   ^  \ rS rSr\U 4S j5       r\S 5       rS rS rS r	Sr
U =r$ )LoggingTestCaseu   c                   > [         TU ]  5         U R                  R                  [        R
                  R                  R                  [        R                  SS05      5        U R                  R                  [        R
                  R                  SS5      5        U R                  R                  [        R
                  R                  SS5      5        g )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   ra   LoggingTestCase.setUpClassv   s    %%MM$$RZZ2BB1GH	
 	%%MM FM	
 	%%MM >F	
r"   c                     U R                   R                  5         [        R                  R                  R
                  R                  5         [        R                  R                  5         g r   )rb   closer	   r
   r   	log_staterK   r   )rc   s    r   tearDownClassLoggingTestCase.tearDownClass   s>      **002!!#r"   c                 .   ^ [        U4S jU 5       5      $ )Nc              3   J   >#    U  H  nTUR                  5       ;   v   M     g 7fr   )
getMessage).0rms     r   	<genexpr>,LoggingTestCase.hasRecord.<locals>.<genexpr>   s     811&s    #)any)rL   rM   rp   s     `r   	hasRecordLoggingTestCase.hasRecord   s    8888r"   c           	         ^^^ S mT H:  mUTR                  5       ;   d  M  U R                  T[        UUU4S j5      S9  TmM<     Tc  U R                  SU ST 35        T$ )Nc                     > ST ST  ST 3$ )Nzmultiple matching records: z and  among r$   )ro   recordrM   s   r   <lambda>+LoggingTestCase.getRecord.<locals>.<lambda>   s    "=fXU1#WU\T] ^r"   )msgzdid not find record with rx   )rm   assertIsNoner   fail)rL   rM   rp   ro   ry   s    ` @@r   	getRecordLoggingTestCase.getRecord   sp    A ALLN"!!"^ "    >II1!GG9EFr"   c           	        ^^^	 [         R                  " 5       nU4S jm[        R                  R                  R
                  R                  5        H  n[        R                  " U5      n[        UR                  5      nU R                  USS5        U R                  USS5        UR                   HP  nUR                  m	UU	4S jnUR                  [        R                   R"                  R%                  USU5      5        MR     M     U$ )Nc                 (   > TR                  U 5        g r   )r4   )ry   record_lists    r   emit_post_hook8LoggingTestCase._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                 &   > T" U 5        T" U 5        g r   r$   )ry   r   old_emits    r   new_emit2LoggingTestCase._handler_watcher.<locals>.new_emit   s    V$"6*r"   emit)r   r   r	   r
   r   log_registryget_log_qnameslogging	getLoggerrI   handlersassertLessEqualassertGreaterr   r   r   r   r   object)
rL   r   r   	log_qnameloggernum_handlershandlerr   r   r   s
    `      @@r   rJ    LoggingTestCase._handler_watcher   s    ))+
	'
 11>>MMOI&&y1Fv/L  y |Q0ef!??"<<+ ((MM''..wI + P, r"   r$   )__name__
__module____qualname____firstlineno__classmethodra   ri   rt   r   rJ   __static_attributes____classcell__)rd   s   @r   r\   r\   u   s=    

 

 $ $
9& r"   r\   c                    ^ ^^^ [         R                  " 5       n[        R                  " US9m[        R
                  UUU 4S j5       mUU4S jnX#4$ )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      >#     [         R                  R                  TT5      n U R                  T5        S v   U R	                  T5        g ! W R	                  T5        f = f7fr   )r	   r
   getArtifactLogger
addHandlerremoveHandler)r   r   
log_optionmodules    r   tmp_redirect_logs)logs_to_string.<locals>.tmp_redirect_logs   sN     	*^^55fjIFg&  )F  )s   A"5A A"AA"c                  J   > [        T5      n U R                  T" 5       5        U $ r   )r!   r   )r   r   r   s    r   ctx_manager#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      sH     J##:6G* *
 ""r"   r   log_optionsreturnc                 6  ^ ^^^ [        [        T5      5       Vs/ s H  n[        R                  " 5       PM     nnU Vs/ s H  n[        R
                  " US9PM     snm[        R                  UUU 4S j5       mS[        S   4UU4S jjnX54$ s  snf s  snf )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.
r   c               3   p  >#    T V s/ s H#  n [         R                  R                  TU 5      PM%     nn  [        UT5       H  u  p#UR	                  U5        M     S v   [        UT5       H  u  p#UR                  U5        M     g s  sn f ! [        UT5       H  u  p#UR                  U5        M     f = f7fr   )r	   r
   r   zipr   r   )optionloggersr   r   r   r   r   s       r   r   2multiple_logs_to_string.<locals>.tmp_redirect_logs   s     R]^R]5>>33FFCR]^	.#&w#9!!'* $:#&w#9$$W- $: _ $'w#9$$W- $:s&   B6*BB6*B ,B6(B33B6r   Nc                  h   > [        SR                  T5      5      n U R                  T" 5       5        U $ )Nz, )r!   r?   r   )r   r   r   s    r   r   ,multiple_logs_to_string.<locals>.ctx_manager   s.    !$))K"89
  !2!45r"   )	rangerI   r   r   r   r   r   r   r   )r   r   _log_streamsr   r   r   r   s   ``    @@r   multiple_logs_to_stringr      s     +0K0@*AB*AQ2;;=*AKBKVW;Z%%Z8;WH. ./5  
 ##' CWs   B B)#torch._dynamo.test_caser	   unittest.mockr   r   r   torch._loggingtorch._logging._internalr   typingr   torch._dynamo.utilsr   torch._inductorr   rQ   r   r   r   r   r!   r'   rB   rT   rZ   rG   	test_caseTestCaser\   r   r2   tuplelistr   r   r$   r"   r   <module>r      s      	    -  * 5  	. .J4Hemm--66 HV#4$C $s $uT"++EVX`ace{  }A  fB  bB  YC  FC  @D $r"   