+
    –°³j4  ã                   ó>  € R t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIHt ^ RIHt ^ RIHt ^ RIt^ RIt^ RIt^ RIHt ^ RIHt R R lt]P2                   ! R	 R
4      4       t ! R R]P6                  P8                  P:                  4      tR# )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)Úpatch)Ú_as_posix_path)Úreport_compile_source_on_errorc                ó0   € V ^8„  d   QhR\         R\        /# )é   ÚoutputÚreturn)ÚbytesÚstr)Úformats   "Úc/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torch/_dynamo/test_minifier_common.pyÚ__annotate__r   %   s   € ÷ 4ñ 4¤eð 4´ñ 4ó    c                 ó(   € V P                  R RR7      # )úutf-8Úreplace)Úerrors)Údecode)r	   s   &r   Ú_decode_subprocess_outputr   %   s   € Ø�=‰=˜¨ˆ=Ó3Ð3r   c                   ót   a € ] tR t^)t o V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R	 ltR
t	V t
R# )ÚMinifierTestResultc                ó&   <€ V ^8„  d   QhRS[ RS[ /# )r   Útr
   ©r   )r   Ú__classdict__s   "€r   r   ÚMinifierTestResult.__annotate__.   s   ø€ ÷ ñ ™Sð ¡Sñ r   c                ó  € \         P                  ! R V4      pVf   \        R4      hVP                  ^ 4      p\         P                  ! RRV\         P
                  R7      p\         P                  ! RRV4      pVP                  4       # )z3class Repro\(torch\.nn\.Module\):\s+([ ].*\n| *\n)+zfailed to find modulez\s+$Ú
)Úflagsz\n{3,}z

)ÚreÚsearchÚAssertionErrorÚgroupÚsubÚ	MULTILINEÚstrip)Úselfr   ÚmatchÚrs   &&  r   Ú_get_moduleÚMinifierTestResult._get_module.   sh   € Ü—	’	ÐPÐRSÓTˆØŠ=Ü Ð!8Ó9Ð9Ø�K‰K˜‹NˆÜ�FŠF�7˜D !¬2¯<©<Ô8ˆÜ�FŠF�9˜f aÓ(ˆØ�w‰w‹yÐr   c                ó.   <€ V ^8„  d   QhRS[ R,          /# ©r   r
   Nr   )r   r   s   "€r   r   r   7   s   ø€ ÷ 
ñ 
©3°­:ñ 
r   c                ó€   € R p\         P                  ! WP                  4      pV'       d   VP                  ^4      pV# R# )z,torch\.export\.load\(\s*["\'](.*?)["\']\s*\)N)r!   r"   Ú
repro_coder$   )r(   Úpatternr)   Ú	file_paths   &   r   Úget_exported_program_pathÚ,MinifierTestResult.get_exported_program_path7   s5   € ð Bˆä—	’	˜'§?¡?Ó3ˆçØŸ™ A›ˆIØÐÙr   c                ó    <€ V ^8„  d   QhRS[ /# ©r   r
   r   )r   r   s   "€r   r   r   C   s   ø€ ÷ 4ñ 4¡ñ 4r   c                ó8   € V P                  V P                  4      # ©N)r+   Úminifier_code©r(   s   &r   Úminifier_moduleÚ"MinifierTestResult.minifier_moduleC   s   € Ø×Ñ × 2Ñ 2Ó3Ð3r   c                ó    <€ V ^8„  d   QhRS[ /# r6   r   )r   r   s   "€r   r   r   F   s   ø€ ÷ 1ñ 1™cñ 1r   c                ó8   € V P                  V P                  4      # r8   )r+   r0   r:   s   &r   Úrepro_moduleÚMinifierTestResult.repro_moduleF   s   € Ø×Ñ §¡Ó0Ð0r   c                ó2   <€ V ^8„  d   Qh/ S[ ;R&   S[ ;R&   # )r   r9   r0   r   )r   r   s   "€r   r   r   )   s   ø‡ ‚ áÑñ ñ �Oò r   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r+   r3   r;   r?   Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__)r   s   @r   r   r   )   s4   ø‡ € ÷
ð ÷
ð 
÷4ð 4÷1ð 1÷; ƒ r   r   c                   ó(  a a€ ] tR t^Jt o]P
                  ! 4       t]V3R lV 3R ll4       t]V3R lR l4       t	V3R lR lt
