
    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#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)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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      Q/var/www/html/engine/venv/lib/python3.12/site-packages/torch/_dynamo/test_case.pyr   r   &   s    > 2 II""$JJNN8#>#E% 6>::**,''- K  s   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                 V    | j                   j                          t        |           y N)r&   closesupertearDownClasscls	__class__s    r$   r+   zTestCase.tearDownClassD   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$   r4   zTestCase.setUpClassI   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$   r<   zTestCase.setUpU   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   removeHandlerrA   r   r=   itemsprintmost_commonr   r>   r*   tearDownr;   r   r:   logwarningset_grad_enabled)rC   kvr.   s      r$   rI   zTestCase.tearDown]   s    -NN((* 	&DAq!Q]]_%	&&&e.C.C.EEKK89""4#>#>? Fr/   xyargskwargsc                     t         j                  rt        |t        j                        st        |t        j                        ry t        |   ||g|i |S r(   )r   debug_disable_compile_counterr   r   CompileCounterIntr*   assertEqual)rC   rO   rP   rQ   rR   r.   s        r$   rV   zTestCase.assertEqualh   sK    001e556!U445w"1a9$9&99r/   r   N)__name__
__module____qualname__r5   r6   __annotations__classmethodr+   r4   r<   rI   r   rV   __classcell__r.   s   @r$   r   r   A   sm    %%%    	
 	
+	@:S :S : : : : :r/   r   c            
       T    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                  j0                  Zej                  j2                  Zej                  j4                  Zej                  j6                  Zej                  j8                  Zej                  j:                  Zej                  j<                  Zej@                  Z!ejD                  Z#ej                  jH                  Z$ej                  jJ                  Z%ej                  jL                  Z&ejN                  Z(ej                  jR                  Z)ej                  jT                  Z*ej                  jV                  Z+ej                  jX                  Z,ej                  jZ                  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                  j	                  ||      |      }t        | | j                  |       |S )N)error_on_graph_break)getattr_testMethodNamer   _dynamooptimizesetattr)rC   rb   rc   rd   methods        r$   
compile_fnzCPythonTestCase.compile_fn   sL     t334''h'OPVWd**F3	r/   c                    t         |          }| j                  }t        j                  |      j                  t        j                        d   j                  d      d   }t        j                  dt        j                  |            }|r>|j                         j                  t        j                        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)rC   suffixtest_cls	test_filepy_verr.   s        r$   ru   z CPythonTestCase._dynamo_test_key   s    )+>>OOH-33BFF;B?EEcJ1M	='//(*CD\\^))"&&199#rBFM)AfX66r/   c                 V    | j                   j                          t        |           y r(   )ra   r)   r*   r+   r,   s    r$   r+   zCPythonTestCase.tearDownClass   s    

r/   c                 t   t         j                  j                  dd      t         j                  j                  z   }t	        j
                  |      dz   }t        j                  |       }t	        j                  ||      }|rt        t        t        |j                         j                  |      j                  d                  }t        j                   d d }||k  rdj                  t        t"        |            }dj                  t        t"        |            }t%        j&                  d| d|       t%        j&                  d	t        j                  |              t(        	| U          t-        j.                         | _        | j0                  j3                  t5        j6                  d
             y )Ndynamocpythonz\d_\d{2}rq      rp   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joinry   rz   escaperv   rw   r{   tuplemapintr|   removeprefixrx   sysversion_infor   unittestSkipTestr*   r4   r5   r6   ra   r7   r   r8   )
r-   prefixregexsearch_pathmtest_py_verr   expectedgotr.   s
            r$   r4   zCPythonTestCase.setUpClass   sZ    h	2RWW[[@		&!K/ooc*IIe[)C)?)?)G)M)Mc)R STK%%bq)F#88C[$9:hhs3/0''+H:5EcUK  ##PQXQ`Q`adQePfg  	))+


  LL&*	
r/   rW   );rX   rY   rZ   __doc__r5   r6   r[   dynamo_strict_nopythonr   r   rV   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   boolrm   ru   r\   r+   r4   r]   r^   s   @r$   r`   r`   u   s       ! ##//K&&55N""--J##//K  ))H##//K$$11L''77O  ))H##//K((99"++?? ));;#,,AA%%33M!**==""--J''77O##//K&&55N((99$<<#99''77O((99&&55N11O$$11L ));;##//K((99""--J!!D((99S#X sHS#X../ 	
 
#s(		7# 	7     
 
r/   r`   ) )$r   r5   r    rv   r?   r   rz   r   r   typingr   r   r   r   torch.testingtorch._dynamor   torch._logging._internalr   r   r   r	   r
   r   TorchTestCaserr   r   r   r   	getLoggerrX   rJ   r   r   r   r`   r   r/   r$   <module>r      s        	 	 
  ' '   # .  # " g!U3c3h/0 $ 6.:} .:hg
h g
r/   