
    `i1                     $   d Z 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ZddlZddl	Z	ddl
Z
ddlmZ ddlmZmZmZ ddlmZ ddlZddlZddlZddlmZ ddlmZ ej         G d d	                      Z G d
 dej        j        j                  ZdS )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)Sequence)AnyOptionalUnion)patch)_as_posix_path)report_compile_source_on_errorc                   d    e Zd ZU eed<   eed<   dedefdZdee         fdZdefdZdefdZ	d	S )
MinifierTestResultminifier_code
repro_codetreturnc                    t          j        d|          }|
J d            |                    d          }t          j        dd|t           j                  }t          j        dd|          }|                                S )	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)selfr   matchrs       v/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/torch/_dynamo/test_minifier_common.py_get_modulezMinifierTestResult._get_module*   st    	PRSTT  "9   KKNNF7D!2<888F9fa((wwyy    c                 p    d}t          j        || j                  }|r|                    d          }|S d S )Nz,torch\.export\.load\(\s*["\'](.*?)["\']\s*\)   )r   r   r   r   )r   patternr   	file_paths       r   get_exported_program_pathz,MinifierTestResult.get_exported_program_path2   s?     B	'4?33 	AItr   c                 6    |                      | j                  S N)r   r   r   s    r   minifier_modulez"MinifierTestResult.minifier_module>   s     2333r   c                 6    |                      | j                  S r%   )r   r   r&   s    r   repro_modulezMinifierTestResult.repro_moduleA   s    000r   N)
__name__
__module____qualname__str__annotations__r   r   r#   r'   r)    r   r   r   r   %   s         OOOS S    
8C= 
 
 
 
4 4 4 4 41c 1 1 1 1 1 1r   r   c                       e Zd Z ej                    Zed fd            Zedd            Zde	de	de	fdZ
ddd	ee         d
edee	         dej        e         fdZde	d
edeej        e         ee	ef         f         fdZdddde	d
edee         dee	         deej        e         e	f         f
dZddde	d
edeej        e         e	f         fdZde	de	dede	fdZddde	de	dee	         d
edee         dee         fdZ xZS )MinifierTestBaser   Nc                    t                                                       t          j                            | j                  st          j                    | _        | j        	                    t          j        j                            | j                             | j        	                    t          j        j                            dddd                     d S )N)debug_dir_rootFr    )pattern_matchercompile_threadszcpp.vec_isa_ok)super
setUpClassospathexists	DEBUG_DIRtempfilemkdtemp_exit_stackenter_contexttorch_dynamoconfigr   	_inductor)cls	__class__s    r   r7   zMinifierTestBase.setUpClassH   s    w~~cm,, 	/$,..CM%%M &&cm&DD	
 	
 	

 	%%O"(( (-'(&+ 	 		
 	
 	
 	
 	
r   c                     t          j        dd          dk    rt          j        | j                   nt          d| j                    | j                                         d S )NPYTORCH_KEEP_TMPDIR01z%test_minifier_common tmpdir kept at: )r8   getenvshutilrmtreer;   printr>   close)rD   s    r   tearDownClasszMinifierTestBase.tearDownClass_   sb    9*C00C77M#-((((I#-IIJJJr   devicebug_typec                     |dv sJ t           j        j                                         dt           j        j                                         d|dk    rdnd d|dS )N)compile_errorruntime_erroraccuracyr   z
torch._inductor.config.cpucpptritonz .inject_relu_bug_TESTING_ONLY = )r@   rA   rB   codegen_configrC   )r   rP   rQ   s      r   _gen_codegen_fn_patch_codez+MinifierTestBase._gen_codegen_fn_patch_codeg   s    IIIII$$&& &&((  "(5h  ai   	r   )cwdargsisolater[   c                   ddl m} |st          |          dk    s
J |            |d         dk    s
J |            |d         dk    r)t          |          dk    s
J |            |d         }dg}nqt          |          dk    s
J |            t          |d                   5 } ||                                          }d d d            n# 1 swxY w Y   |dd          }t
          j        j                                        }t
          j	        j                                        }	 t          j                    }	t          j        |	          }
t          j        d          }|                    |
           	 t!          t#          j                              }|#t!          |          }t#          j        |           t)          d	|          5  t+                      5  t-          |d
|d           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d}n'# t.          $ r d}t1          j        |	           Y nw xY w|                    |
           |t#          j        |           t
          j                                         nN# |                    |
           |t#          j        |           t
          j                                         w xY w	 t
          j        j                            |           t
          j	        j                            |           nM# t
          j        j                            |           t
          j	        j                            |           w xY wt;          j        ||d|	                                                     d                    S |t!          |          }t;          j!        |d|d          S )Nr   )normalize_path_separator   python3r    -c   ztorch._dynamozsys.argv__main__)r*   __compile_source__filer   utf-8TF)capture_outputr[   check)"torch._inductor.cpp_builderr_   lenopenreadr@   rA   rB   get_config_copyrC   ioStringIOloggingStreamHandler	getLogger
addHandlerr   r8   getcwdchdirr   r	   exec	Exception	traceback	print_excremoveHandlerresetload_config
subprocessCompletedProcessgetvalueencoderun)r   r\   r]   r[   r_   codefdynamo_configinductor_configstderrlog_handlerlogprev_cwdrcs                 r   _maybe_subprocess_runz&MinifierTestBase._maybe_subprocess_runo   s    	IHHHHH <	St99>>>4>>>7i''''''Aw$4yyA~~~t~~~Awv4yyA~~~t~~~$q']] >a33AFFHH==D> > > > > > > > > > > > > > > ABBx "M0@@BBM#o4DDFFOD%3F;;'88{+++*-bikk::H,S11z400 Y Y2P2R2R Y YT
RV#W#WXXXY Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y YBB  5 5 5B'V4444445 %%k222*** M'')))) %%k222*** M'')))))$00???&22?CCCC $00???&22?CCCC .!!((11	   $S))>$tERRRRs   $CCC*AL- ;AH$ HG?3H?H	HH	H
H$ HH$ HH$ #J $!IJ IJ A
L- AK  L- -A
M7r   c                v   |                      dd|g|| j                  }t          d|j                            d                     t          d|j                            d                     t          j        d|j                            d                    }|||                    d          fS |d fS )	Nra   rb   r]   r[   ztest stdout:rh   ztest stderr:z(\S+)minifier_launcher.pyr    )	r   r;   rM   stdoutdecoder   r   r   r   )r   r   r]   procrepro_dir_matchs        r   _run_test_codezMinifierTestBase._run_test_code   s     ))d#W$. * 
 
 	ndk0099:::ndk0099:::)($+*<*<W*E*E
 
 &..q1111Tzr   r/   )minifier_argsrepro_after	repro_dirr   r   c                   |                      |           t          t          j                            |d                    }t          |          5 }|                                }d d d            n# 1 swxY w Y   |                     t          j                            |                     d|dg|}|s|dk    r|	                    d           | 
                    |||          }	t          d|	j                            d                     |	j                            d          }
t          d	|
           |                     d
|
           |	|fS )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   r8   r9   joinrm   rn   
assertTruer:   appendr   rM   r   r   r   assertNotIn)r   r   r]   r   r   launch_filer   launch_coder\   launch_procr   s              r   _run_minifier_launcherz'MinifierTestBase._run_minifier_launcher   s    	Y'''$RW\\)=S%T%TUU+ 	#!&&((K	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#{33444;A=A 	(;.88 KK'''00wI0VV +"4";";G"D"DEEE#**733 &)))>GGGK''   A33A7:A7Tr]   c                <   |                      |           t          t          j                            |d                    }t          |          5 }|                                }d d d            n# 1 swxY w Y   |                     t          j                            |                     | 	                    d|g||          }t          d|j                            d                     t          d|j                            d                     ||fS )Nzrepro.pyra   r   zrepro stdout:rh   zrepro stderr:)r   r   r8   r9   r   rm   rn   r   r:   r   rM   r   r   r   )r   r   r]   
repro_filer   r   
repro_procs          r   
_run_reprozMinifierTestBase._run_repro   s7    	Y'''#BGLLJ$G$GHH
* 	"J	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"z22333//
#W) 0 
 

 	oz077@@AAAoz077@@AAA:%%r   run_coderepro_levelc                 4   d}|dk    rd}n|rd| d}dt          t          j        j                                                   dt          t          j        j                                                   d| d| d	| d
t          | j                   d| dS )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@   rA   rB   rY   rC   r;   )r   r   r   r   repro_after_lines        r   _gen_test_codezMinifierTestBase._gen_test_code   s    .((O   	 %0      $335566	 
 &557788    %0  4?  )7t~(F(F  
   	r   )r   expected_errorc                8   |rd}n||dk    rd}nd}|                      |||          }t          dt          j                   |                     ||          \  }}	|2|                     |j        d           |                     |	           d S |                     ||j        	                    d	                     | 
                    |	           t          d
t          j                   |                     |	|||          \  }
}t          dt          j                   |                     |	|          \  }}|                     ||j        	                    d	                     |                     |j        d           t          ||          S )Nrc   AccuracyError   r`   zrunning testrf   r   r   rh   zrunning minifier)r]   r   r   zrunning repro)r   r   )r   rM   sysr   r   assertEqual
returncodeassertIsNoneassertInr   r   r   r   assertNotEqualr   )r   r   r   r   r]   r   r   	test_code	test_procr   _minifier_procr   r   r   s                 r   _run_full_testzMinifierTestBase._run_full_test  s     	KK#~'H'HKKK''+{KK	n3:....#229g2NN	9!Y11555i(((4 	ni&6&=&=g&F&FGGGY''' sz2222(,(C(C'#	 )D )
 )
