
    WjX"                     `   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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$ 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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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      \/home/longshao/multi-rider-rag/.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.tearDownClassE   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%   r5   zTestCase.setUpClassJ   sj    $.00%%L+/ %(-  	
 	
 	
 	
 	
r0   c                 2   t          j                    | _        t                                                       t                       t          j                                         t          j
                    | _        t          j        | j                   d S r)   )r   is_grad_enabled_prior_is_grad_enabledr+   setUpr   r   countersclearloggingNullHandlerhandlerr   
addHandlerselfr/   s    r%   r=   zTestCase.setUpV   sk    &+&;&=&=#*,,T\*****r0   c                 B   t          j        | j                   t          j                                        D ]'\  }}t          ||                                           (t                       t          j        	                                 t          j        j                                         t                                                       | j        t          j                    ur5t$                              d           t          j        | j                   d S d S )NzRunning test changed grad mode)r   removeHandlerrB   r   r>   itemsprintmost_commonr   r?   r   _C	_autograd_saved_tensors_hooks_enabler+   tearDownr<   r;   logwarningset_grad_enabled)rE   kvr/   s      r%   rN   zTestCase.tearDown^   s    ---N((** 	& 	&DAq!Q]]__%%%%66888&e.C.E.EEEKK8999"4#>????? FEr0   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.assertEqualj   sj    0	1e566	 !U455	
 F"uww"1a9$999&999r0   r   N)__name__
__module____qualname__r6   r7   __annotations__classmethodr,   r5   r=   rN   r   r[   __classcell__r/   s   @r%   r   r   B   s        %%%%          [  	
 	
 	
 	
 	
 [	
+ + + + + +
@ 
@ 
@ 
@ 
@ 
@:S :S : : : : : : : : : : : : :r0   r   c                   ,     e Zd Zd fdZd fdZ xZS )TestCaseWithNestedGraphBreaksr   Nc                     t                                                       t          j        j        j        | _        dt          j        j        _        d S )NT)r+   r=   r   _dynamor   nested_graph_breaksprev_nested_graph_breaksrD   s    r%   r=   z#TestCaseWithNestedGraphBreaks.setUpz   s7    (-(<(P%37000r0   c                 ~    t                                                       | j        t          j        j        _        d S r)   )r+   rN   ri   r   rg   r   rh   rD   s    r%   rN   z&TestCaseWithNestedGraphBreaks.tearDown   s/    373P000r0   r\   )r]   r^   r_   r=   rN   rb   rc   s   @r%   re   re   y   se        8 8 8 8 8 8Q Q Q Q Q Q Q Q Q Qr0   re   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e2e3e0de1f         f         de4de0de1f         fd	Z5de3f fd
Z6e7d fd            Z8e7d fd            Z9de3de0ddfdZ: 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   rg   optimizesetattr)rE   rn   ro   rp   methods        r%   
compile_fnzCPythonTestCase.compile_fn   sS     t344''h'OOPVWWd*F333	r0   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%   r   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6r0   Nc                 z    | j                                          t                                                       d S r)   )rm   r*   r+   r,   r-   s    r%   r,   zCPythonTestCase.tearDownClass   s3    
r0   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}r|      r{   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+   r5   r6   r7   rm   r8   r   r9   )
r.   prefixregexsearch_pathmtest_py_verr   expectedgotr/   s
            r%   r5   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&*  	
 	
 	
 	
 	
r0   method_namepolicyc                     d S r)   r   )rE   r   r   s      r%   wrap_with_policyz CPythonTestCase.wrap_with_policy   s    r0   r\   )<r]   r^   r_   __doc__r6   r7   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   r    boolrx   r   ra   r,   r5   r   rb   rc   s   @r%   rl   rl      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 sHS#X../ 	
 
#s(	   	7# 	7 	7 	7 	7 	7 	7           [  
 
 
 
 
 [
:C  d        r0   rl   )r   )&r   r6   r!   r   r@   r   r   r   r   collections.abcr   typingr   r   r   torch.testingtorch._dynamor   torch._logging._internalr   r   r   r	   r
   r   TorchTestCaser}   r   r   r   	getLoggerr]   rO   r    r   r   re   rl   r   r0   r%   <module>r      s              				 				 



  $ $ $ $ $ $              # # # # # # . . . . . .            # " " " " " " " " " g!! U3c3h/0 $    6/: /: /: /: /:} /: /: /:n
Q 
Q 
Q 
Q 
QH 
Q 
Q 
Qp p p p ph p p p p pr0   