o
    hZ                     @   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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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)Union)	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_testsZTORCHINDUCTOR_WINDOWS_TESTS0cuda)$torch.testing._internal.common_utilsr   r   r   torchZxpuZis_availabler   osenvironget
isinstancestrr   	importlibimport_moduleImportError)r   r   Zneedr   r   ]/home/www/facesmatcher.com/frenv_anti/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
  ZS )r   _exit_stackr   Nc                       | j   t   d S N)r   closesupertearDownClasscls	__class__r   r   r"   E      
zTestCase.tearDownClassc                    s0   t    t | _| jtjdddd d S )NTF)Zraise_on_ctx_manager_usageZsuppress_errorsZlog_compilation_metrics)r!   
setUpClass
contextlib	ExitStackr   enter_contextr	   patchr#   r%   r   r   r(   J   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   r/   V   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   removeHandlerr4   r   r0   itemsprintmost_commonr
   r1   r!   tearDownr.   r   r-   logwarningZset_grad_enabled)r6   kvr%   r   r   r;   ^   s   


zTestCase.tearDownr   N)__name__
__module____qualname__r)   r*   __annotations__classmethodr"   r(   r/   r;   __classcell__r   r   r%   r   r   B   s   
 
r   c                       sl  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	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+dd Z, fddZ-e.d fd
dZ/e.d fddZ0  Z1S )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.
    _stackTc                 C   s2   t | | j}tjj||d|}t| | j| |S )N)nopython)getattrZ_testMethodNamer   Z_dynamooptimizesetattr)r6   fnbackendrI   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)r6   suffixZtest_clsZ	test_filepy_verr%   r   r   rW      s   
 z CPythonTestCase._dynamo_test_keyr   Nc                    r   r   )rH   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 )NZdynamocpythonz\d_\d{2}rS      rR   zTest requires Python z but got Python z>Test requires a specific Python version but not found in path T)Zenable_trace_unittest)r   pathjoinr[   r\   escaperX   rY   r]   tuplemapintr^   removeprefixrZ   sysversion_infor   unittestZSkipTestr!   r(   r)   r*   rH   r+   r	   r,   )	r$   prefixregexsearch_pathmZtest_py_verrb   expectedgotr%   r   r   r(      s0   


zCPythonTestCase.setUpClassr@   )2rA   rB   rC   __doc__r)   r*   rD   Zdynamo_strict_nopythonrn   r   ZassertEqualZassertNotEqualZ
assertTrueZassertFalseZassertIsZassertIsNotZassertIsNoneZassertIsNotNoneZassertInZassertNotInZassertIsInstanceZassertNotIsInstanceZassertAlmostEqualZassertNotAlmostEqualZassertGreaterZassertGreaterEqualZ
assertLessZassertLessEqualassertRegexassertNotRegexassertCountEqualZassertMultiLineEqualZassertSequenceEqualZassertListEqualZassertTupleEqualZassertSetEqualZassertDictEqualZassertRaisesassertRaisesRegexZassertWarnsZassertWarnsRegexZ
assertLogsZfailZfailureExceptionrP   rW   rE   r"   r(   rF   r   r   r%   r   rG   j   sX   
 
rG   )r   ) ru   r)   r   rX   r2   r   r\   rl   rn   typingr   r   Ztorch.testingZtorch._logging._internalr   r   r   r   r   r   ZTorchTestCaserT   r	   r
   r   	getLoggerrA   r<   r   rh   r   rG   r   r   r   r   <module>   s&   

$(