
    ɯwg5'                         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 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.                  j0                  j2                        Zy)
    N)Optional)patch)_as_posix_path)report_compile_source_on_errorc                   4    e Zd ZU eed<   eed<   d Zd Zd Zy)MinifierTestResultminifier_code
repro_codec                     t        j                  d|      }|J d       |j                  d      }t        j                  dd|t         j                        }t        j                  dd|      }|j                         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)selftmatchrs       g/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/torch/_dynamo/test_minifier_common.py_get_modulezMinifierTestResult._get_module   si    		PRST 9"99 KKNFF7D!2<<8FF9fa(wwy    c                 8    | j                  | j                        S N)r   r	   r   s    r   minifier_modulez"MinifierTestResult.minifier_module#   s     2 233r   c                 8    | j                  | j                        S r   )r   r
   r   s    r   repro_modulezMinifierTestResult.repro_module&   s    00r   N)__name__
__module____qualname__str__annotations__r   r   r     r   r   r   r      s    O41r   r   c                        e Zd Z ej                         Ze fd       Zed        Zd Z	dddZ
d Zdd	d
ZdddZd Zdd	dee   fdZ xZS )MinifierTestBasec                 H   t         |           | j                  j                  t        j
                  j                  j                  | j                               | j                  j                  t        j                  j                  j                  dddd             y )N)debug_dir_rootF   )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/   zMinifierTestBase.setUpClass-   s{    %%MM  &&cmm&D	

 	%%OO""(( (-'(&+		
r   c                     t        j                  dd      dk7  r t        j                  | j                         nt        d| j                          | j                  j                          y )NPYTORCH_KEEP_TMPDIR01z%test_minifier_common tmpdir kept at: )osgetenvshutilrmtreer5   printr0   close)r7   s    r   tearDownClasszMinifierTestBase.tearDownClassB   sJ    99*C0C7MM#--(9#--IJr   c                     |dv sJ t         j                  j                  j                          dt         j                  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 = )r2   r3   r4   codegen_configr6   )r   devicebug_types      r   _gen_codegen_fn_patch_codez+MinifierTestBase._gen_codegen_fn_patch_codeJ   st    IIII$$& ' (&&( ) *!'5h??_`h_k l 	r   N)cwdc                   |srt        |      dk\  sJ |       |d   dk(  sJ |       |d   dk(  rt        |      dk(  sJ |       |d   }dg}nAt        |      dk\  sJ |       t        |d         5 }|j                         }d d d        |dd  }t        j                  j
                  j                         }t        j                  j
                  j                         }	 t        j                         }t        j                  |      }	t        j                  d      }
|
j                  |	       	 t        t        j                                }| t        |      }t        j"                  |       t%        d|      5  t'               5  t)        d	|d
       d d d        d d d        d}|
j1                  |	       |t        j"                         t        j                  j3                          	 t        j                  j
                  j5                  |       t        j                  j
                  j5                  |       t7        j8                  ||d|j;                         j=                  d            S |t        |      }t7        j>                  |d|d      S # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# t*        $ r d}t-        j.                  |       Y ?w xY w# |
j1                  |	       |t        j"                         t        j                  j3                          w xY w# t        j                  j
                  j5                  |       t        j                  j
                  j5                  |       w xY w)N   r   python3r+   -c   ztorch._dynamozsys.argv__main__)r!   __compile_source__filer   utf-8TF)capture_outputrO   check) lenopenreadr2   r3   r4   shallow_copy_dictr6   ioStringIOloggingStreamHandler	getLogger
addHandlerr   r=   getcwdchdirr   r   exec	Exception	traceback	print_excremoveHandlerresetload_config
subprocessCompletedProcessgetvalueencoderun)r   argsisolaterO   codefdynamo_configinductor_configstderrlog_handlerlogprev_cwdrcs                r   _maybe_subprocess_runz&MinifierTestBase._maybe_subprocess_runR   s   t9>'4'>7i'--'Aw$4yA~+t+~Awv4yA~+t+~$q'] $a668D$ABx "MM00BBDM#oo44FFHOD%33F;''8{+*-biik:H,S1z40 Y2P2R YT
RV#WXY YB
 %%k2* MM'')$$00?&&22?C ..!((1	  $S)>>$tERRe$ $.Y Y Y Y ! 5B''V445 %%k2* MM'')$$00?&&22?Cs}   1J AL6 0AK ;J6J)J6
