o
    i                     @   s   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eZdd
ee e!e df f ddfddZ"G dd deZG d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              	   C   s   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 ]!}|dkr7tj s6 d S q(zt| W q( tyI   Y  d S 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   needr   r   M/home/ubuntu/vllm_env/lib/python3.10/site-packages/torch/_dynamo/test_case.pyr   &   s,   


r   c                
       s~   e Zd ZU ejed< ed fddZed fddZd fdd	Z	d fd
dZ
dededededdf
 fddZ  ZS )r
   _exit_stackr   Nc                       | j   t   d S N)r$   closesupertearDownClasscls	__class__r   r#   r)   D      
zTestCase.tearDownClassc                    s0   t    t | _| jtjdddd d S )NTF)raise_on_ctx_manager_usagesuppress_errorslog_compilation_metrics)r(   
setUpClass
contextlib	ExitStackr$   enter_contextr   patchr*   r,   r   r#   r2   I   s   

zTestCase.setUpClassc                    s>   t  | _t   t  tj  t	
 | _t| j d S r&   )r   is_grad_enabled_prior_is_grad_enabledr(   setUpr   r   countersclearloggingNullHandlerhandlerr   
addHandler)selfr,   r   r#   r9   U   s   



zTestCase.setUpc                    st   t | j tj D ]\}}t||  qt  tj	  t
   | jt ur8td t| j d S d S )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,   r   r#   rE   ]   s   


zTestCase.tearDownxyargskwargsc                    s>   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)r@   rK   rL   rM   rN   r,   r   r#   rQ   h   s   

zTestCase.assertEqualr   N)__name__
__module____qualname__r3   r4   __annotations__classmethodr)   r2   r9   rE   r   rQ   __classcell__r   r   r,   r#   r
   A   s   
 
*r
   c                
       s  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	d
Z5de3f fddZ6e7d fddZ8e7d fddZ9  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                 C   s2   t | | j}tjj||d|}t| | j| |S )N)error_on_graph_break)getattr_testMethodNamer   _dynamooptimizesetattr)r@   r[   r\   r]   methodr   r   r#   
compile_fn   s   zCPythonTestCase.compile_fnc                    sz   t   }| j}t|tjd dd }t	dt|}|r0|
 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)r@   suffixtest_cls	test_filepy_verr,   r   r#   rl      s   
 z CPythonTestCase._dynamo_test_keyNc                    r%   r&   )rZ   r'   r(   r)   r*   r,   r   r#   r)      r.   zCPythonTestCase.tearDownClassc           	         s   t jddt jj }t|d }t| }t||}|rUt	t
t| |d}tjd d }||k rTdt
t|}dt
t|}td| d| ntd	t|  t   t | _| jtjd
d d S )Ndynamocpythonz\d_\d{2}rh      rg   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joinrp   rq   escaperm   rn   rr   tuplemapintrs   removeprefixro   sysversion_infor   unittestSkipTestr(   r2   r3   r4   rZ   r5   r   r6   )	r+   prefixregexsearch_pathmtest_py_verry   expectedgotr,   r   r#   r2      s0   


zCPythonTestCase.setUpClassrR   );rS   rT   rU   __doc__r3   r4   rV   dynamo_strict_nopythonr   r
   rQ   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   boolre   rl   rW   r)   r2   rX   r   r   r,   r#   rY   u   sh   
 



rY   )r   )$r   r3   r   rm   r<   r   rq   r   r   typingr   r   r   r   torch.testingtorch._dynamor   torch._logging._internalr   r   r   r   r	   r
   TorchTestCaseri   r   r   r   	getLoggerrS   rF   r   r   r   rY   r   r   r   r#   <module>   s(    

$4