
    9i                     *   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
Jr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   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)AnyCallableUnion)	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      W/var/www/html/land-doc-ocr/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	\S
\S\S\SS4
U 4S jjrSrU =r$ )r   A   _exit_stackr   Nc                 V   > U R                   R                  5         [        TU ]  5         g N)r'   closesupertearDownClasscls	__class__s    r$   r,   TestCase.tearDownClassD   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$   r6   TestCase.setUpClassI   sE    $..0%%LL+/ %(-	
r1   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.setUpU   sT    &+&;&;&=#**,T\\*r1   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   removeHandlerrD   r   r@   itemsprintmost_commonr   rA   r+   tearDownr>   r   r=   logwarningset_grad_enabled)rF   kvr/   s      r$   rM   TestCase.tearDown]   s    -NN((*DA!]]_% +&&e.C.C.EEKK89""4#>#>? Fr1   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)rF   rT   rU   rV   rW   r/   s        r$   r[   TestCase.assertEqualh   sO    001e5566!U4455w"19$9&99r1   )r>   rD   r   N)__name__
__module____qualname____firstlineno__r7   r8   __annotations__classmethodr,   r6   r?   rM   r   r[   __static_attributes____classcell__r/   s   @r$   r   r   A   sm    %%%    	
 	
+	@:S :S : : : : :r1   r   c            
       j  ^  \ 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\4\1S\24   4   S\5S	\1S\24   4S
 jr6S	\44U 4S jjr7\8SU 4S jj5       r9\8SU 4S jj5       r:Sr;U =r<$ )CPythonTestCaseu   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)rF   rk   rl   rm   methods        r$   
compile_fnCPythonTestCase.compile_fn   sF     334'''OPVW**F3	r1   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)rF   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6r1   c                 V   > U R                   R                  5         [        TU ]  5         g r)   )rj   r*   r+   r,   r-   s    r$   r,   CPythonTestCase.tearDownClass   s    

r1   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}r{      rz   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+   r6   r7   r8   rj   r9   r   r:   )
r.   prefixregexsearch_pathmtest_py_verr   expectedgotr/   s
            r$   r6   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&*	
r1    r]   )=r^   r_   r`   ra   __doc__r7   r8   rb   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   r   boolrv   r   rc   r,   r6   rd   re   rf   s   @r$   rh   rh   u   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 sHS#X../ 	
 
#s(		7# 	7     
 
r1   rh   )r   )$r   r7   r    r   rB   r   r   r   r   typingr   r   r   r   torch.testingtorch._dynamor   torch._logging._internalr   r   r   r	   r
   r   TorchTestCaser|   r   r   r   	getLoggerr^   rN   r   r   r   rh   r   r1   r$   <module>r      s        	 	 
  ' '   # .  # " !U3c3h/0 $ 6.:} .:hg
h g
r1   