RR/V3R	 lR
 lltV3R lR ltRRRR/V3R lR lltRR/V3R lR lltV3R lR ltRR/V3R lR lltRtVtV ;t# )ÚMinifierTestBasec                ó   <€ V ^8„  d   QhRR/# r.   rB   )r   r   s   "€r   r   ÚMinifierTestBase.__annotate__N   s   ø€ ÷ 
ñ 
˜4ñ 
r   c           
     óà  <€ \         SV `  4        \        P                  P	                  V P
                  4      '       g   \        P                  ! 4       V n        V P                  P                  \        P                  P                  P                  V P
                  R 7      4       V P                  P                  \        P                  P                  P                  RRR^RR/4      4       R# ))Údebug_dir_rootÚpattern_matcherFÚcompile_threadszcpp.vec_isa_okN)ÚsuperÚ
setUpClassÚosÚpathÚexistsÚ	DEBUG_DIRÚtempfileÚmkdtempÚ_exit_stackÚenter_contextÚtorchÚ_dynamoÚconfigr   Ú	_inductor)ÚclsÚ	__class__s   &€r   rS   ÚMinifierTestBase.setUpClassM   s¨   ø€ ä‰ÑÔÜ�w‰w�~‰~˜cŸm™m×,Ò,Ü$×,Ò,Ó.ˆCŒMØ�‰×%Ñ%Ü�M‰M× Ñ ×&Ñ&°c·m±mÐ&ÓDô	
ð
 	�‰×%Ñ%Ü�O‰O×"Ñ"×(Ñ(ð & uà% qà$ eðó	ö	
r   c                ó   <€ V ^8„  d   QhRR/# r.   rB   )r   r   s   "€r   r   rM   e   s   ø€ ÷  ñ  ˜dñ  r   c                óä   € \         P                  ! R R4      R8w  d"   \        P                  ! V P                  4       M\        RV P                   24       V P                  P                  4        R# )ÚPYTORCH_KEEP_TMPDIRÚ0Ú1z%test_minifier_common tmpdir kept at: N)rT   ÚgetenvÚshutilÚrmtreerW   ÚprintrZ   Úclose)r`   s   &r   ÚtearDownClassÚMinifierTestBase.tearDownClassd   sJ   € ä�9Š9Ð*¨CÓ0°CÔ7Ü�MŠM˜#Ÿ-™-Õ(äÐ9¸#¿-¹-¸ÐIÔJØ�‰×ÑÖr   c                ó,   <€ V ^8„  d   QhRS[ RS[ RS[ /# )r   ÚdeviceÚbug_typer
   r   )r   r   s   "€r   r   rM   l   s"   ø€ ÷ 	ñ 	±ð 	Áð 	Éñ 	r   c                óö   € VR9  d   \        RV: 24      h\        P                  P                  P	                  4        R\        P
                  P                  P	                  4        RVR8X  d   RMR RV: R2# )	Úcompile_errorzDbug_type must be one of compile_error, runtime_error, accuracy, got r   z
torch._inductor.config.ÚcpuÚcppÚtritonz .inject_relu_bug_TESTING_ONLY = )rs   Úruntime_errorÚaccuracy)r#   r\   r]   r^   Úcodegen_configr_   )r(   rp   rq   s   &&&r   Ú_gen_codegen_fn_patch_codeÚ+MinifierTestBase._gen_codegen_fn_patch_codel   s‰   € ØÐIÔIÜ ØVÐW_ÑVbÐcóð ô ‡�×Ñ×$Ñ$Ó&Ð 'ð (Ü‡�×Ñ×&Ñ&Ó(Ð )ð *Ø!'¨5¤™°hÐ?Ð?_Ð`hÑ_kð lðð 	r   ÚcwdNc          	      ót   <€ V ^8„  d   QhRS[ S[,          RS[RS[R,          RS[P
                  S[,          /# )r   ÚargsÚisolater|   Nr
   )r   r   Úboolr   Ú
