§
    ŠŠtj$  ã                   ó6  — 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#dS )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d S t          j                             ¦   «         s-t          r&t          j	         
                    dd¦  «        dk    rd S t          | t          ¦  «        r| f} | D ]Q}|dk    r"t          j                             ¦   «         s d S Œ*	 t          j        |¦  «         Œ@# t           $ r Y  d S w xY w |¦   «          d S )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      úU/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/_dynamo/test_case.pyr   r   '   s  € Ø>Ð>Ð>Ð>Ð>Ð>åð Õ 2ð Øˆõ ŒI×"Ò"Ñ$Ô$ðåðõ ŒJ�NŠNÐ8¸#Ñ>Ô>À#ÒEÐEàˆå�%�ÑÔð Ø�ˆØð ð ˆØ�6Š>ˆ>Ý”:×*Ò*Ñ,Ô,ð Ø��ððÝÔ'¨Ñ-Ô-Ð-Ð-øÝð ð ð Ø���ðøøøð €I�K„K€K€K€Ks   Â'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                 óz   •— | j                              ¦   «          t          ¦   «                              ¦   «          d S ©N)r&   ÚcloseÚsuperÚtearDownClass©ÚclsÚ	__class__s    €r$   r+   zTestCase.tearDownClassF   s3   ø€ àŒ×ÒÑÔÐÝ‰Œ×ÒÑÔÐÐÐó    c                 óÖ   •— t          ¦   «                              ¦   «          t          j        ¦   «         | _        | j                             t          j        ddd¬¦  «        ¦  «         d S )NTF)Úraise_on_ctx_manager_usageÚsuppress_errorsÚlog_compilation_metrics)r*   Ú
setUpClassÚ
contextlibÚ	ExitStackr&   Úenter_contextr   Úpatchr,   s    €r$   r4   zTestCase.setUpClassK   sj   ø€ å‰Œ×ÒÑÔÐÝ$Ô.Ñ0Ô0ˆŒØŒ×%Ò%ÝŒLØ+/Ø %Ø(-ðñ ô ñ	
ô 	
ð 	
ð 	
ð 	
r/   c                 ól  •— t          j        ¦   «         | _        t          j        | _        dt          _        t          ¦   «                              ¦   «          t          ¦   «          t          j
                             ¦   «          t          j        ¦   «         | _        t          j        | j        ¦  «         d S )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   s~   ø€ Ý&+Ô&;Ñ&=Ô&=ˆÔ#Ý*0Ô*DˆÔ'Ø%)�Ô"Ý‰Œ�Š‰ŒˆÝ‰ŒˆÝŒ×ÒÑÔÐÝÔ*Ñ,Ô,ˆŒÝÔ˜Tœ\Ñ*Ô*Ð*Ð*Ð*r/   c                 óx  •— t          j        | j        ¦  «         t          j                             ¦   «         D ]3\  }}t                               d||                     ¦   «         ¦  «         Œ4t          ¦   «          t          j         
                    ¦   «          t          j        j                             ¦   «          t          ¦   «                              ¦   «          | j        t          j        ¦   «         ur3t                               d¦  «         t          j        | j        ¦  «         | j        t,          _        d S )Nz%s %szRunning test changed grad mode)r   ÚremoveHandlerrC   r   r?   ÚitemsÚlogÚdebugÚmost_commonr   r@   r   Ú_CÚ	_autogradÚ_saved_tensors_hooks_enabler*   ÚtearDownr;   r:   ÚwarningÚset_grad_enabledr=   r   r<   )rE   ÚkÚvr.   s      €r$   rO   zTestCase.tearDowna   sñ   ø€ ÝÔ ¤Ñ-Ô-Ð-Ý”N×(Ò(Ñ*Ô*ð 	3ð 	3‰DˆAˆqÝ�IŠI�g˜q !§-¢-¡/¤/Ñ2Ô2Ð2Ð2Ý‰ŒˆÝŒ×ÒÑÔÐÝŒÔ×6Ò6Ñ8Ô8Ð8Ý‰Œ×ÒÑÔÐØÔ&­eÔ.CÑ.EÔ.EÐEÐEÝ�KŠKÐ8Ñ9Ô9Ð9ÝÔ" 4Ô#>Ñ?Ô?Ð?Ø%)Ô%D�Ô"Ð"Ð"r/   c                 ó^   — t          ¦   «          t          j                             ¦   «          d S r(   )r   r   r?   r@   )rE   s    r$   Úbefore_cuda_memory_leak_checkz&TestCase.before_cuda_memory_leak_checkn   s%   € Ý‰ŒˆÝŒ×ÒÑÔÐÐÐr/   ÚxÚyÚargsÚkwargsc                 óN  •— t           j        r{t          |t          j        ¦  «        st          |t          j        ¦  «        rd S t          j        ¦   «         x}r0|j        x}r't          j        |¦  «        j	        x}rd|d         v rd S  t          ¦   «         j        ||g|¢R i |¤ŽS )Nr?   r   )r   Údebug_disable_compile_counterr   r   ÚCompileCounterIntÚinspectÚcurrentframeÚf_backÚgetframeinfoÚcode_contextr*   ÚassertEqual)	rE   rV   rW   rX   rY   Ú	cur_frameÚupper_frameÚ
