Ë
    g^(h).  ã                   ó$  — 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 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j0                  j2                  j4                  «      Zy)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                   ó:   — e Zd ZU eed<   eed<   d„ Z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       ú`/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/_dynamo/test_minifier_common.pyÚ_get_modulezMinifierTestResult._get_module+   si   € Ü—	‘	ÐPÐRSÓTˆØÐ Ð9Ð"9Ó9Ð Ø�K‰K˜‹NˆÜ�F‰F�7˜D !¬2¯<©<Ô8ˆÜ�F‰F�9˜f aÓ(ˆØ�w‰w‹yÐó    c                 ór   — d}t        j                  || j                  «      }|r|j                  d«      }|S y )Nz,torch\.export\.load\(\s*["\'](.*?)["\']\s*\)é   )r   r   r
   r   )r   Úpatternr   Ú	file_paths       r   Úget_exported_program_pathz,MinifierTestResult.get_exported_program_path3   s7   € ð Bˆä—	‘	˜' 4§?¡?Ó3ˆáØŸ™ A›ˆIØÐØr   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_moduleB   s   € Ø×Ñ §¡Ó0Ð0r   N)	Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__r   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	œ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_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   r3   zMinifierTestBase.setUpClassI   s{   ø€ ä‰ÑÔØ�‰×%Ñ%Ü�M‰M× Ñ ×&Ñ&°c·m±mÐ&ÓDô	
ð
 	�‰×%Ñ%Ü�O‰O×"Ñ"×(Ñ(ð (-à'(à&+ñó	õ	
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Úrmtreer9   Úprintr4   Úclose)r;   s    r   ÚtearDownClasszMinifierTestBase.tearDownClass^   sJ   € ä�9‰9Ð*¨CÓ0°CÒ7Ü�M‰M˜#Ÿ-™-Õ(äÐ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 = )r6   r7   r8   Úcodegen_configr:   )r   ÚdeviceÚbug_types      r   Ú_gen_codegen_fn_patch_codez+MinifierTestBase._gen_codegen_fn_patch_codef   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_outputrS   Úcheck) ÚlenÚopenÚreadr6   r7   r8   Úget_config_copyr:   ÚioÚStringIOÚloggingÚStreamHandlerÚ	getLoggerÚ
addHandlerr   rA   ÚgetcwdÚchdirr   r   ÚexecÚ	ExceptionÚ	tracebackÚ	print_excÚremoveHandlerÚresetÚload_configÚ
subprocessÚCompletedProcessÚgetvalueÚencodeÚrun)r   ÚargsÚisolaterS   ÚcodeÚfÚdynamo_configÚinductor_configÚstderrÚlog_handlerÚlogÚprev_cwdÚrcs                r   Ú_maybe_subprocess_runz&MinifierTestBase._maybe_subprocess_runn   së  € ÚÜ�t“9 ’>Ð' 4Ó'�>Ø˜‘7˜iÒ'Ð-¨Ó-Ð'Ø�A‰w˜$ŠÜ˜4“y A’~Ð+ tÓ+�~Ø˜A‘w�Ø�v‘ä˜4“y A’~Ð+ tÓ+�~Ü˜$˜q™'“]ð $ aØŸ6™6›8�D÷$à˜A˜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ñ YÔ2PÓ2Rñ YÜ˜T°
ÐRVÑ#WÔX÷Y÷ Yà�Bð
 ×%Ñ% kÔ2Ø�ÜŸ™ Ô*ô —M‘M×'Ñ'Õ)ä—‘×$Ñ$×0Ñ0°Ô?Ü—‘×&Ñ&×2Ñ2°?ÔCô ×.Ñ.ØØØØ—‘Ó!×(Ñ(¨Ó1ó	ð ð ˆÜ$ SÓ)�Ü—>‘> $°tÀÈEÔRÐR÷e$ñ $ú÷.Yñ Yú÷ Yñ Yûô !ò 5Ø�BÜ×'Ñ'¨V×4Ð4ð5ûð ×%Ñ% kÔ2Ø�ÜŸ™ Ô*ô —M‘M×'Ñ'Õ)ûä—‘×$Ñ$×0Ñ0°Ô?Ü—‘×&Ñ&×2Ñ2°?ÕCús}   Á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 )	NrV   rW   ©ry   rS   ztest stdout:r]   ztest stderr:z(\S+)minifier_launcher.pyr   )	rƒ   r9   rE   ÚstdoutÚdecoder~   r   r   r   )r   rz   ry   ÚprocÚrepro_dir_matchs        r   Ú_run_test_codezMinifierTestBase._run_test_code¯   s§   € Ø×)Ñ)Ø˜˜dÐ#¨W¸$¿.¹.ð *ó 
ˆô 	ˆn˜dŸk™k×0Ñ0°Ó9Ô:Üˆn˜dŸk™k×0Ñ0°Ó9Ô:ÜŸ)™)Ø(¨$¯+©+×*<Ñ*<¸WÓ*Eó
ˆð Ð&Ø˜×.Ñ.¨qÓ1Ð1Ð1Ø�TˆzÐr   r+   )Úminifier_argsÚrepro_afterc                ó\  — | j                  |«       t        t        j                  j	                  |d«      «      }t        |«      5 }|j                  «       }d d d «       | j                  t        j                  j                  |«      «       d|dg|¢}|s|dk7  r|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.pyrV   ÚminifyÚaot_inductorz--no-isolater…   zminifier stdout:r]   zminifier stderr:z#Input graph did not fail the tester)ÚassertIsNotNoner   rA   ÚpathÚjoinra   rb   Ú
assertTrueÚexistsÚappendrƒ   rE   r†   r‡   r~   ÚassertNotIn)r   Ú	repro_dirry   r‹   rŒ   Úlaunch_filer{   Úlaunch_coderx   Úlaunch_procr~   s              r   Ú_run_minifier_launcherz'MinifierTestBase._run_minifier_launcher¾   s  € ð 	×Ñ˜YÔ'Ü$¤R§W¡W§\¡\°)Ð=SÓ%TÓUˆÜ�+Óð 	# !ØŸ&™&›(ˆK÷	#à�‰œŸ™Ÿ™ {Ó3Ô4à˜;¨ÐA°=ÐAˆÙ˜;¨.Ò8ð �K‰K˜Ô'Ø×0Ñ0°¸wÈIÐ0ÓVˆÜÐ  +×"4Ñ"4×";Ñ";¸GÓ"DÔEØ×#Ñ#×*Ñ*¨7Ó3ˆÜÐ  &Ô)Ø×ÑÐ>ÀÔGà˜KÐ'Ð'÷	#ð 	#ús   ÁD"Ä"D+T©ry   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.pyrV   r…   zrepro stdout:r]   zrepro stderr:)r�   r   rA   r‘   r’   ra   rb   r“   r”   rƒ   rE   r†   r‡   r~   )r   r—   ry   Ú
repro_filer{   r
   Ú
repro_procs          r   Ú
_run_reprozMinifierTestBase._run_reproÕ   sÐ   € Ø×Ñ˜YÔ'Ü#¤B§G¡G§L¡L°¸JÓ$GÓHˆ
Ü�*Óð 	" ØŸ™›ˆJ÷	"à�‰œŸ™Ÿ™ zÓ2Ô3à×/Ñ/Ø˜
Ð#¨W¸)ð 0ó 
ˆ
ô 	ˆo˜z×0Ñ0×7Ñ7¸Ó@ÔAÜˆo˜z×0Ñ0×7Ñ7¸Ó@ÔAØ˜:Ð%Ð%÷	"ð 	"ús   ÁC1Ã1C:c                 ó8  — d}|dk(  rd}n|rd|› d�}dt        t        j                  j                  j	                  «       «      › dt        t        j
                  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   r6   r7   r8   rO   r:   r9   )r   Úrun_coderŒ   Úrepro_levelÚrepro_after_lines        r   Ú_gen_test_codez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   )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 )NrX   ÚAccuracyErroré   rU   zrunning testr[   rœ   r   r]   zrunning minifier)ry   r‹   rŒ   zrunning repro)r	   r
   )r¦   rE   Úsysr~   rŠ   ÚassertEqualÚ
returncodeÚassertIsNoneÚassertInr‡   r�   r›   r    ÚassertNotEqualr   )r   r£   rŒ   Úexpected_errorry   r‹   r¤   Ú	test_codeÚ	test_procr—   Ú_minifier_procr	   rŸ   r
   s                 r   Ú_run_full_testzMinifierTestBase._run_full_test  sZ  € ñ Ø‰KØÐ# ~¸Ò'HØ‰KàˆKØ×'Ñ'¨°+¸{ÓKˆ	Üˆn¤3§:¡:Õ.Ø#×2Ñ2°9ÀgÐ2ÓNÑˆ	�9ØÐ!à×Ñ˜Y×1Ñ1°1Ô5Ø×Ñ˜iÔ(Øð 	�‰�n i×&6Ñ&6×&=Ñ&=¸gÓ&FÔGØ×Ñ˜YÔ'ÜÐ ¤s§z¡zÕ2Ø(,×(CÑ(CØØØ'Ø#ð	 )Dó )
Ñ%ˆ˜ô 	ˆo¤C§J¡JÕ/Ø!%§¡°ÀG Ó!LÑˆ
�JØ�‰�n j×&7Ñ&7×&>Ñ&>¸wÓ&GÔHØ×Ñ˜J×1Ñ1°1Ô5Ü!°È*ÔUÐUr   )r&   r'   r(   ÚtempfileÚmkdtempr9   Úclassmethodr3   rG   rR   rƒ   rŠ   r›   r    r¦   r   r   rµ   Ú__classcell__)r<   s   @r   r-   r-   F   s‡   ø„ Ø �× Ñ Ó"€Iàó
ó ð
ð( ñ ó ð òð ;?ô <SòBð  46À4ô(ð. 04ô &ò$ðB PRò Và	Ð$Ñ	%÷ Vr   r-   )Ú__doc__Údataclassesrd   rf   rA   r   rC   rs   r«   r¶   rn   Útypingr   Úunittest.mockr   r6   Útorch._dynamoÚtorch._dynamo.test_caseÚtorch._dynamo.trace_rulesr   Útorch.utils._tracebackr   Ú	dataclassr   r7   Ú	test_caseÚTestCaser-   r+   r   r   ú<module>rÅ      s~   ðñó Û 	Û Û 	Û 	Û Û Û 
Û Û Ý Ý ã Û Û Ý 4Ý Að ×Ñ÷1ð 1ó ð1ô>aV�u—}‘}×.Ñ.×7Ñ7õ aVr   