
    3j                      *   S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	J
r
  SSKJr  SSKrSSKrSSKJr  SSKJr  SSKJrJrJrJr  SS	KJrJrJr  \R:                  " \5      rSS
\ \!\ S4   -  SS4S jjr" " S S\5      r " S S\5      r#g)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                    SSK Jn  [        (       d  [        (       a  g [        R
                  R                  5       (       d0  [        (       a%  [        R                  R                  SS5      S:X  a  g [        U [        5      (       a  U 4n U  HG  nUS:X  a'  [        R                  R                  5       (       d    g M0   [        R                  " U5        MI     U" 5         g ! [          a       g f = f)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      Q/home/wildlama/miniconda3/lib/python3.13/site-packages/torch/_dynamo/test_case.pyr   r   '   s    > 2 2 II""$$JJJNN8#>#E%6>::**,, -''-  K  s   <C
C,+C,c            
          ^  \ rS rSr% \R
                  \S'   \SU 4S jj5       r\SU 4S jj5       r	SU 4S jjr
SU 4S jjrS	\S
\S\S\SS4
U 4S jjrSrU =r$ )r
   C   _exit_stackr   Nc                 V   > U R                   R                  5         [        TU ]  5         g N)r&   closesupertearDownClasscls	__class__s    r#   r+   TestCase.tearDownClassF   s        c                    > [         TU ]  5         [        R                  " 5       U l        U R                  R                  [        R                  " SSSS95        g )NTF)raise_on_ctx_manager_usagesuppress_errorslog_compilation_metrics)r*   
setUpClass
contextlib	ExitStackr&   enter_contextr   patchr,   s    r#   r5   TestCase.setUpClassK   sE    $..0%%LL+/ %(-	
r0   c                 Z  > [         R                  " 5       U l        [        R                  U l        S[        l        [        TU ]  5         [        5         [        R                  R                  5         [        R                  " 5       U l        [        R                   " U R                  5        g )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@   TestCase.setUpW   sj    &+&;&;&=#*0*D*D'%)"**,T\\*r0   c                 p  > [         R                  " U R                  5        [        R                  R                  5        H)  u  p[        R                  SXR                  5       5        M+     [        5         [        R                  R                  5         [        R                  R                  R                  5         [        TU ]A  5         U R"                  [        R$                  " 5       La5  [        R'                  S5        [        R(                  " U R"                  5        U R*                  [,        l        g )Nz%s %szRunning test changed grad mode)r   removeHandlerrE   r   rA   itemslogdebugmost_commonr   rB   r   _C	_autograd_saved_tensors_hooks_enabler*   tearDownr=   r<   warningset_grad_enabledr?   r   r>   )rG   kvr.   s      r#   rR   TestCase.tearDowna   s    -NN((*DAIIgq--/2 +668&&e.C.C.EEKK89""4#>#>?%)%D%D"r0   xyargskwargsc                    > [         R                  (       a  [        U[        R                  5      (       d  [        U[        R                  5      (       a  g [
        TU ]  " X/UQ70 UD6$ r(   )r   debug_disable_compile_counterr   r   CompileCounterIntr*   assertEqual)rG   rX   rY   rZ   r[   r.   s        r#   r_   TestCase.assertEqualn   sO    001e5566!U4455w"19$9&99r0   )r=   r?   rE   r   N)__name__
__module____qualname____firstlineno__r6   r7   __annotations__classmethodr+   r5   r@   rR   r   r_   __static_attributes____classcell__r.   s   @r#   r
   r
   C   sm    %%%    	
 	
+E:S :S : : : : :r0   r
   c            
       |  ^  \ rS rSr% Sr\R                  \S'   Sr\	R                  R                  r\	R                  R                  r\	R                  R                  r\	R                  R                  r\	R                  R                  r\	R                  R                   r\	R                  R"                  r\	R                  R$                  r\	R                  R&                  r\	R                  R(                  r\	R                  R*                  r\	R                  R,                  r\	R                  R.                  r\	R                  R0                  r\	R                  R2                  r\	R                  R4                  r\	R                  R6                  r\	R                  R8                  r\	R                  R:                  r\	R                  R<                  r\	R                  R>                  r\ RB                  r"\ RF                  r$\	R                  RJ                  r%\	R                  RL                  r&\	R                  RN                  r'\ RP                  r)\	R                  RT                  r*\	R                  RV                  r+\	R                  RX                  r,\	R                  RZ                  r-\	R                  R\                  r.\	R                  R^                  r/\	R                  R`                  r0S\1S\24   S\3\1S\24   -  S\4S	\1S\24   4S
 jr5S	\34U 4S jjr6\7SU 4S jj5       r8\7SU 4S jj5       r9S\3S\1S	S4S jr:Sr;U =r<$ )CPythonTestCase{   z
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                     [        X R                  5      n[        R                  R	                  X#S9" U5      n[        X R                  U5        U$ )N)error_on_graph_break)getattr_testMethodNamer   _dynamooptimizesetattr)rG   ro   rp   rq   methods        r#   
compile_fnCPythonTestCase.compile_fn   sF     334'''OPVW**F3	r0   c                   > [         TU ]  5       nU R                  n[        R                  " U5      R                  [        R                  5      S   R                  S5      S   n[        R                  " S[        R                  " U5      5      nU(       a>  UR                  5       R                  [        R                  5      R                  SS5      nOU$ SU SU SU 3$ )	N.r   z
/([\d_]+)/_ CPython-)r*   _dynamo_test_keyr.   inspectgetfilesplitr   sepresearchgroupstripreplace)rG   suffixtest_cls	test_filepy_verr.   s        r#   r    CPythonTestCase._dynamo_test_key   s    )+>>OOH-33BFF;B?EEcJ1M	='//(*CD\\^))"&&199#rBFM)AfX66r0   Nc                 V   > U R                   R                  5         [        TU ]  5         g r(   )rn   r)   r*   r+   r,   s    r#   r+   CPythonTestCase.tearDownClass   s    

r0   c                   > [         R                  R                  SS5      [         R                  R                  -   n[        R
                  " U5      S-   n[        R                  " U 5      n[        R                  " X#5      nU(       a  [        [        [        UR                  5       R                  U5      R                  S5      5      5      n[        R                   S S nXe:w  aZ  SR                  [        ["        U5      5      nSR                  [        ["        U5      5      n[$        R&                  " SU SU 35      eO-[$        R&                  " S	[        R                  " U 5       35      e[(        T	U ]U  5         [,        R.                  " 5       U l        U R0                  R3                  [4        R6                  " S
S95        g )Ndynamocpythonz\d_\d{2}r      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)r   pathjoinr   r   escaper   r   r   tuplemapintr   removeprefixr   sysversion_infor   unittestSkipTestr*   r5   r6   r7   rn   r8   r   r9   )
r-   prefixregexsearch_pathmtest_py_verr   expectedgotr.   s
            r#   r5   CPythonTestCase.setUpClass   s[    h	2RWW[[@		&!K/ooc*IIe)C)?)?)G)M)Mc)R STK%%bq)F$88C[$9:hhs3/0''+H:5EcUK  % ##PQXQ`Q`adQePfg  	))+


  LL&*	
r0   method_namepolicyc                     g r(    )rG   r   r   s      r#   wrap_with_policy CPythonTestCase.wrap_with_policy   s    r0   r   ra   )=rb   rc   rd   re   __doc__r6   r7   rf   dynamo_strict_nopythonr   r
   r_   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   boolrz   r   rg   r+   r5   r   rh   ri   rj   s   @r#   rl   rl   {   s       ! ##//K&&55N""--J##//K  ))H##//K$$11L''77O  ))H##//K((99"++?? ));;#,,AA%%33M!**==""--J''77O##//K&&55N((99$<<#99''77O((99&&55N11O$$11L ));;##//K((99""--J!!D((99S#X xS)) 	
 
#s(		7# 	7     
 
:C  d  r0   rl   )r   )$r   r6   r   r   rC   r   r   r   r   collections.abcr   typingr   r   torch.testingtorch._dynamor   torch._logging._internalr   r   r   r   r	   r
   TorchTestCaser   r   r   r   	getLoggerrb   rL   r   r   r   rl   r   r0   r#   <module>r      s        	 	 
  $    # .  # " !S5c?* D 82:} 2:pph pr0   