
    sh).                     $   S r 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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rSSKrSSKrSSKJr  SSKJr  \R,                   " S S5      5       r " S	 S
\R0                  R2                  R4                  5      rg)au  Common utilities for testing Dynamo's minifier functionality.

This module provides the base infrastructure for running minification tests in Dynamo.
It includes:
- MinifierTestResult: A dataclass for storing and processing minifier test results
- MinifierTestBase: A base test class with utilities for:
  - Running tests in isolated environments
  - Managing temporary directories and configurations
  - Executing minifier launcher scripts
  - Running and validating reproduction scripts
  - Supporting both compile-time and runtime error testing

The minifier helps reduce failing Dynamo compilations to minimal reproductions.
    N)Optional)patch)_as_posix_path)report_compile_source_on_errorc                   B    \ rS rSr% \\S'   \\S'   S rS rS rS r	Sr
g	)
MinifierTestResult&   minifier_code
repro_codec                     [         R                  " SU5      nUc   S5       eUR                  S5      n[         R                  " SSU[         R                  S9n[         R                  " SSU5      nUR                  5       $ )	Nz3class Repro\(torch\.nn\.Module\):\s+([ ].*\n| *\n)+zfailed to find moduler   z\s+$
)flagsz\n{3,}z

)researchgroupsub	MULTILINEstrip)selftmatchrs       v/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/torch/_dynamo/test_minifier_common.py_get_moduleMinifierTestResult._get_module+   si    		PRST 9"99 KKNFF7D!2<<8FF9fa(wwy    c                 |    Sn[         R                  " XR                  5      nU(       a  UR                  S5      nU$ g )Nz,torch\.export\.load\(\s*["\'](.*?)["\']\s*\)   )r   r   r   r   )r   patternr   	file_paths       r   get_exported_program_path,MinifierTestResult.get_exported_program_path3   s5     B		'??3AIr   c                 8    U R                  U R                  5      $ N)r   r
   r   s    r   minifier_module"MinifierTestResult.minifier_module?   s     2 233r   c                 8    U R                  U R                  5      $ r$   )r   r   r%   s    r   repro_moduleMinifierTestResult.repro_moduleB   s    00r    N)__name__
__module____qualname____firstlineno__str__annotations__r   r!   r&   r)   __static_attributes__r+   r   r   r   r   &   s!    O
41r   r   c                      ^  \ rS rSr\R
                  " 5       r\U 4S j5       r\S 5       r	S r
SS.S jrS rS	SS
.S jrSS.S jrS rS	S.S\\   4S jjrS	rU =r$ )MinifierTestBaseF   c                 B  > [         TU ]  5         U R                  R                  [        R
                  R                  R                  U R                  S95        U R                  R                  [        R                  R                  R                  SSSS.5      5        g )N)debug_dir_rootFr   )pattern_matchercompile_threadszcpp.vec_isa_ok)
