
    ^j$                     &   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#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)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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      b/var/www/ramen.bs-engineer-server.com/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dZd	ed
edededdf
 fdZ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.tearDownClassF   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#   r3   zTestCase.setUpClassK   sE    $..0%%LL+/ %(-	
r.   c                 T   t        j                         | _        t        j                  | _        dt        _        t        |           t                t        j                  j                          t        j                         | _        t        j                   | j                         y )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   sj    &+&;&;&=#*0*D*D'%)"**,T\\*r.   c                 h   t        j                  | j                         t        j                  j                         D ]*  \  }}t        j                  d||j                                , t                t        j                  j                          t        j                  j                  j                          t        | A          | j"                  t        j$                         ur4t        j'                  d       t        j(                  | j"                         | j*                  t,        _        y )Nz%s %szRunning test changed grad mode)r   removeHandlerrB   r   r>   itemslogdebugmost_commonr   r?   r   _C	_autograd_saved_tensors_hooks_enabler)   tearDownr:   r9   warningset_grad_enabledr<   r   r;   )rD   kvr-   s      r#   rN   zTestCase.tearDowna   s    -NN((* 	3DAqIIgq!--/2	3668&&e.C.C.EEKK89""4#>#>?%)%D%D"r.   c                 T    t                t        j                  j                          y r'   )r   r   r>   r?   )rD   s    r#   before_cuda_memory_leak_checkz&TestCase.before_cuda_memory_leak_checkn   s    r.   xyargskwargsc                 P   t         j                  rt        |t        j                        st        |t        j                        ry t        j                         x}r7|j                  x}r)t        j                  |      j                  x}rd|d   v ry t        | ,  ||g|i |S )Nr>   r   )r   debug_disable_compile_counterr   r   CompileCounterIntinspectcurrentframef_backgetframeinfocode_contextr)   assertEqual)	rD   rU   rV   rW   rX   	cur_frameupper_frame
upper_coder-   s	           r#   ra   zTestCase.assertEqualr   s    //!U4455**:  &22444$-$4$44[4#*#7#7#D#Q#QQZQ*Q-/w"1a9$9&99r.   c                 D    t         j                  ry t        |   |i |S r'   )r   rZ   r)   assertExpectedInline)rD   rW   rX   r-   s      r#   rf   zTestCase.assertExpectedInline   s$    //w+T<V<<r.   r   N)__name__
__module____qualname__r4   r5   __annotations__classmethodr*   r3   r=   rN   rT   r   ra   rf   __classcell__r-   s   @r#   r
   r
   C   s    %%%    	
 	
+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                  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e2e0de1f   z  de3de0de1f   fd	Z4de2f fd
Z5e6d fd       Z7e6d fd       Z8ejr                  d        Z:de2de0ddfdZ; xZ<S )CPythonTestCasez
    Test class for CPython tests located in "test/cpython/v{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)rD   rr   rs   rt   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                  |            }|rM|j                         j                  t        j                        j                  dd      j                  d      }n|S d| d	| d	| S )
N.r   z/v([\d_]+)/_ rR   CPython-)r)   _dynamo_test_keyr-   r\   getfilesplitr   sepresearchgroupstripreplacelstrip)rD   suffixtest_cls	test_filepy_verr-   s        r#   r   z CPythonTestCase._dynamo_test_key   s    )+>>OOH-33BFF;B?EEcJ1M	>7??8+DE\\^))"&&199#rBII#NFM)AfX66r.   Nc                 V    | j                   j                          t        |           y r'   )rq   r(   r)   r*   r+   s    r#   r*   zCPythonTestCase.tearDownClass   s    

r.   c                 4   t        j                  |       }t        j                  t        j
                  j                  d      t        j
                  j                  z         dz   }t        j                  ||      }|rt        t        t        |j                                     }t        j                  d d }||k7  rdj                  t        t        |            }dj                  t        t        |            }t!        j"                  d| d|       t!        j"                  dt        j                  |              t$        | M          t)        j*                         | _        | j,                  j/                  t1        j2                  dd	             y )
Ncpythonzv(\d)_(\d{2})   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enable_trace_load_build_class)r\   r   r   escaper   pathjoinr   r   tuplemapintgroupssysversion_infor   unittestSkipTestr)   r3   r4   r5   rq   r6   r   r7   )	r,   search_pathcpython_test_regexmtest_py_verr   expectedgotr-   s	           r#   r3   zCPythonTestCase.setUpClass   sI    ooc* IIbggll9-;<?OO 	 II(+6C 45K%%bq)F$88C[$9:hhs3/0''+H:5EcUK  ##PQXQ`Q`adQePfg  	))+


  LL&*.2	
r.   c              /      K   d  y wr'    )rD   rW   rX   s      r#   subTestzCPythonTestCase.subTest   s      	s   method_namepolicyc                      y r'   r   )rD   r   r   s      r#   wrap_with_policyz CPythonTestCase.wrap_with_policy  s    r.   rg   )=rh   ri   rj   __doc__r4   r5   rk   dynamo_strict_nopythonr   r
   ra   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   boolr}   r   rl   r*   r3   contextmanagerr   r   rm   rn   s   @r#   rp   rp      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 xS)) 	
 
#s(		7# 	7     
 
@  C  d r.   rp   )r   )$r   r4   r   r\   r@   r   r   r   r   collections.abcr   typingr   r   torch.testingtorch._dynamor   torch._logging._internalr   r   r   r   r	   r
   TorchTestCaser   r   r   r   	getLoggerrh   rH   r   r   r   rp   r   r.   r#   <module>r      s        	 	 
  $    # .  # " g!S5c?* D 8B=} B=Jzh zr.   