
    Vh                         d 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Zddl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ed	f   f   d
dfd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)Union)	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      G/home/dcms/DCMS/lib/python3.12/site-packages/torch/_dynamo/test_case.pyr   r   !   s    > 2 II""$JJNN8#>#E% 6>::**,''- K  s   B::	CCc                   x     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
 xZS )r   _exit_stackc                 V    | j                   j                          t        |           y N)r#   closesupertearDownClasscls	__class__s    r!   r(   zTestCase.tearDownClass?   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!   r1   zTestCase.setUpClassD   sE    $..0%%LL+/ %(-	
r,   c                    t        j                         | _        t        |           t                t        j                  j                          t        j                         | _        t        j                  | j                         y r%   )r   is_grad_enabled_prior_is_grad_enabledr'   setUpr   r   countersclearloggingNullHandlerhandlerr   
addHandler)selfr+   s    r!   r9   zTestCase.setUpP   sT    &+&;&;&=#**,T\\*r,   c                    t        j                  | j                         t        j                  j                         D ]  \  }}t        ||j                                ! t                t        j                  j                          t        | -          | j                  t        j                         ur5t        j!                  d       t        j"                  | j                         y y )NzRunning test changed grad mode)r   removeHandlerr>   r   r:   itemsprintmost_commonr   r;   r'   tearDownr8   r   r7   logwarningset_grad_enabled)r@   kvr+   s      r!   rF   zTestCase.tearDownX   s    -NN((* 	&DAq!Q]]_%	&&&e.C.C.EEKK89""4#>#>? Fr,   )r   N)__name__
__module____qualname__r2   r3   __annotations__classmethodr(   r1   r9   rF   __classcell__)r+   s   @r!   r   r   <   sF    %%%    	
 	
+	@ 	@r,   r   ) )__doc__r2   r   r<   r   typingr   r   torch.testingtorch._logging._internalr   r   r   r   r   r   TorchTestCase r
   r   r   	getLoggerrL   rG   r   tupler   rR   r,   r!   <module>r[      s}       	    .  # " g!U3c3h/0 $ 6%@} %@r,   