% 	oCJ////!%G!L!L
Jnj&7&>&>w&G&GHHHJ11555!*UUUUr   )r   N)r*   r+   r,   r<   r=   r;   classmethodr7   rO   r-   rZ   r   r   boolr   r   r   bytesr   tupler   r   r   r   intr   r   r   __classcell__)rE   s   @r   r1   r1   E   s         ""I
 
 
 
 
 [
,       [        KOAS AS ASSMAS/3AS:B3-AS		$U	+AS AS AS ASL%)	z*515c?B	C   , (*%)( ( (( (
  }( c]( 
z*5136	7( ( ( (: 26& & &&*.&	z*5136	7& & & &(s  3 SV    N (*&V &V &V&V &V !	&V &V  }&V 
$	%&V &V &V &V &V &V &V &Vr   r1   ) __doc__dataclassesrp   rr   r8   r   rK   r   r   r<   rz   collections.abcr   typingr   r   r   unittest.mockr   r@   torch._dynamotorch._dynamo.test_casetorch._dynamo.trace_rulesr   torch.utils._tracebackr	   	dataclassr   rA   	test_caseTestCaser1   r/   r   r   <module>r      s        				  				 				      



      $ $ $ $ $ $ ' ' ' ' ' ' ' ' ' '                4 4 4 4 4 4 A A A A A A 1 1 1 1 1 1 1 1>wV wV wV wV wVu}.7 wV wV wV wV wVr   