Ë
    ÃÓ^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      úb/var/www/ramen.bs-engineer-server.com/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d„Zd	ed
edededdf
ˆ fd„Z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.   c                 óT   — t        «        t        j                  j                  «        y r'   )r   r   r>   r?   )rD   s    r#   Úbefore_cuda_memory_leak_checkz&TestCase.before_cuda_memory_leak_checkn   s   € ÜŒÜ�‰×ÑÕr.   ÚxÚyÚargsÚkwargsc                 óP  •— t         j                  r‚t        |t        j                  «      st        |t        j                  «      ry t        j                  «       x}r7|j                  x}r)t        j                  |«      j                  x}rd|d   v ry t        ‰| �,  ||g|¢­i |¤ŽS )Nr>   r   )r   Údebug_disable_compile_counterr   r   ÚCompileCounterIntÚinspectÚcurrentframeÚf_backÚgetframeinfoÚcode_contextr)   ÚassertEqual)	rD   rU   rV   rW   rX   Ú	cur_frameÚupper_frameÚ
upper_coder-   s	           €r#   ra   zTestCase.assertEqualr   s¡   ø€ Ü×/Ò/Ü˜!œU×4Ñ4Ô5¼Ø”5×*Ñ*ô:ð ô &×2Ñ2Ó4Ð4�Ð4Ø$-×$4Ñ$4Ð4�[Ð4Ü#*×#7Ñ#7¸Ó#D×#QÑ#QÐQ�ZÐQØ *¨Q¡-Ñ/àÜ‰wÑ" 1 aÐ9¨$Ò9°&Ñ9Ð9r.   c                 óD   •— t         j                  ry t        ‰| �  |i |¤ŽS r'   )r   rZ   r)   ÚassertExpectedInline)rD   rW   rX   r-   s      €r#   rf   zTestCase.assertExpectedInline‚   s$   ø€ Ü×/Ò/ØÜ‰wÑ+¨TÐ<°VÑ<Ð<r.   ©r   N)Ú__name__Ú
__module__Ú__qualname__r4   r5   Ú__annotations__Úclassmethodr*   r3   r=   rN   rT   r   ra   rf   Ú__classcell__©r-   s   @r#   r
   r
   C   sŒ   ø… Ø×%Ñ%Ó%àô ó ð ð ô	
ó ð	
õ+õEóð:˜Sð : Sð :°ð :Àð :Èõ :ð =¨#ð =¸ð =À÷ =ñ =r.   r
   c            
       óˆ  ‡ — 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„«       Z8ejr                  d„ «       Z:de2de0ddfd„Z;ˆ xZ<S )ÚCPythonTestCasezÇ
    Test class for CPython tests located in "test/cpython/v{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   rr   rs   rt   Ú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                  |«      «      }|rM|j                  «       j                  t        j                  «      j                  dd«      j                  d«      }n|S d|› d	|› d	|› �S )
Néÿÿÿÿú.r   z/v([\d_]+)/Ú_Ú rR   ÚCPythonú-)r)   Ú_dynamo_test_keyr-   r\   ÚgetfileÚsplitr   ÚsepÚreÚsearchÚgroupÚstripÚreplaceÚlstrip)rD   ÚsuffixÚtest_clsÚ	test_fileÚpy_verr-   s        €r#   r…   z CPythonTestCase._dynamo_test_keyÉ   s·   ø€ Ü‘Ñ)Ó+ˆØ—>‘>ˆÜ—O‘O HÓ-×3Ñ3´B·F±FÓ;¸BÑ?×EÑEÀcÓJÈ1ÑMˆ	Ü—‘˜>¬7¯?©?¸8Ó+DÓEˆÙØ—\‘\“^×)Ñ)¬"¯&©&Ó1×9Ñ9¸#¸rÓB×IÑIÈ#ÓN‰FàˆMØ˜˜  ) ¨A¨f¨XÐ6Ð6r.   Nc                 óV   •— | j                   j                  «        t        ‰| �  «        y r'   )rq   r(   r)   r*   r+   s    €r#   r*   zCPythonTestCase.tearDownClassÔ   s   ø€ à�
‰
×ÑÔÜ‰ÑÕr.   c                 ó4  •— t        j                  | «      }t        j                  t        j
                  j                  d«      t        j
                  j                  z   «      dz   }t        j                  ||«      }|r˜t        t        t        |j                  «       «      «      }t        j                  d d }||k7  r„dj                  t        t        |«      «      }dj                  t        t        |«      «      }t!        j"                  d|› d|› �«      ‚t!        j"                  dt        j                  | «      › �«      ‚t$        ‰| �M  «        t)        j*                  «       | _        | j,                  j/                  t1        j2                  dd¬	«      «       y )
NÚcpythonzv(\d)_(\d{2})é   r€   zTest requires Python z but got Python z>Test requires a specific Python version but not found in path T)Úenable_trace_unittestÚenable_trace_load_build_class)r\   r†   r‰   Úescaper   ÚpathÚjoinrˆ   rŠ   ÚtupleÚmapÚintÚgroupsÚsysÚversion_infor   ÚunittestÚSkipTestr)   r3   r4   r5   rq   r6   r   r7   )	r,   Úsearch_pathÚcpython_test_regexÚmÚtest_py_verr’   ÚexpectedÚgotr-   s	           €r#   r3   zCPythonTestCase.setUpClassÙ   sI  ø€ ô —o‘o cÓ*ˆô �I‰I”b—g‘g—l‘l 9Ó-´·±·±Ñ;Ó<Ð?OÑOð 	ô �I‰IÐ(¨+Ó6ˆÙÜ¤¤C¨¯©«Ó 4Ó5ˆ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Ø&*Ø.2ôõ	
r.   c              /   ó   K  — d –— y ­wr'   © )rD   rW   rX   s      r#   ÚsubTestzCPythonTestCase.subTestú   s   è ø€ ô 	ùs   ‚Úmethod_nameÚpolicyc                  ó   — y r'   r«   )rD   r­   r®   s      r#   Úwrap_with_policyz CPythonTestCase.wrap_with_policy  s   € Ør.   rg   )=rh   ri   rj   Ú__doc__r4   r5   rk   Údynamo_strict_nopythonr¢   r
   ra   Ú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   Úboolr}   r…   rl   r*   r3   Úcontextmanagerr¬   r°   rm   rn   s   @r#   rp   rp   ˆ   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.   rp   )r«   )$r±   r4   r   r\   r@   r   r‰   r    r¢   Úcollections.abcr   Útypingr   r   Útorch.testingÚtorch._dynamor   Útorch._logging._internalr   r   r   r   r	   r
   ÚTorchTestCaser‚   r   r   r   Ú	getLoggerrh   rH   r   rœ   r   rp   r«   r.   r#   ú<module>rà      s™   ðñó Û Û Û Û 	Û 	Û 
Û Ý $Ý ã Û Ý #Ý .÷ó ÷ #Ñ "ð €g×Ñ˜Ó!€ñ�S˜5  c ™?Ñ*ð °Dó ô8B=ˆ}ô B=ôJz�hõ zr.   