Ë
    L²j°   ã                   ó&  — 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	m
Z
 ddlmZ ddlZddlZddlmZ ddlmZ ddlmZmZmZmZ dd	lmZmZmZ  ej:                  e«      Zdd
e e!e df   z  ddfd„Z" G d„ de«      Z G d„ de«      Z#y)aŸ  Testing utilities for Dynamo, providing a specialized TestCase class and test running functionality.

This module extends PyTorch's testing framework with Dynamo-specific testing capabilities.
It includes:
- A custom TestCase class that handles Dynamo-specific setup/teardown
- Test running utilities with dependency checking
- Automatic reset of Dynamo state between tests
- Proper handling of gradient mode state
é    N)ÚCallable)ÚAny)Ú	polyfills)Ú	trace_log)Ú
IS_WINDOWSÚTEST_WITH_CROSSREFÚTEST_WITH_TORCHDYNAMOÚTestCaseé   )ÚconfigÚresetÚutilsÚneeds.Úreturnc                 ó”  — ddl m} t        st        ry t        j
                  j                  «       s*t        r$t        j                  j                  dd«      dk(  ry t        | t        «      r| f} | D ]>  }|dk(  r!t        j                  j                  «       rŒ' y 	 t        j                  |«       Œ@  |«        y # t         $ r Y  y w xY w)Nr   )Ú	run_testsÚTORCHINDUCTOR_WINDOWS_TESTSÚ0Úcuda)Ú$torch.testing._internal.common_utilsr   r	   r   ÚtorchÚxpuÚis_availabler   ÚosÚenvironÚgetÚ
isinstanceÚstrr   Ú	importlibÚimport_moduleÚImportError)r   r   Úneeds      úV/var/www/html/ia-enhanced/venv/lib/python3.12/site-packages/torch/_dynamo/test_case.pyr   r   '   s¦   € Ý>åÕ 2Øô �I‰I×"Ñ"Ô$ÝÜ�J‰J�N‰NÐ8¸#Ó>À#ÒEàä�%œÔØ�ˆØò ˆØ�6Š>Ü—:‘:×*Ñ*Õ,ÙðÜ×'Ñ'¨Õ-ðñ …Køô ò Úðús   ÂB:Â:	CÃCc            
       ó˜   ‡ — e Zd ZU ej                  ed<   edˆ fd„«       Zedˆ fd„«       Zdˆ fd„Z	dˆ fd„Z
ded	ed
ededdf
ˆ fd„Zˆ xZS )r
   Ú_exit_stackr   Nc                 óV   •— | j                   j                  «        t        ‰| �  «        y ©N)r%   ÚcloseÚsuperÚtearDownClass©ÚclsÚ	__class__s    €r#   r*   zTestCase.tearDownClassF   s   ø€ à�‰×ÑÔÜ‰ÑÕó    c                 ó¶   •— t         ‰| �  «        t        j                  «       | _        | j                  j                  t        j                  ddd¬«      «       y )NTF)Úraise_on_ctx_manager_usageÚsuppress_errorsÚlog_compilation_metrics)r)   Ú