K (AL6 J&)J3	.J66K ;K !K($K+ 'K((K+ +AL33L6 6AN
c                h   | j                  dd|g|| j                        }t        d|j                  j	                  d             t        d|j
                  j	                  d             t        j                  d|j
                  j	                  d            }|||j                  d      fS |d fS )	NrR   rS   ru   rO   ztest stdout:rY   ztest stderr:z(\S+)minifier_launcher.pyr+   )	r   r5   rA   stdoutdecoderz   r   r   r   )r   rv   ru   procrepro_dir_matchs        r   _run_test_codez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_argsc                R   | j                  |       t        t        j                  j	                  |d            }t        |      5 }|j                         }d d d        | j                  t        j                  j                  |             d|dg|}|s|j                  d       | j                  |||      }t        d|j                  j                  d             |j                  j                  d      }	t        d|	       | j                  d	|	       |fS # 1 sw Y   xY w)
Nzminifier_launcher.pyrR   minifyz--no-isolater   zminifier stdout:rY   zminifier stderr:z#Input graph did not fail the tester)assertIsNotNoner   r=   pathjoinr]   r^   
assertTrueexistsappendr   rA   r   r   rz   assertNotIn)
r   	repro_dirru   r   launch_filerw   launch_codert   launch_procrz   s
             r   _run_minifier_launcherz'MinifierTestBase._run_minifier_launcher   s    Y'$RWW\\)=S%TU+ 	#!&&(K	#{34;A=AKK'00wI0V +"4"4";";G"DE##**73 &)>GK''	# 	#s   DD&Tru   c                   | j                  |       t        t        j                  j	                  |d            }t        |      5 }|j                         }d d d        | j                  t        j                  j                  |             | j                  d|g||      }t        d|j                  j                  d             t        d|j                  j                  d             |fS # 1 sw Y   xY w)Nzrepro.pyrR   r   zrepro stdout:rY   zrepro stderr:)r   r   r=   r   r   r]   r^   r   r   r   rA   r   r   rz   )r   r   ru   
repro_filerw   r
   
repro_procs          r   
_run_reproz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   C11C:c                    dt        t        j                  j                  j	                                dt        t        j
                  j                  j	                                d| d| dt        | j                         d| dS )Nz"import torch
import torch._dynamo
r   z%
torch._dynamo.config.repro_after = "z%"
torch._dynamo.config.repro_level = z(
torch._dynamo.config.debug_dir_root = "z"
)r   r2   r3   r4   rK   r6   r5   )r   run_coderepro_afterrepro_levels       r   _gen_test_codezMinifierTestBase._gen_test_code   s     $$3356 7 8&&5578 9 :%%0M 2$$/= 1((6t~~(F'G H	
 	 		r   returnc                   |rd}n||dk(  rd}nd}| j                  |||      }t        dt        j                         | j	                  ||      \  }}	|.| j                  |j                  d       | j                  |	       y | j                  ||j                  j                  d	             | j                  |	       t        d
t        j                         | j                  |	||      \  }
}t        dt        j                         | j                  |	|      \  }}| j                  ||j                  j                  d	             | j                  |j                  d       t        ||      S )NrT   AccuracyError   rQ   zrunning testrW   r   r   rY   zrunning minifier)ru   r   zrunning repro)r	   r
   )r   rA   sysrz   r   assertEqual
returncodeassertIsNoneassertInr   r   r   r   assertNotEqualr   )r   r   r   expected_errorru   r   r   	test_code	test_procr   minifier_procr	   r   r
   s                 r   _run_full_testzMinifierTestBase._run_full_test   sU    K#~'HKK''+{K	n3::.#229g2N	9!Y1115i( 	ni&6&6&=&=g&FGY' szz2'+'B'Bwm (C (
$} 	oCJJ/!%G!L
Jnj&7&7&>&>w&GHJ1115!*UUr   )r!   r"   r#   tempfilemkdtempr5   classmethodr/   rC   rN   r   r   r   r   r   r   r   r   __classcell__)r8   s   @r   r(   r(   *   s       "I
 
(     ;? <SB KM (& 04 &$
, PRV	$	%Vr   r(   )dataclassesr`   rb   r=   r   r?   ro   r   r   rj   typingr   unittest.mockr   r2   torch._dynamotorch._dynamo.test_casetorch._dynamo.trace_rulesr   torch.utils._tracebackr   	dataclassr   r3   	test_caseTestCaser(   r&   r   r   <module>r      sw     	  	 	   
        4 A 1 1 1&OVu}}..77 OVr   