
    Bj                      6   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j        e          Zdde e!e df         z  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)Callable)Any)	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      Z/var/www/html/Carbon-Document/venv/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.tearDownClassF   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$   r4   zTestCase.setUpClassK   sj    $.00%%L+/ %(-  	
 	
 	
 	
 	
r/   c                 l   t          j                    | _        t          j        | _        dt          _        t                                                       t                       t          j
                                         t          j                    | _        t          j        | 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.   s    r$   r>   zTestCase.setUpW   s~    &+&;&=&=#*0*D'%)"*,,T\*****r/   c                 x   t          j        | j                   t          j                                        D ]3\  }}t                              d||                                           4t                       t          j        
                                 t          j        j                                         t                                                       | j        t          j                    ur3t                              d           t          j        | j                   | j        t,          _        d S )Nz%s %szRunning test changed grad mode)r   removeHandlerrC   r   r?   itemslogdebugmost_commonr   r@   r   _C	_autograd_saved_tensors_hooks_enabler*   tearDownr;   r:   warningset_grad_enabledr=   r   r<   )rE   kvr.   s      r$   rO   zTestCase.tearDowna   s    ---N((** 	3 	3DAqIIgq!--//222266888&e.C.E.EEEKK8999"4#>???%)%D"""r/   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)rE   rT   rU   rV   rW   r.   s        r$   r[   zTestCase.assertEqualn   sj    0	1e566	 !U455	
 F"uww"1a9$999&999r/   r   N)__name__
__module____qualname__r5   r6   __annotations__classmethodr+   r4   r>   rO   r   r[   __classcell__r.   s   @r$   r
   r
   C   s        %%%%          [  	
 	
 	
 	
 	
 [	
+ + + + + +E E E E E E:S :S : : : : : : : : : : : : :r/   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e2e0de1f         z  de3de0de1f         fd	Z4de2f fd
Z5e6d fd            Z7e6d fd            Z8de2de0dd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)rE   rg   rh   ri   methods        r$   
compile_fnzCPythonTestCase.compile_fn   sS     t344''h'OOPVWWd*F333	r/   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)rE   suffixtest_cls	test_filepy_verr.   s        r$   rz   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6r/   Nc                 z    | j                                          t                                                       d S r(   )rf   r)   r*   r+   r,   s    r$   r+   zCPythonTestCase.tearDownClass   s3    
r/   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}rv      ru   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joinr~   r   escaper{   r|   r   tuplemapintr   removeprefixr}   sysversion_infor   unittestSkipTestr*   r4   r5   r6   rf   r7   r   r8   )
r-   prefixregexsearch_pathmtest_py_verr   expectedgotr.   s
            r$   r4   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&*  	
 	
 	
 	
 	
r/   method_namepolicyc                     d S r(   r   )rE   r   r   s      r$   wrap_with_policyz CPythonTestCase.wrap_with_policy   s    r/   r\   );r]   r^   r_   __doc__r5   r6   r`   dynamo_strict_nopythonr   r
   r[   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   boolrr   rz   ra   r+   r4   r   rb   rc   s   @r$   re   re   {   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 xS)) 	
 
#s(	   	7# 	7 	7 	7 	7 	7 	7           [  
 
 
 
 
 [
:C  d        r/   re   )r   )$r   r5   r    r{   rA   r   r   r   r   collections.abcr   typingr   r   torch.testingtorch._dynamor   torch._logging._internalr   r   r   r   r	   r
   TorchTestCaserw   r   r   r   	getLoggerr]   rI   r   r   r   re   r   r/   r$   <module>r      s              				 				 



  $ $ $ $ $ $            # # # # # # . . . . . .            # " " " " " " " " " g!! S5c?* D    82: 2: 2: 2: 2:} 2: 2: 2:pp p p p ph p p p p pr/   