setUpClassÚ
contextlibÚ	ExitStackr%   Úenter_contextr   Úpatchr+   s    €r#   r3   zTestCase.setUpClassK   sE   ø€ ä‰ÑÔÜ$×.Ñ.Ó0ˆŒØ�‰×%Ñ%Ü�L‰LØ+/Ø %Ø(-ôõ	
r.   c                 óT  •— t        j                  «       | _        t        j                  | _        dt        _        t        ‰| �  «        t        «        t        j                  j                  «        t        j                  «       | _        t        j                   | j                  «       y )NT)r   Úis_grad_enabledÚ_prior_is_grad_enabledr   Únested_graph_breaksÚ_prior_nested_graph_breaksr)   ÚsetUpr   r   ÚcountersÚclearÚloggingÚNullHandlerÚhandlerr   Ú
addHandler)Úselfr-   s    €r#   r=   zTestCase.setUpW   sj   ø€ Ü&+×&;Ñ&;Ó&=ˆÔ#Ü*0×*DÑ*DˆÔ'Ø%)ŒÔ"Ü‰‰ŒÜŒÜ�‰×ÑÔÜ×*Ñ*Ó,ˆŒÜ×Ñ˜TŸ\™\Õ*r.   c                 óh  •— t        j                  | j                  «       t        j                  j                  «       D ]*  \  }}t        j                  d||j                  «       «       Œ, t        «        t        j                  j                  «        t        j                  j                  j                  «        t        ‰| �A  «        | j"                  t        j$                  «       ur4t        j'                  d«       t        j(                  | j"                  «       | j*                  t,        _        y )Nz%s %szRunning test changed grad mode)r   ÚremoveHandlerrB   r   r>   ÚitemsÚlogÚdebugÚmost_commonr   r?   r   Ú_CÚ	_autogradÚ_saved_tensors_hooks_enabler)   ÚtearDownr:   r9   ÚwarningÚset_grad_enabledr<   r   r;   )rD   ÚkÚvr-   s      €r#   rN   zTestCase.tearDowna   sÇ   ø€ Ü×Ñ §¡Ô-Ü—N‘N×(Ñ(Ó*ò 	3‰DˆAˆqÜ�I‰I�g˜q !§-¡-£/Õ2ð	3äŒÜ�‰×ÑÔÜ�‰×Ñ×6Ñ6Ô8Ü‰ÑÔØ×&Ñ&¬e×.CÑ.CÓ.EÑEÜ�K‰KÐ8Ô9Ü×"Ñ" 4×#>Ñ#>Ô?Ø%)×%DÑ%DŒÕ"r.   ÚxÚyÚargsÚkwargsc                 ó¶   •— t         j                  rt        |t        j                  «      st        |t        j                  «      ry t        ‰| �  ||g|¢­i |¤ŽS r'   )r   Údebug_disable_compile_counterr   r   ÚCompileCounterIntr)   ÚassertEqual)rD   rS   rT   rU   rV   r-   s        €r#   rZ   zTestCase.assertEqualn   sK   ø€ ä×0Ò0Ü˜1œe×5Ñ5Ô6Ü˜!œU×4Ñ4Ô5àÜ‰wÑ" 1 aÐ9¨$Ò9°&Ñ9Ð9r.   ©r   N)Ú__name__Ú
__module__Ú__qualname__r4   r5   Ú__annotations__Úclassmethodr*   r3   r=   rN   r   rZ   Ú__classcell__©r-   s   @r#   r
   r
   C   sm   ø… Ø×%Ñ%Ó%àô ó ð ð ô	
ó ð	
õ+õEð:˜Sð : Sð :°ð :Àð :È÷ :ñ :r.   r
   c            
       ód  ‡ — e Zd ZU dZej
                  ed<   dZej                  j                  Z
ej                  j                  Zej                  j                  Zej                  j                  Zej                  j                  Zej                  j                  Zej                  j                   Zej                  j"                  Zej                  j$                  Zej                  j&                  Zej                  j(                  Zej                  j*                  Zej                  j,                  Zej                  j.                  Zej                  j0                  Zej                  j2                  Zej                  j4                  Zej                  j6                  Zej                  j8                  Zej                  j:                  Zej                  j<                  Zej@                  Z!ejD                  Z#ej                  jH                  Z$ej                  jJ                  Z%ej                  jL                  Z&ejN                  Z(ej                  jR                  Z)ej                  jT                  Z*ej                  jV                  Z+ej                  jX                  Z,ej                  jZ                  Z-ej                  j\                  Z.ej                  j^                  Z/de0de1f   de2e0de1f   z  de3de0de1f   fd	„Z4de2fˆ fd
„Z5e6dˆ fd„«       Z7e6dˆ fd„«       Z8de2de0ddfd„Z9ˆ xZ:S )ÚCPythonTestCasezË
    Test class for CPython tests located in "test/dynamo/CPython/Py_version/*".

    This class enables specific features that are disabled by default, such as
    tracing through unittest methods.
    Ú_stackTÚfn.ÚbackendÚnopythonr   c                 ó¬   — t        | | j                  «      }t        j                  j	                  ||¬«      |«      }t        | | j                  |«       |S )N)Úerror_on_graph_break)ÚgetattrÚ_testMethodNamer   Ú_dynamoÚoptimizeÚsetattr)rD   rf   rg   rh   Úmethods        r#   Ú