upper_coder.   s	           €r$   rb   zTestCase.assertEqualr   sÇ   ø€ ÝÔ/ð 	Ý˜!�UÔ4Ñ5Ô5ð ½Ø•5Ô*ñ:ô :ð ð �õ &Ô2Ñ4Ô4Ð4�ðà$-Ô$4Ð4�[ðõ $+Ô#7¸Ñ#DÔ#DÔ#QÐQ�Zðð  *¨Q¤-Ð/Ð/à�Ø"�u‰wŒwÔ" 1 aÐ9¨$Ð9Ð9Ð9°&Ð9Ð9Ð9r/   c                 óR   •— t           j        rd S  t          ¦   «         j        |i |¤ŽS r(   )r   r[   r*   ÚassertExpectedInline)rE   rX   rY   r.   s      €r$   rg   zTestCase.assertExpectedInline‚   s/   ø€ ÝÔ/ð 	ØˆFØ+�u‰wŒwÔ+¨TÐ<°VÐ<Ð<Ð<r/   ©r   N)Ú__name__Ú
__module__Ú__qualname__r5   r6   Ú__annotations__Úclassmethodr+   r4   r>   rO   rU   r   rb   rg   Ú__classcell__©r.   s   @r$   r
   r
   C   sL  ø€ € € € € € ØÔ%Ð%Ð%Ñ%àð ð  ð  ð  ð  ñ „[ð ð ð	
ð 	
ð 	
ð 	
ð 	
ñ „[ð	
ð+ð +ð +ð +ð +ð +ðEð Eð Eð Eð Eð 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	        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         Z!ej"        Z#ej	        j$        Z$ej	        j%        Z%ej	        j&        Z&e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/de0de1f         de2e0de1f         z  de3de0de1f         fd	„Z4de2fˆ fd
„Z5e6dˆ fd„¦   «         Z7e6dˆ fd„¦   «         Z8ej9        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                             ||¬¦  «        |¦  «        }t          | | j        |¦  «         |S )N)Úerror_on_graph_break)ÚgetattrÚ_testMethodNamer   Ú_dynamoÚoptimizeÚsetattr)rE   rs   rt   ru   Úmethods        r$   Ú
compile_fnzCPythonTestCase.compile_fnº   sS   € õ ˜˜tÔ3Ñ4Ô4ˆÝ”×'Ò'¨ÀhÐ'ÑOÔOÐPVÑWÔWˆå��dÔ*¨FÑ3Ô3Ð3Øˆ	r/   c                 ó  •— t          ¦   «                              ¦   «         }| j        }t          j        |¦  «                             t          j        ¦  «        d                              d¦  «        d         }t          j	        dt          j        |¦  «        ¦  «        }|rY| 
                    ¦   «                              t          j        ¦  «                             dd¦  «                             d¦  «        }n|S d|› d	|› d	|› �S )
