o
    j9:j                      @   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
 ddl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 df B 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)Callable)Any)	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   ^/home/nk/hobo-godmode/plappi-mvp/.venv/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(   F      
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"   r1   K   s   

zTestCase.setUpClassc                    sL   t  | _tj| _dt_t   t  t	j
  t | _t| j d S )NT)r   is_grad_enabled_prior_is_grad_enabledr   nested_graph_breaks_prior_nested_graph_breaksr'   setUpr   r   countersclearloggingNullHandlerhandlerr   
addHandler)selfr+   r   r"   r:   W   s   



zTestCase.setUpc                    s   t | j tj D ]\}}td||  qt	  tj
  tjj  t   | jt ur>td t| j | jt_d S )Nz%s %szRunning test changed grad mode)r   removeHandlerr?   r   r;   itemslogdebugmost_commonr   r<   r   _C	_autograd_saved_tensors_hooks_enabler'   tearDownr7   r6   warningset_grad_enabledr9   r   r8   )rA   kvr+   r   r"   rJ   a   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)rA   rO   rP   rQ   rR   r+   r   r"   rU   n   s   

zTestCase.assertEqualr   N)__name__
__module____qualname__r2   r3   __annotations__classmethodr(   r1   r:   rJ   r   rU   __classcell__r   r   r+   r"   r	   C   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e2e0de1f B de3de0de1f fd	d
Z4de2f fddZ5e6d fddZ7e6d fddZ8de2de0dd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)rA   r_   r`   ra   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)rA   suffixtest_cls	test_filepy_verr+   r   r"   rp      s   
 z CPythonTestCase._dynamo_test_keyNc                    r$   r%   )r^   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}rl      rk   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joinrt   ru   escaperq   rr   rv   tuplemapintrw   removeprefixrs   sysversion_infor   unittestSkipTestr'   r1   r2   r3   r^   r4   r   r5   )	r*   prefixregexsearch_pathmtest_py_verr}   expectedgotr+   r   r"   r1      s0   


zCPythonTestCase.setUpClassmethod_namepolicyc                 C   s   d S r%   r   )rA   r   r   r   r   r"   wrap_with_policy   s   z CPythonTestCase.wrap_with_policyrV   );rW   rX   rY   __doc__r2   r3   rZ   dynamo_strict_nopythonr   r	   rU   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   boolri   rp   r[   r(   r1   r   r\   r   r   r+   r"   r]   {   sj   
 



r]   )r   )$r   r2   r   rq   r=   r   ru   r   r   collections.abcr   typingr   r   torch.testingtorch._dynamor   torch._logging._internalr   r   r   r   r   r	   TorchTestCaserm   r   r   r   	getLoggerrW   rD   r   r   r   r]   r   r   r   r"   <module>   s*    

 8