compile_fnzCPythonTestCase.compile_fn­   sL   € ô ˜˜t×3Ñ3Ó4ˆÜ—‘×'Ñ'¨ÀhÐ'ÓOÐPVÓWˆä��d×*Ñ*¨FÔ3Øˆ	r.   c                 ó²  •— t         ‰| �  «       }| j                  }t        j                  |«      j                  t        j                  «      d   j                  d«      d   }t        j                  dt        j                  |«      «      }|r>|j                  «       j                  t        j                  «      j                  dd«      }n|S d|› d|› d|› �S )	Néÿÿÿÿú.r   z
/([\d_]+)/Ú_Ú ÚCPythonú-)r)   Ú_dynamo_test_keyr-   ÚinspectÚgetfileÚsplitr   ÚsepÚreÚsearchÚgroupÚstripÚreplace)rD   ÚsuffixÚtest_clsÚ	test_fileÚpy_verr-   s        €r#   ry   z CPythonTestCase._dynamo_test_key¼   s¬   ø€ Ü‘Ñ)Ó+ˆØ—>‘>ˆÜ—O‘O HÓ-×3Ñ3´B·F±FÓ;¸BÑ?×EÑEÀcÓJÈ1ÑMˆ	Ü—‘˜=¬'¯/©/¸(Ó*CÓDˆÙØ—\‘\“^×)Ñ)¬"¯&©&Ó1×9Ñ9¸#¸rÓB‰FàˆMØ˜˜  ) ¨A¨f¨XÐ6Ð6r.   Nc                 óV   •— | j                   j                  «        t        ‰| �  «        y r'   )re   r(   r)   r*   r+   s    €r#   r*   zCPythonTestCase.tearDownClassÇ   s   ø€ à�
‰
×ÑÔÜ‰ÑÕr.   c                 ót  •— t         j                  j                  dd«      t         j                  j                  z   }t	        j
                  |«      dz   }t        j                  | «      }t	        j                  ||«      }|r¶t        t        t        |j                  «       j                  |«      j                  d«      «      «      }t        j                   d d }||k7  r„dj                  t        t"        |«      «      }dj                  t        t"        |«      «      }t%        j&                  d|› d|› �«      ‚t%        j&                  d	t        j                  | «      › �«      ‚t(        ‰	| �U  «        t-        j.                  «       | _        | j0                  j3                  t5        j6                  d
¬«      «       y )NÚdynamoÚcpythonz\d_\d{2}ru   é   rt   zTest requires Python z but got Python z>Test requires a specific Python version but not found in path T)Úenable_trace_unittest)r   ÚpathÚjoinr}   r~   Úescaperz   r{   r   ÚtupleÚmapÚintr€   Úremoveprefixr|   ÚsysÚversion_infor   ÚunittestÚSkipTestr)   r3   r4   r5   re   r6   r   r7   )
r,   ÚprefixÚregexÚsearch_pathÚmÚtest_py_verr†   ÚexpectedÚgotr-   s
            €r#   r3   zCPythonTestCase.setUpClassÌ   sZ  ø€ ô —‘—‘˜h¨	Ó2´R·W±W·[±[Ñ@ˆÜ—	‘	˜&Ó! KÑ/ˆÜ—o‘o cÓ*ˆÜ�I‰I�e˜[Ó)ˆÙÜ¤¤C¨¯©«×)?Ñ)?ÀÓ)G×)MÑ)MÈcÓ)RÓ SÓTˆKÜ×%Ñ% b qÐ)ˆFØ˜Ò$ØŸ8™8¤C¬¨[Ó$9Ó:�Ø—h‘hœs¤3¨Ó/Ó0�Ü×'Ñ'Ø+¨H¨:Ð5EÀcÀUÐKóð ô ×#Ñ#ØPÔQX×Q`ÑQ`ÐadÓQeÐPfÐgóð ô 	‰ÑÔÜ×)Ñ)Ó+ˆŒ