subprocessÚCompletedProcessr   )r   r   s   "€r   r   rM   w   sL   ø€ ÷ GSñ GSÙ™S•MðGSÙ/3ðGSÙ:=À½*ðGSá	×	$Ñ	$¡UÕ	+ñGSr   c               ó6  € ^ RI Hp V'       Eg×   \        V4      ^8  d   \        RV 24      hV^ ,          R8w  d   \        RV 24      hV^,          R8X  d,   \        V4      ^8w  d   \        RV 24      hV^,          pR.pM`\        V4      ^8  d   \        RV 24      h\	        V^,          4      ;_uu_ 4       pV! VP                  4       4      pRRR4       VR,          p\        P                  P                  P                  4       p\        P                  P                  P                  4       p \        P                  ! 4       p	\        P                  ! V	4      p
\        P                  ! R	4      pVP!                  V
4        \#        \$        P&                  ! 4       4      pVe"   \#        V4      p\$        P(                  ! V4       \+        R
V4      ;_uu_ 4        \-        4       ;_uu_ 4        \/        XRRRV/4       RRR4       RRR4       ^ pVP7                  V
4       Ve   \$        P(                  ! X4       \        P                  P9                  4         \        P                  P                  P;                  V4       \        P                  P                  P;                  V4       \<        P>                  ! VVRV	PA                  4       PC                  R4      4      # Ve   \#        V4      p\<        PD                  ! VRVRR7      #   + '       g   i     ELF; i  + '       g   i     EL*; i  + '       g   i     EL6; i  \0         d    ^p\2        P4                  ! T	R7        EL^i ; i  TP7                  T
4       Te   \$        P(                  ! X4       \        P                  P9                  4        i ; i  \        P                  P                  P;                  T4       \        P                  P                  P;                  T4       i ; i)é    )Únormalize_path_separatorzexpected at least 2 args, got Úpython3z&expected args[0] to be 'python3', got ú-cz)expected exactly 3 args for -c mode, got N:é   NNztorch._dynamozsys.argvrC   Ú__main__Ú__compile_source__©Úfiler   r   TF)Úcapture_outputr|   Úcheck)#Útorch._inductor.cpp_builderr…   Úlenr#   ÚopenÚreadr\   r]   r^   Úget_config_copyr_   ÚioÚStringIOÚloggingÚStreamHandlerÚ	getLoggerÚ
addHandlerr   rT   ÚgetcwdÚchdirr   r   ÚexecÚ	ExceptionÚ	tracebackÚ	print_excÚremoveHandlerÚresetÚload_configr�   r‚   ÚgetvalueÚencodeÚrun)r(   r~   r   r|   r…   ÚcodeÚfÚdynamo_configÚinductor_configÚstderrÚlog_handlerÚlogÚprev_cwdÚrcs   &&$$          r   Ú_maybe_subprocess_runÚ&MinifierTestBase._maybe_subprocess_runw   s  € õ 	IçˆwÜ�4‹y˜1Œ}Ü$Ð'EÀdÀVÐ%LÓMÐMØ�A�w˜)Ô#Ü$Ð'MÈdÈVÐ%TÓUÐUØ�A�w˜$ŒÜ�t“9 ”>Ü(ØCÀDÀ6ÐJóð ð ˜A•w�Ø�v‘ä�t“9˜q”=Ü(Ð+IÈ$ÈÐ)PÓQÐQÜ˜$˜q�'—]”] aá3°A·F±F³HÓ=�D÷ #ð ˜B•x�ô "ŸM™M×0Ñ0×@Ñ@ÓBˆMÜ#Ÿo™o×4Ñ4×DÑDÓFˆOðDÜŸš›�Ü%×3Ò3°FÓ;�Ü×'Ò'¨Ó8�Ø—‘˜{Ô+ð*Ü-¬b¯iªi«kÓ:�HØ’Ü,¨SÓ1˜ÜŸš œÜ˜z¨4×0Õ0Ô2P×2RÕ2RÜ˜T J°
Ð<PÐRVÐ#WÔX÷ 3S×0à�Bð
 ×%Ñ% kÔ2Ø’ÜŸš Ô*ô —M‘M×'Ñ'Õ)ä—‘×$Ñ$×0Ñ0°Ô?Ü—‘×&Ñ&×2Ñ2°?ÔCô ×.Ò.ØØØØ—‘Ó!×(Ñ(¨Ó1ó	ð ð ŠÜ$ SÓ)�Ü—>’> $°tÀÈEÔRÐR÷g #—]�]ú÷0 3S×2RÐ2Rú×0×0Ð0ûô !ô 5Ø�BÜ×'Ò'¨V×4Ð4ð5ûð ×%Ñ% kÔ2Ø’ÜŸš Ô*ô —M‘M×'Ñ'Õ)ûä—‘×$Ñ$×0Ñ0°Ô?Ü—‘×&Ñ&×2Ñ2°?ÕCús}   Â;LÄ4AO ÆAM ÇL7Ç1L#	ÈL7È

M ÈA	O ÌL 	Ì#L4Ì.	L7Ì7M	Í	M Í$M3Í/M6 Í2M3Í3M6 Í6AOÏO ÏAPc          	      óv   <€ V ^8„  d   QhRS[ RS[RS[S[P                  S[,          S[ S[,          3,          /# )r   r¦   r   r
   )r   r€   Útupler�   r‚   r   r   )r   r   s   "€r   r   rM   Ã   s>   ø€ ÷ ñ ÙðÙ%)ðá	‰z×*Ñ*©5Õ1±3¹µ9Ð<Õ	=ñr   c               ó$  € V P                  R RV.W P                  R7      p\        R\        VP                  4      4       \        VP
                  4      p\        RV4       \        P                  ! RV4      pVe   W5P                  ^4      3# VR3# )r†   r‡   ©r   r|   ztest stdout:ztest stderr:z(\S+)minifier_launcher.pyN)	r¯   rW   rk   r   Ústdoutrª   r!   r"   r$   )r(   r¦   r   Úprocrª   Úrepro_dir_matchs   &&$   r   Ú_run_test_codeÚMinifierTestBase._run_test_codeÃ   sŒ   € ð ×)Ñ)Ø˜˜dÐ#¨W¿.¹.ð *ó 