super
setUpClass_exit_stackenter_contexttorch_dynamoconfigr   	DEBUG_DIR	_inductor)cls	__class__s    r   r;   MinifierTestBase.setUpClassI   s{    %%MM  &&cmm&D	

 	%%OO""(( (-'(&+		
r   c                     [         R                  " SS5      S:w  a!  [        R                  " U R                  5        O[        SU R                   35        U R                  R                  5         g )NPYTORCH_KEEP_TMPDIR01z%test_minifier_common tmpdir kept at: )osgetenvshutilrmtreerA   printr<   close)rC   s    r   tearDownClassMinifierTestBase.tearDownClass^   sJ    99*C0C7MM#--(9#--IJr   c                     US;   d   e[         R                  R                  R                  5        S[         R                  R                  R                  5        SUS:X  a  SOS SU< S3$ )N)compile_errorruntime_erroraccuracyr   z
torch._inductor.config.cpucpptritonz .inject_relu_bug_TESTING_ONLY = )r>   r?   r@   codegen_configrB   )r   devicebug_types      r   _gen_codegen_fn_patch_code+MinifierTestBase._gen_codegen_fn_patch_codef   st    IIII$$& ' (&&( ) *!'5h??_`h_k l 	r   N)cwdc                ^   U(       Gd  [        U5      S:  d   U5       eUS   S:X  d   U5       eUS   S:X  a  [        U5      S:X  d   U5       eUS   nS/nOB[        U5      S:  d   U5       e[        US   5       nUR                  5       nS S S 5        USS  n[        R                  R
                  R                  5       n[        R                  R
                  R                  5       n [        R                  " 5       n[        R                  " U5      n	[        R                  " S5      n
U
R                  U	5         [        [        R                   " 5       5      nUb!  [        U5      n[        R"                  " U5        [%        SU5         ['        5          [)        WS	US
.5        S S S 5        S S S 5        SnU
R1                  U	5        Ub  [        R"                  " W5        [        R                  R3                  5          [        R                  R
                  R5                  U5        [        R                  R
                  R5                  U5        [6        R8                  " UUSUR;                  5       R=                  S5      5      $ Ub  [        U5      n[6        R>                  " USUSS9$ ! , (       d  f       GN)= f! , (       d  f       GN!= f! , (       d  f       GN+= f! [*         a    Sn[,        R.                  " US9   GNOf = f! U
R1                  U	5        Ub  [        R"                  " W5        [        R                  R3                  5         f = f! [        R                  R
                  R5                  U5        [        R                  R
                  R5                  U5        f = f)N   r   python3r   -c   ztorch._dynamozsys.argv__main__)r,   __compile_source__filer   utf-8TF)capture_outputr^   check) lenopenreadr>   r?   r@   get_config_copyrB   ioStringIOloggingStreamHandler	getLogger
addHandlerr   rJ   getcwdchdirr   r   exec	Exception	traceback	print_excremoveHandlerresetload_config
subprocessCompletedProcessgetvalueencoderun)r   argsisolater^   codefdynamo_configinductor_configstderrlog_handlerlogprev_cwdrcs                r   _maybe_subprocess_run&MinifierTestBase._maybe_subprocess_runn   s   t9>'4'>7i'--'Aw$4yA~+t+~Awv4yA~+t+~$q']a668D #ABx "MM00@@BM#oo44DDFOD%33F;''8{+*-biik:H,S1z402P2RT
RV#WX 3S0B
 %%k2* MM'')$$00?&&22?C ..!((1	  $S)>>$tERRe #]. 3S2R00 ! 5B''V45 %%k2* MM'')$$00?&&22?Cs}   ;J.*AM =AK$ KK &K.
K$ 8AM .
J= 
K	
K
K!K$ $ LL LL A
MM AN,c                b   U R                  SSU/X R                  S9n[        SUR                  R	                  S5      5        [        SUR
                  R	                  S5      5        [        R                  " SUR
                  R	                  S5      5      nUb  X4R                  S5      4$ US 4$ )	Nra   rb   r   r^   ztest stdout:rh   ztest stderr:z(\S+)minifier_launcher.pyr   )	r   rA   rN   stdoutdecoder   r   r   r   )r   r   r   procrepro_dir_matchs        r   _run_test_codeMinifierTestBase._run_test_code   s    ))d#W.. * 
 	ndkk009:ndkk009:))($++*<*<W*E
 &..q111Tzr   r+   )minifier_argsrepro_afterc                j   U R                  U5        [        [        R                  R	                  US5      5      n[        U5       nUR                  5       nS S S 5        U R                  [        R                  R                  U5      5        SUS/UQnU(       d  US:w  a  UR                  S5        U R                  XUS9n	[        SU	R                  R                  S5      5        U	R                  R                  S5      n
[        S	U
5        U R                  S
U
5        U	W4$ ! , (       d  f       N= f)Nzminifier_launcher.pyra   minifyaot_inductorz--no-isolater   zminifier stdout:rh   zminifier stderr:z#Input graph did not fail the tester)assertIsNotNoner   rJ   pathjoinrl   rm   
assertTrueexistsappendr   rN   r   r   r   assertNotIn)r   	repro_dirr   r   r   launch_filer   launch_coder   launch_procr   s              r   _run_minifier_launcher'MinifierTestBase._run_minifier_launcher   s     	Y'$RWW\\)=S%TU+!&&(K {34;A=A;.8 KK'00I0V +"4"4";";G"DE##**73 &)>GK'' s   D$$
D2Tr   c                   U R                  U5        [        [        R                  R	                  US5      5      n[        U5       nUR                  5       nS S S 5        U R                  [        R                  R                  U5      5        U R                  SU/X!S9n[        SUR                  R                  S5      5        [        SUR                  R                  S5      5        UW4$ ! , (       d  f       N= f)Nzrepro.pyra   r   zrepro stdout:rh   zrepro stderr:)r   r   rJ   r   r   rl   rm   r   r   r   rN   r   r   r   )r   r   r   
repro_filer   r   
repro_procs          r   
_run_reproMinifierTestBase._run_repro   s    Y'#BGGLLJ$GH
*J z23//
#W 0 

 	oz0077@Aoz0077@A:%% s   C--
C;c                 D   SnUS:X  a  SnOU(       a  SU S3nS[        [        R                  R                  R	                  5       5       S[        [        R
                  R                  R	                  5       5       SU SU S	U S
[        U R                  5       SU S3$ )N r   z=torch._inductor.config.aot_inductor.dump_aoti_minifier = Truez$torch._dynamo.config.repro_after = "z
"
        z9import torch
import torch._dynamo
import torch._inductor
r   z$
torch._dynamo.config.repro_level = z3
torch._inductor.config.aot_inductor.repro_level = z(
torch._dynamo.config.debug_dir_root = "z"
)r   r>   r?   r@   rY   rB   rA   )r   run_coder   repro_levelrepro_after_lines        r   _gen_test_codeMinifierTestBase._gen_test_code   s    .(O  $%%0M 2	  $$3356 7 8&&5578 9 :  $$/= 133>- @((6t~~(F'G H	
  	r   )r   returnc                   U(       a  SnOUb  US:X  a  SnOSnU R                  XU5      n[        S[        R                  S9  U R	                  XtS9u  pUc.  U R                  UR                  S5        U R                  U	5        g U R                  X8R                  R                  S	5      5        U R                  U	5        [        S
[        R                  S9  U R                  U	UUUS9u  p[        S[        R                  S9  U R                  XS9u  pU R                  X<R                  R                  S	5      5        U R                  UR                  S5        [        XS9$ )Nrc   AccuracyError   r`   zrunning testrf   r   r   rh   zrunning minifier)r   r   r   zrunning repro)r
   r   )r   rN   sysr   r   assertEqual
returncodeassertIsNoneassertInr   r   r   r   assertNotEqualr   )r   r   r   expected_errorr   r   r   	test_code	test_procr   _minifier_procr
   r   r   s                 r   _run_full_testMinifierTestBase._run_full_test  sH    K#~'HKK''{K	n3::.#2292N	!Y1115i( 	n&6&6&=&=g&FGY' szz2(,(C(C'#	 )D )
% 	oCJJ/!%!L
n&7&7&>&>w&GHJ1115!UUr   )r,   r-   r.   r/   tempfilemkdtemprA   classmethodr;   rP   r\   r   r   r   r   r   r   r   r   r2   __classcell__)rD   s   @r   r4   r4   F   s      "I
 
(     ;? <SB  464(. 04 &$B PR V	$	% V  Vr   r4   )__doc__dataclassesro   rq   rJ   r   rL   r~   r   r   ry   typingr   unittest.mockr   r>   torch._dynamotorch._dynamo.test_casetorch._dynamo.trace_rulesr   torch.utils._tracebackr   	dataclassr   r?   	test_caseTestCaser4   r+   r   r   <module>r      s~     	  	 	   
        4 A 1 1 1>aVu}}..77 aVr   