Ø�
‰
× Ñ Ü�L‰LØ&*ôõ	
r.   Úmethod_nameÚpolicyc                  ó   — y r'   © )rD   rŸ   r    s      r#   Úwrap_with_policyz CPythonTestCase.wrap_with_policyê   s   € Ør.   r[   );r\   r]   r^   Ú__doc__r4   r5   r_   Údynamo_strict_nopythonr–   r
   rZ   ÚassertNotEqualÚ
assertTrueÚassertFalseÚassertIsÚassertIsNotÚassertIsNoneÚassertIsNotNoneÚassertInÚassertNotInÚassertIsInstanceÚassertNotIsInstanceÚassertAlmostEqualÚassertNotAlmostEqualÚassertGreaterÚassertGreaterEqualÚ
assertLessÚassertLessEqualÚassertRegexÚassertNotRegexÚassertCountEqualr   Úassert_multi_line_equalÚassertMultiLineEqualÚassert_sequence_equalÚassertSequenceEqualÚassertListEqualÚassertTupleEqualÚassertSetEqualÚassert_dict_equalÚassertDictEqualÚassertRaisesÚassertRaisesRegexÚassertWarnsÚassertWarnsRegexÚ
assertLogsÚfailÚfailureExceptionr   r   r   Úboolrq   ry   r`   r*   r3   r£   ra   rb   s   @r#   rd   rd   {   só  ø… ñð × Ñ Ó Ø!Ðð ×#Ñ#×/Ñ/€KØ×&Ñ&×5Ñ5€NØ×"Ñ"×-Ñ-€JØ×#Ñ#×/Ñ/€KØ× Ñ ×)Ñ)€HØ×#Ñ#×/Ñ/€KØ×$Ñ$×1Ñ1€LØ×'Ñ'×7Ñ7€OØ× Ñ ×)Ñ)€HØ×#Ñ#×/Ñ/€KØ×(Ñ(×9Ñ9ÐØ"×+Ñ+×?Ñ?ÐØ ×)Ñ)×;Ñ;ÐØ#×,Ñ,×AÑAÐØ×%Ñ%×3Ñ3€MØ!×*Ñ*×=Ñ=ÐØ×"Ñ"×-Ñ-€JØ×'Ñ'×7Ñ7€OØ×#Ñ#×/Ñ/€KØ×&Ñ&×5Ñ5€NØ×(Ñ(×9Ñ9ÐØ$×<Ñ<ÐØ#×9Ñ9ÐØ×'Ñ'×7Ñ7€OØ×(Ñ(×9Ñ9ÐØ×&Ñ&×5Ñ5€Nà×1Ñ1€Oà×$Ñ$×1Ñ1€Là ×)Ñ)×;Ñ;ÐØ×#Ñ#×/Ñ/€KØ×(Ñ(×9Ñ9ÐØ×"Ñ"×-Ñ-€JØ×Ñ×!Ñ!€DØ×(Ñ(×9Ñ9Ððà�S˜#�XÑðð �x  S Ñ)Ñ)ðð ð	ð
 
�#�s�(Ñ	óð	7 #õ 	7ð ô ó ð ð ô
ó ð
ð:¨Cð ¸ð Àd÷ r.   rd   )r¢   )$r¤   r4   r   rz   r@   r   r~   r”   r–   Úcollections.abcr   Útypingr   r   Útorch.testingÚtorch._dynamor   Útorch._logging._internalr   r   r   r   r	   r
   ÚTorchTestCaserv   r   r   r   Ú	getLoggerr\   rH   r   r�   r   rd   r¢   r.   r#   ú<module>rÒ      s—   ðñó Û Û Û Û 	Û 	Û 
Û Ý $Ý ã Û Ý #Ý .÷ó ÷ #Ñ "ð €g×Ñ˜Ó!€ñ�S˜5  c ™?Ñ*ð °Dó ô82:ˆ}ô 2:ôpp�hõ pr.   