
    7hZ                        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rSSK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  \R2                  " \5      rSS\
\\\S	4   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)Union)	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/var/www/fran/franai/venv/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rU =r$ )	r   B   _exit_stackc                 V   > U R                   R                  5         [        TU ]  5         g N)r$   closesupertearDownClasscls	__class__s    r!   r)   TestCase.tearDownClassE   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!   r3   TestCase.setUpClassJ   sE    $..0%%LL+/ %(-	
r.   c                   > [         R                  " 5       U l        [        TU ]  5         [        5         [        R                  R                  5         [        R                  " 5       U l        [        R                  " U R                  5        g r&   )r   is_grad_enabled_prior_is_grad_enabledr(   setUpr   r   countersclearloggingNullHandlerhandlerr   
addHandler)selfr,   s    r!   r<   TestCase.setUpV   sT    &+&;&;&=#**,T\\*r.   c                   > [         R                  " U R                  5        [        R                  R                  5        H  u  p[        XR                  5       5        M      [        5         [        R                  R                  5         [        TU ]-  5         U R                  [        R                  " 5       La6  [        R!                  S5        [        R"                  " U R                  5        g g )NzRunning test changed grad mode)r   removeHandlerrA   r   r=   itemsprintmost_commonr   r>   r(   tearDownr;   r   r:   logwarningset_grad_enabled)rC   kvr,   s      r!   rJ   TestCase.tearDown^   s    -NN((*DA!]]_% +&&e.C.C.EEKK89""4#>#>? Fr.   )r;   rA   r   N)__name__
__module____qualname____firstlineno__r4   r5   __annotations__classmethodr)   r3   r<   rJ   __static_attributes____classcell__r,   s   @r!   r   r   B   sF    %%%    	
 	
+	@ 	@r.   r   c                   b  ^  \ 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\	R                  R@                  r \	R                  RB                  r!\	R                  RD                  r"\	R                  RF                  r#\	R                  RH                  r$\	R                  RJ                  r%\	R                  RL                  r&\	R                  RN                  r'\	R                  RP                  r(\	R                  RR                  r)\	R                  RT                  r*\	R                  RV                  r+\	R                  RX                  r,S r-U 4S jr.\/S
U 4S jj5       r0\/S
U 4S jj5       r1S	r2U =r3$ )CPythonTestCasej   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.
_stackTc                     [        X R                  5      n[        R                  R	                  X#S9" U5      n[        X R                  U5        U$ )N)nopython)getattr_testMethodNamer   _dynamooptimizesetattr)rC   fnbackendr`   methods        r!   
compile_fnCPythonTestCase.compile_fn   sE     334'''CFK**F3	r.   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)rC   suffixtest_cls	test_filepy_verr,   s        r!   rr    CPythonTestCase._dynamo_test_key   s    )+>>OOH-33BFF;B?EEcJ1M	='//(*CD\\^))"&&199#rBFM)AfX66r.   c                 V   > U R                   R                  5         [        TU ]  5         g r&   )r^   r'   r(   r)   r*   s    r!   r)   CPythonTestCase.tearDownClass   s    

r.   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:  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}rn      rm   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joinrv   rw   escapers   rt   rx   tuplemapintry   removeprefixru   sysversion_infor   unittestSkipTestr(   r3   r4   r5   r^   r6   r
   r7   )
r+   prefixregexsearch_pathmtest_py_verr   expectedgotr,   s
            r!   r3   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&*	
r.    rQ   )4rR   rS   rT   rU   __doc__r4   r5   rV   dynamo_strict_nopythonr   r   assertEqualassertNotEqual
assertTrueassertFalseassertIsassertIsNotassertIsNoneassertIsNotNoneassertInassertNotInassertIsInstanceassertNotIsInstanceassertAlmostEqualassertNotAlmostEqualassertGreaterassertGreaterEqual
assertLessassertLessEqualassertRegexassertNotRegexassertCountEqualassertMultiLineEqualassertSequenceEqualassertListEqualassertTupleEqualassertSetEqualassertDictEqualassertRaisesassertRaisesRegexassertWarnsassertWarnsRegex
assertLogsfailfailureExceptionri   rr   rW   r)   r3   rX   rY   rZ   s   @r!   r\   r\   j   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#,,AA"++??''77O((99&&55N''77O$$11L ));;##//K((99""--J!!D((99	7     
 
r.   r\   )r   ) r   r4   r   rs   r?   r   rw   r   r   typingr   r   torch.testingtorch._logging._internalr   r   r   r   r   r   TorchTestCasero   r
   r   r   	getLoggerrR   rK   r   r   r   r\   r   r.   r!   <module>r      s        	 	 
     .  # " !U3c3h/0 $ 6%@} %@Pb
h b
r.   