Néÿÿÿÿú.r   z/v([\d_]+)/Ú_Ú rS   ÚCPythonú-)r*   Ú_dynamo_test_keyr.   r]   ÚgetfileÚsplitr   ÚsepÚreÚsearchÚgroupÚstripÚreplaceÚlstrip)rE   ÚsuffixÚtest_clsÚ	test_fileÚpy_verr.   s        €r$   r†   z CPythonTestCase._dynamo_test_keyÉ   sÙ   ø€ Ý‘”×)Ò)Ñ+Ô+ˆØ”>ˆÝ”O HÑ-Ô-×3Ò3µB´FÑ;Ô;¸BÔ?×EÒEÀcÑJÔJÈ1ÔMˆ	Ý”˜>­7¬?¸8Ñ+DÔ+DÑEÔEˆØð 	Ø—\’\‘^”^×)Ò)­"¬&Ñ1Ô1×9Ò9¸#¸rÑBÔB×IÒIÈ#ÑNÔNˆFˆFàˆMØ6˜Ð6Ð6 )Ð6Ð6¨fÐ6Ð6Ð6r/   Nc                 óz   •— | j                              ¦   «          t          ¦   «                              ¦   «          d S r(   )rr   r)   r*   r+   r,   s    €r$   r+   zCPythonTestCase.tearDownClassÔ   s3   ø€ àŒ
×ÒÑÔÐÝ‰Œ×ÒÑÔÐÐÐr/   c                 óz  •— t          j        | ¦  «        }t          j        t          j                             d¦  «        t          j        j        z   ¦  «        dz   }t          j        ||¦  «        }|r¹t          t          t          |                     ¦   «         ¦  «        ¦  «        }t          j        d d…         }||k    rjd                     t          t          |¦  «        ¦  «        }d                     t          t          |¦  «        ¦  «        }t!          j        d|› d|› �¦  «        ‚n)t!          j        dt          j        | ¦  «        › �¦  «        ‚t%          ¦   «                              ¦   «          t)          j        ¦   «         | _        | j                             t1          j        dd¬	¦  «        ¦  «         d S )
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*   r4   r5   r6   rr   r7   r   r8   )	r-   Úsearch_pathÚcpython_test_regexÚmÚtest_py_verr“   ÚexpectedÚgotr.   s	           €r$   r4   zCPythonTestCase.setUpClassÙ   s”  ø€ õ ”o cÑ*Ô*ˆõ ŒI•b”g—l’l 9Ñ-Ô-µ´´Ñ;Ñ<Ô<Ð?OÑOð 	õ ŒIÐ(¨+Ñ6Ô6ˆØð 	Ý¥¥C¨¯ª©¬Ñ 4Ô 4Ñ5Ô5ˆKÝÔ% b q bÔ)ˆFØ˜Ò$Ð$ØŸ8š8¥C­¨[Ñ$9Ô$9Ñ:Ô:�Ø—h’h�s¥3¨Ñ/Ô/Ñ0Ô0�ÝÔ'ØK¨HÐKÐKÀcÐKÐKñô ð ð %õ Ô#ØgÕQXÔQ`ÐadÑQeÔQeÐgÐgñô ð õ 	‰Œ×ÒÑÔÐÝÔ)Ñ+Ô+ˆŒ
ØŒ
× Ò ÝŒLØ&*Ø.2ðñ ô ñ	
ô 	
ð 	
ð 	
ð 	
r/   c              /   ó   K  — d V — d S r(   r   )rE   rX   rY   s      r$   ÚsubTestzCPythonTestCase.subTestú   s   è è € ð 	ˆˆˆˆˆr/   Úmethod_nameÚpolicyc                 ó   — d S r(   r   )rE   r­   r®   s      r$   Úwrap_with_policyz CPythonTestCase.wrap_with_policy  s   € Øˆr/   rh   )=ri   rj   rk   Ú__doc__r5   r6   rl   Údynamo_strict_nopythonr£   r
   rb   Ú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†   rm   r+   r4   Úcontextmanagerr¬   r°   rn   ro   s   @r$   rq   rq   ˆ   sÙ  ø€ € € € € € ðð ð Ô Ð Ð Ñ Ø!Ðð Ô#Ô/€KØÔ&Ô5€NØÔ"Ô-€JØÔ#Ô/€KØÔ Ô)€HØÔ#Ô/€KØÔ$Ô1€LØÔ'Ô7€OØÔ Ô)€HØÔ#Ô/€KØÔ(Ô9ÐØ"Ô+Ô?ÐØ Ô)Ô;ÐØ#Ô,ÔAÐØÔ%Ô3€MØ!Ô*Ô=ÐØÔ"Ô-€JØÔ'Ô7€OØÔ#Ô/€KØÔ&Ô5€NØÔ(Ô9ÐØ$Ô<ÐØ#Ô9ÐØÔ'Ô7€OØÔ(Ô9ÐØÔ&Ô5€NàÔ1€OàÔ$Ô1€Là Ô)Ô;ÐØÔ#Ô/€KØÔ(Ô9ÐØÔ"Ô-€JØÔÔ!€DØÔ(Ô9Ððà�S˜#�XÔðð �x  S Ô)Ñ)ðð ð	ð
 
�#�s�(Ô	ðð ð ð ð	7 #ð 	7ð 	7ð 	7ð 	7ð 	7ð 	7ð ð ð  ð  ð  ð  ñ „[ð ð ð
ð 
ð 
ð 
ð 
ñ „[ð
ð@ Ôðð ñ Ôðð¨Cð ¸ð Àdð ð ð ð ð ð ð ð r/   rq   )r   )$r±   r5   r    r]   rA   r   rŠ   r¡   r£   Úcollections.abcr   Útypingr   r   Útorch.testingÚtorch._dynamor   Útorch._logging._internalr   r   r   r   r	   r
   ÚTorchTestCaserƒ   r   r   r   Ú	getLoggerri   rI   r   r�   r   rq   r   r/   r$   ú<module>rà      sÑ  ððð ð Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø €€€Ø 	€	€	€	Ø 	€	€	€	Ø 
€
€
€
Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #Ø .Ð .Ð .Ð .Ð .Ð .ðð ð ð ð ð ð ð ð ð ð ð ð #Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ð "ð €gÔ˜Ñ!Ô!€ðð �S˜5  c œ?Ñ*ð °Dð ð ð ð ð8B=ð B=ð B=ð B=ð B=ˆ}ñ B=ô B=ð B=ðJzð zð zð zð z�hñ zô zð zð zð zr/   