ˆô 	ˆnÔ7¸¿¹ÓDÔEÜ*¨4¯;©;Ó7ˆÜˆn˜fÔ%ÜŸ)š)Ð$@À&ÓIˆØÒ&Ø×.Ñ.¨qÓ1Ð1Ð1Ø�TˆzÐr   Úminifier_argsÚrepro_afterc                ó�   <€ V ^8„  d   QhRS[ RS[RS[S[,          RS[ R,          RS[S[P                  S[,          S[ 3,          /# )r   Ú	repro_dirr   rº   r»   Nr
   )r   r€   r   r   r²   r�   r‚   r   )r   r   s   "€r   r   rM   Ó   sZ   ø€ ÷ (ñ (áð(ñ ð(ñ
  ¡•}ð(ñ ˜4•Zð(ñ 
‰z×*Ñ*©5Õ1±3Ð6Õ	7ñ(r   c               óp  € V P                  V4       \        \        P                  P	                  VR 4      4      p\        V4      ;_uu_ 4       pVP                  4       pRRR4       V P                  \        P                  P                  V4      4       RVR.VOpV'       g   VR8w  d   VP                  R4       V P                  W‚VR7      p	\        R\        V	P                  4      4       \        V	P                  4      p
\        RV
4       V P                  R	V
4       V	X3#   + '       g   i     LÎ; i)
zminifier_launcher.pyNr†   ÚminifyÚaot_inductorz--no-isolater´   zminifier stdout:zminifier stderr:z#Input graph did not fail the tester)ÚassertIsNotNoner   rT   rU   Újoinr‘   r’   Ú
assertTruerV   Úappendr¯   rk   r   rµ   rª   ÚassertNotIn)r(   r½   r   rº   r»   Úlaunch_filer§   Úlaunch_coder~   Úlaunch_procrª   s   &&&$$      r   Ú_run_minifier_launcherÚ'MinifierTestBase._run_minifier_launcherÓ   sù   € ð 	×Ñ˜YÔ'Ü$¤R§W¡W§\¡\°)Ð=SÓ%TÓUˆÜ�+×Ô !ØŸ&™&›(ˆK÷ ð 	�‰œŸ™Ÿ™ {Ó3Ô4à˜;¨ÐA°=ÐAˆß˜;¨.Ô8ð �K‰K˜Ô'Ø×0Ñ0°ÈIÐ0ÓVˆÜÐ Ô";¸K×<NÑ<NÓ"OÔPÜ*¨;×+=Ñ+=Ó>ˆÜÐ  &Ô)à×ÑÐ>ÀÔGà˜KÐ'Ð'÷# ×ús   ÁD%Ä%D5	r   Tc                óf   <€ V ^8„  d   QhRS[ RS[RS[S[P                  S[,          S[ 3,          /# )r   r½   r   r
   )r   r€   r²   r�   r‚   r   )r   r   s   "€r   r   rM   ñ   s:   ø€ ÷ &ñ &Ùð&Ù*.ð&á	‰z×*Ñ*©5Õ1±3Ð6Õ	7ñ&r   c               óþ  € V P                  V4       \        \        P                  P	                  VR 4      4      p\        V4      ;_uu_ 4       pVP                  4       pRRR4       V P                  \        P                  P                  V4      4       V P                  RV.W!R7      p\        R\        VP                  4      4       \        R\        VP                  4      4       VX3#   + '       g   i     L•; i)zrepro.pyNr†   r´   zrepro stdout:zrepro stderr:)rÁ   r   rT   rU   rÂ   r‘   r’   rÃ   rV   r¯   rk   r   rµ   rª   )r(   r½   r   Ú
repro_filer§   r0   Ú
repro_procs   &&$    r   Ú
_run_reproÚMinifierTestBase._run_reproñ   sÄ   € ð 	×Ñ˜YÔ'Ü#¤B§G¡G§L¡L°¸JÓ$GÓHˆ
Ü�*×Ô ØŸ™›ˆJ÷ ð 	�‰œŸ™Ÿ™ zÓ2Ô3à×/Ñ/Ø˜
Ð#¨Wð 0ó 
ˆ
ô 	ˆoÔ8¸×9JÑ9JÓKÔLÜˆoÔ8¸×9JÑ9JÓKÔLØ˜:Ð%Ð%÷ ×ús   ÁC,Ã,C<	c                ó2   <€ V ^8„  d   QhRS[ RS[ RS[RS[ /# )r   Úrun_coder»   Úrepro_levelr
   )r   Úint)r   r   s   "€r   r   rM     s*   ø€ ÷ ñ ¡sð ¹ð É3ð ÑSVñ r   c                óH  € R pVR8X  d   RpMV'       d   RV R2pR\        \        P                  P                  P	                  4       4       R\        \        P
                  P                  P	                  4       4       RV RV RV R	\        V P                  4       R
V R2# )Ú 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   r_   rW   )r(   rÒ   r»   rÓ   Úrepro_after_lines   &&&& r   Ú_gen_test_codeÚMinifierTestBase._gen_test_code  sÊ   € ØÐØ˜.Ô(àOñ ÷ ð$%Ø%0 Mð 2	ð Ððô ”—‘×$Ñ$×3Ñ3Ó5Ó6Ð 7ð 8Ü”—‘×&Ñ&×5Ñ5Ó7Ó8Ð 9ð :ØÐ ð $Ø$/ =ð 13Ø3>°-ð @(Ü(6°t·~±~Ó(FÐ'Gð HØ	€
ð ðð 	r   c                ój   <€ V ^8„  d   QhRS[ RS[ RS[ R,          RS[RS[S[,          RS[R,          /# )r   rÒ   r»   Úexpected_errorNr   rº   r
   )r   r€   r   r   r   )r   r   s   "€r   r   rM   &  s\   ø€ ÷ *Vñ *Váð*Vñ ð*Vñ ˜d�
ð	*Vñ ð*Vñ  ¡•}ð*Vñ 
˜dÕ	"ñ*Vr   c               óè  € V'       d   ^pMVe   VR8X  d   ^pM^pV P                  WV4      p\        R\        P                  R7       V P	                  WtR7      w  r‰Vf0   V P                  VP                  ^ 4       V P                  V	4       R# V P                  V\        VP                  4      4       V P                  V	4       \        R\        P                  R7       V P                  V	VVVR7      w  r«\        R\        P                  R7       V P                  W”R7      w  rÍV P                  V\        VP                  4      4       V P                  VP                  ^ 4       \        W½R	7      # )
é   NÚAccuracyErrorzrunning testr‹   )r   zrunning minifier)r   rº   r»   zrunning repro)r9   r0   )rØ   rk   Úsysrª   r¸   ÚassertEqualÚ
returncodeÚassertIsNoneÚassertInr   rÁ   rÉ   rÏ   ÚassertNotEqualr   )r(   rÒ   r»   rÛ   r   rº   rÓ   Ú	test_codeÚ	test_procr½   Ú_minifier_procr9   rÎ   r0   s   &&&&$$        r   Ú_run_full_testÚMinifierTestBase._run_full_test&  sB  € ÷ Ø‰KØÒ# ~¸Ô'HØ‰KàˆKØ×'Ñ'¨¸{ÓKˆ	Üˆn¤3§:¡:Õ.Ø#×2Ñ2°9Ð2ÓNÑˆ	ØÒ!à×Ñ˜Y×1Ñ1°1Ô5à×Ñ˜iÔ(Ùð 	�‰�nÔ&?À	×@PÑ@PÓ&QÔRà×Ñ˜YÔ'ÜÐ ¤s§z¡zÕ2Ø(,×(CÑ(CØØØ'Ø#ð	 )Dó )
Ñ%ˆô 	ˆo¤C§J¡JÕ/Ø!%§¡° Ó!LÑˆ
à�‰�nÔ&?À
×@QÑ@QÓ&RÔSØ×Ñ˜J×1Ñ1°1Ô5Ü!°ÔUÐUr   rB   )rC   rD   rE   rF   rX   rY   rW   ÚclassmethodrS   rm   rz   r¯   r¸   rÉ   rÏ   rØ   rè   rH   rI   Ú__classcell__)ra   r   s   @@r   rK   rK   J   sÃ   ù‡ € Ø× Ò Ó"€Ià÷
ò 
ó ð
ð, ÷ ó ð ÷	ð 	ðGSØGK÷GSò GS÷Xð ð (ð
 (*ð(ð #'÷(ò (ð<&Ø15÷&ò &÷*ð ð@*Vð (*÷*V÷ *Vò *Vr   rK   )Ú__doc__Údataclassesr”   r–   rT   r!   ri   r�   rß   rX   rž   Úcollections.abcr   Útypingr   Úunittest.mockr   r\   Útorch._dynamoÚtorch._dynamo.test_caseÚtorch._dynamo.trace_rulesr   Útorch.utils._tracebackr   r   Ú	dataclassr   r]   Ú	test_caseÚTestCaserK   rB   r   r   Ú<module>rø      s‡   ðñó Û 	Û Û 	Û 	Û Û Û 
Û Û Ý $Ý Ý ã Û Û Ý 4Ý Aõ4ð ×Ñ÷1ð 1ó ð1ô@FV�u—}‘}×.Ñ.×7Ñ7ö FVr   