
    `i                     <   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
mZ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!e df         f         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)AnyCallableUnion)	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      k/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/torch/_dynamo/test_case.pyr   r   &   s   >>>>>>  2  I""$$ JNN8#>>#EE%   6>>:**,, '----   IKKKKKs   '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ed	e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.tearDownClassD   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%   r5   zTestCase.setUpClassI   sj    $.00%%L+/ %(-  	
 	
 	
 	
 	
r0   c                 2   t          j                    | _        t                                                       t                       t          j                                         t          j
                    | _        t          j        | j                   d S r)   )r   is_grad_enabled_prior_is_grad_enabledr+   setUpr   r   countersclearloggingNullHandlerhandlerr   
addHandler)selfr/   s    r%   r=   zTestCase.setUpU   sk    &+&;&=&=#*,,T\*****r0   c                    t          j        | j                   t          j                                        D ]'\  }}t          ||                                           (t                       t          j        	                                 t                                                       | j        t          j                    ur5t                              d           t          j        | j                   d S d S )NzRunning test changed grad mode)r   removeHandlerrB   r   r>   itemsprintmost_commonr   r?   r+   tearDownr<   r   r;   logwarningset_grad_enabled)rD   kvr/   s      r%   rJ   zTestCase.tearDown]   s    ---N((** 	& 	&DAq!Q]]__%%%%&e.C.E.EEEKK8999"4#>????? FEr0   xyargskwargsc                     t           j        rt          |t          j                  st          |t          j                  rd S  t                      j        ||g|R i |S r)   )r   debug_disable_compile_counterr   r   CompileCounterIntr+   assertEqual)rD   rP   rQ   rR   rS   r/   s        r%   rW   zTestCase.assertEqualh   sj    0	1e566	 !U455	
 F"uww"1a9$999&999r0   r   N)__name__
__module____qualname__r6   r7   __annotations__classmethodr,   r5   r=   rJ   r   rW   __classcell__r/   s   @r%   r   r   A   s        %%%%          [  	
 	
 	
 	
 	
 [	
+ + + + + +	@ 	@ 	@ 	@ 	@ 	@:S :S : : : : : : : : : : : : :r0   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e2e3e0de1f         f         de4de0de1f         fd	Z5de3f fd
Z6e7d fd            Z8e7d fd            Z9 xZ:S )CPythonTestCasez
    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                     t          | | j                  }t          j                            ||          |          }t          | | j        |           |S )N)error_on_graph_break)getattr_testMethodNamer   _dynamooptimizesetattr)rD   rc   rd   re   methods        r%   
compile_fnzCPythonTestCase.compile_fn   sS     t344''h'OOPVWWd*F333	r0   c                    t                                                      }| j        }t          j        |                              t          j                  d                             d          d         }t          j	        dt          j        |                    }|rF|
                                                    t          j                                      dd          }n|S d| d| d| S )	N.r   z
/([\d_]+)/_ CPython-)r+   _dynamo_test_keyr/   inspectgetfilesplitr   sepresearchgroupstripreplace)rD   suffixtest_cls	test_filepy_verr/   s        r%   rv   z CPythonTestCase._dynamo_test_key   s    ))++>OH--33BF;;B?EEcJJ1M	='/(*C*CDD 	\\^^))"&1199#rBBFFM666)66f666r0   Nc                 z    | j                                          t                                                       d S r)   )rb   r*   r+   r,   r-   s    r%   r,   zCPythonTestCase.tearDownClass   s3    
r0   c                    t           j                            dd          t           j        j        z   }t	          j        |          dz   }t          j        |           }t	          j        ||          }|rt          t          t          |                                                    |                              d                              }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                            t5          j        d
                     d S )Ndynamocpythonz\d_\d{2}rr      rq   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joinrz   r{   escaperw   rx   r|   tuplemapintr}   removeprefixry   sysversion_infor    unittestSkipTestr+   r5   r6   r7   rb   r8   r   r9   )
r.   prefixregexsearch_pathmtest_py_verr   expectedgotr/   s
            r%   r5   zCPythonTestCase.setUpClass   s    h	22RW[@	&!!K/oc**Ie[)) 	C)?)?)G)G)M)Mc)R)R S STTK%bqb)F##88C[$9$9::hhs3//00'KHKKcKK   $ #gQXQ`adQeQegg   	)++

  L&*  	
 	
 	
 	
 	
r0   rX   );rY   rZ   r[   __doc__r6   r7   r\   dynamo_strict_nopythonr   r   rW   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    boolrn   rv   r]   r,   r5   r^   r_   s   @r%   ra   ra   u   s              ! #/K&5N"-J#/K )H#/K$1L'7O )H#/K(9"+? );#,A%3M!*="-J'7O#/K&5N(9$<#9'7O(9&5N1O$1L );#/K(9"-J!D(9S#X sHS#X../ 	
 
#s(	   	7# 	7 	7 	7 	7 	7 	7           [  
 
 
 
 
 [
 
 
 
 
r0   ra   )r   )$r   r6   r!   rw   r@   r   r{   r   r   typingr   r   r   r   torch.testingtorch._dynamor   torch._logging._internalr   r   r   r	   r
   r   TorchTestCasers   r   r   r   	getLoggerrY   rK   r    r   r   ra   r   r0   r%   <module>r      s              				 				 



  ' ' ' ' ' ' ' ' ' '      # # # # # # . . . . . .            # " " " " " " " " " g!! U3c3h/0 $    6.: .: .: .: .:} .: .: .:hg
 g
 g
 g
 g
h g
 g
 g
 g
 g
r0   