
    Ph&                        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 e j&                   G d d             Z G d dej*                  j,                  j.                        Zy)	    N)Optional)patch)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       mC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\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rmtreer4   printr/   close)r6   s    r   tearDownClasszMinifierTestBase.tearDownClass@   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 = )r1   r2   r3   codegen_configr5   )r   devicebug_types      r   _gen_codegen_fn_patch_codez+MinifierTestBase._gen_codegen_fn_patch_codeH   st    IIII$$& ' (&&( ) *!'5h??_`h_k l 	r   N)cwdc                   |s^t        |      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        j                         }|t        j                   |       t#        d|      5  t%               5  t'        d	|d
       d d d        d d d        d}|
j/                  |	       |t        j                          t        j                  j1                          	 t        j                  j
                  j3                  |       t        j                  j
                  j3                  |       t5        j6                  ||d|j9                         j;                  d            S t5        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 2w xY w# |
j/                  |	       |t        j                          t        j                  j1                          w xY w# t        j                  j
                  j3                  |       t        j                  j
                  j3                  |       w xY w)N   r   python3r*   -c   ztorch._dynamozsys.argv__main__)r    __compile_source__filer   utf-8TF)capture_outputrN   check)lenopenreadr1   r2   r3   shallow_copy_dictr5   ioStringIOloggingStreamHandler	getLogger
addHandlerr<   getcwdchdirr   r   exec	Exception	traceback	print_excremoveHandlerresetload_config
subprocessCompletedProcessgetvalueencoderun)r   argsisolaterN   codefdynamo_configinductor_configstderrlog_handlerlogprev_cwdrcs                r   _maybe_subprocess_runz&MinifierTestBase._maybe_subprocess_runP   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{+*!yy{Hz402P2RT
RV#WX 3S0B
 %%k2* MM'')$$00?&&22?C ..!((1	  >>$tERR_ #], 3S2R00 ! 5B''V445 %%k2* MM'')$$00?&&22?Cs|   1I; AL 07J" 'J2JJ

J" AL ;JJ	JJJ" "!KK
 KK
 
ALL AM)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 )	NrQ   rR   rt   rN   ztest stdout:rX   ztest stderr:z(\S+)minifier_launcher.pyr*   )	r~   r4   r@   stdoutdecodery   r   r   r   )r   ru   rt   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                @   | j                  |       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.pyrQ   minifyz--no-isolater   zminifier stdout:rX   zminifier stderr:z#Input graph did not fail the tester)assertIsNotNoner<   pathjoinr\   r]   
assertTrueexistsappendr~   r@   r   r   ry   assertNotIn)
r   	repro_dirrt   r   launch_filerv   launch_coders   launch_procry   s
             r   _run_minifier_launcherz'MinifierTestBase._run_minifier_launcher   s    Y'ggll9.DE+!&&(K {34;A=AKK'00wI0V +"4"4";";G"DE##**73 &)>GK'' s   DDTrt   c                   | j                  |       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.pyrQ   r   zrepro stdout:rX   zrepro stderr:)r   r<   r   r   r\   r]   r   r   r~   r@   r   r   ry   )r   r   rt   
repro_filerv   r	   
repro_procs          r   
_run_reprozMinifierTestBase._run_repro   s    Y'WW\\)Z8
*J z23//
#W) 0 

 	oz0077@Aoz0077@A:%% s   C((C1c                     dt         j                  j                  j                          dt         j                  j                  j                          d| d| d| 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"
)r1   r2   r3   rJ   r5   r4   )r   run_coderepro_afterrepro_levels       r   _gen_test_codezMinifierTestBase._gen_test_code   s|     $$& ' (&&( ) *%%0M 2$$/= 1((,'7 8	
 	 		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 )NrS   AccuracyError   rP   zrunning testrV   r   r   rX   zrunning minifier)rt   r   zrunning repro)r   r	   )r   r@   sysry   r   assertEqual
returncodeassertIsNoneassertInr   r   r   r   assertNotEqualr   )r   r   r   expected_errorrt   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mkdtempr4   classmethodr.   rB   rM   r~   r   r   r   r   r   r   r   __classcell__)r7   s   @r   r'   r'   (   s       "I
 
(     ;? 9S| KM (& 04 &$
, PRV	$	%Vr   r'   )dataclassesr_   ra   r<   r   r>   rn   r   r   ri   typingr   unittest.mockr   r1   torch._dynamotorch._dynamo.test_casetorch.utils._tracebackr   	dataclassr   r2   	test_caseTestCaser'   r%   r   r   <module>r      st     	  	 	   
        A 1 1 1&LVu}}..77 LVr   