
    sh                        S SK Jr  S SKJr  S SKJrJr  S SKJr  S SK	r	S SK
r	S SKr	S SKr	S SKr	S SKr	S SKrS SKrS SKJr  S SKJrJrJrJrJrJr  S SKJr  S S	KJr  S S
KJr  S SKJr  S SK J!r!  S SK"J#r#  S SK$r%S SK&r&S SK r S SK'r'S SK(r(S SK)r)S SK*r*S SK+r+S SK,r,S SK-J.r.  S SK/J0r0J1r1  \	Rd                  Rg                  5       r4\4=(       a    \	Rd                  Rk                  5       S:  r6\4r7\	Rd                  Rg                  5       (       a  \	Rp                  Rr                  (       di  \	Rt                  Rw                  5       r<\=" \	Rd                  Rk                  5       5       H+  r>\	Rd                  R                  \>5      S    r@\@S:  d  M)  Sr7M-     S rAS rBS rCS rD " S S5      rESrF " S S\5      rG " S S5      rH\S 5       rI\S 5       rJ\S2S  j5       rKS! rLS" rMS# rNS$ rOS% rPS& rQS' rRS( rSS) rTS* rUS+ rVS, rW " S- S.5      rXS/ rYS0 rZS1 r[g)3    Variable_nested_map)BroadcastingList2BroadcastingList3)OperatorExportTypesN)	FileCheck)
IS_WINDOWSfreeze_rng_state)enable_profiling_mode_for_profiling_testsProfilingModeTEST_BAILOUTSis_iterable_of_tensors)JitCommonTestCase)enable_profiling_mode)contextmanager)reduce)StringIO)defaultdict)Loader)AnyUnion      Fc                     [        XU5        g N)exec)codegloblocs      u/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/torch/testing/_internal/jit_utils.pyexecWrapperr#   7   s    S    c                 (    [        S U 5      " U5      $ )Nc                 6    [        U [        R                  5      $ r   )
isinstancetorchTensorts    r"   <lambda>do_input_map.<locals>.<lambda>;   s    Au||!<r$   r   )fninputs     r"   do_input_mapr0   :   s    <bA%HHr$   c                     [         R                  R                  5         [         R                  R                  R                  5       [         R                  R                  l        [         R                  R                  R                  5         g r   )	r(   _C_jit_clear_class_registryjit
_recursiveConcreteTypeStoreconcrete_type_store_state_clear_class_state r$   r"   clear_class_registryr;   =   sM    	HH&&(/4yy/C/C/U/U/WEII,	II'')r$   c                     [        U R                  R                  5       5      n[        U5      nUS:w  a  [	        SU 35      eUS   $ )Nr   zOThis test assumes this GraphExecutor should only have one execution plan, got: r   )listexecution_plansvalueslenRuntimeError)graph_executor_stater>   	num_planss      r"   get_execution_planrD   B   sX    /??FFHIOO$IA~ AAJM N 	N1r$   c                   *    \ rS rSrSrS rS rS rSrg)&_AssertRaisesRegexWithHighlightContextJ   zr
A context manager that is useful for checking that error messages highlight
the correct part of the source code.
c                 4    Xl         X l        X0l        X@l        g r   )	test_caseexception_typeregex	highlight)selfrI   	exceptionrK   rL   s        r"   __init__/_AssertRaisesRegexWithHighlightContext.__init__P   s    "'
"r$   c                     U $ r   r:   rM   s    r"   	__enter__0_AssertRaisesRegexWithHighlightContext.__enter__V   s    r$   c                 D   U R                   R                  U R                  U R                  5         U(       a  Ue S S S 5        U R                  (       a;  [        5       R                  U R                  5      R                  [        U5      5        g! , (       d  f       N[= fNT)	rI   assertRaisesRegexrJ   rK   rL   r
   check_source_highlightedrunstr)rM   typevalue	tracebacks       r"   __exit__/_AssertRaisesRegexWithHighlightContext.__exit__Y   sl    ^^--d.A.A4::N  O >>K00@DDSZP ONs   
B
B)rJ   rL   rK   rI   N)	__name__
__module____qualname____firstlineno____doc__rO   rS   r^   __static_attributes__r:   r$   r"   rF   rF   J   s    
#r$   rF   zprim::TensorExprGroupc                   F  ^  \ rS rSrSrSr " S S\5      r " S S\5      rS r	S	 r
U 4S
 jrU 4S jrS"S jrS rS rS rS rS#S jrS$S jrS$S jrS rS rS rS rS rSSSS\R6                  4S jrS rSSSSS\R6                  SS4S jr    S%S  jrS! r Sr!U =r"$ )&JitTestCasee   TFc                   $    \ rS rSrSrS rS rSrg)JitTestCase.capture_stdouti   z.
Replace sys.stdout with a temporary StringIO
c                 x    [         R                  U l        [        5       U l        U R                  [         l        U $ r   )sysstdout
sys_stdoutr   stringiorR   s    r"   rS   $JitTestCase.capture_stdout.__enter__m   &    !jjDO$JDMCJKr$   c                     U R                  [        U R                  R                  5       5      5        U ?U R                  [
        l        g r   )appendrZ   rp   getvaluero   rm   rn   rM   argss     r"   r^   #JitTestCase.capture_stdout.__exit__s   0    KKDMM22456CJr$   )rp   ro   Nr`   ra   rb   rc   rd   rS   r^   re   r:   r$   r"   capture_stdoutrj   i       			)r$   r{   c                   $    \ rS rSrSrS rS rSrg)JitTestCase.capture_stderrx   z.
Replace sys.stderr with a temporary StringIO
c                 x    [         R                  U l        [        5       U l        U R                  [         l        U $ r   )rm   stderr
sys_stderrr   rp   rR   s    r"   rS   $JitTestCase.capture_stderr.__enter__|   rr   r$   c                     U R                  [        U R                  R                  5       5      5        U ?U R                  [
        l        g r   )rt   rZ   rp   ru   r   rm   r   rv   s     r"   r^   #JitTestCase.capture_stderr.__exit__   ry   r$   )rp   r   Nrz   r:   r$   r"   capture_stderrr~   x   r|   r$   r   c                 l    [         R                  R                  U R                  U R                  5        g r   )r(   r2   _jit_set_emit_hooksemitModuleHookemitFunctionHookrR   s    r"   setHooksJitTestCase.setHooks   s"    $$T%8%8$:O:OPr$   c                 D    [         R                  R                  S S 5        g r   )r(   r2   r   rR   s    r"   
clearHooksJitTestCase.clearHooks   s    $$T40r$   c                    > [         TU ]  5         [        R                  (       d3  [        R
                  R                  R                  5         S[        l        U R                  5         g rV   )	supersetUprg   _restored_warningsr(   r4   TracerWarningignore_lib_warningsr   rM   	__class__s    r"   r   JitTestCase.setUp   s>     --II##779-1K*r$   c                 V   > [         TU ]  5         U R                  5         [        5         g r   )r   tearDownr   r;   r   s    r"   r   JitTestCase.tearDown   s      	r$   r:   c                   ^^ U4S jmS[         SSSSS1[        U5      -  m[        [        5      nT" U[         U5        U R	                  [        U5      S:H  S	U 35        [        [        UR                  5       5      5      u  pU R	                  [        U5      S:H  S	U 35        U R	                  [        U4S
 jUR                  5        5       5      S	U 35        g )Nc                   > U R                  5        GHq  nUR                  5       U:X  a  X    R                  U5        M-  UR                  5       S:X  a  T" UR                  S5      X5        M[  UR                  5       S:X  a  UR	                  5       R                  5       R                  5       R                  5       S:X  d|  UR	                  5       R                  5       R                  5       R                  5       S:X  d>  UR	                  5       R                  5       R                  5       R                  5       S:X  a(  T" UR                  5       R                  5       X5        GMQ  UR                  5        H  nT" XAU5        M     GMt     g )Nzprim::DifferentiableGraphSubgraphprim::Ifz	aten::allprim::TypeCheckprim::RequiresGradCheck)nodeskindrt   ginputs__next__nodeblocks)blockr   accr   inner_block!get_nodes_and_parents_recursivelys        r"   r   EJitTestCase.assertAllFused.<locals>.get_nodes_and_parents_recursively   s   99;$&J%%d+YY[$??5dffZ6H$TYY[J.DKKM4J4J4L4Q4Q4S4X4X4Z^i4i48KKM4J4J4L4Q4Q4S4X4X4Z^o4o48KKM4J4J4L4Q4Q4S4X4X4Z^w4w5dkkm6L6L6NPTZ'+{{}9+SQ (5 &r$   zprim::Constantzprim::BailoutTemplatezprim::TupleConstructr   r   r   r   zgot c              3   H   >#    U  H  oR                  5       T;   v   M     g 7fr   )r   ).0r   allowed_nodess     r"   	<genexpr>-JitTestCase.assertAllFused.<locals>.<genexpr>   s     S]TIIK=8]s   ")FUSION_GROUPsetr   r=   
assertTruer@   nextiteritemsallr   )rM   graph
except_forfusion_groupsfusion_nodesr   r   s        @@r"   assertAllFusedJitTestCase.assertAllFused   s    	R *<9P/=NPikmpq{m|} EPPTDU)%}MM*a/4w@ $T-*=*=*?%@ AL)Q.$ug?SU[[]SSug	(r$   c                 >    [        U5      nSnU H
  nXB;   d  M
    g   g)N)z Could not export Python functionzclosures are not exportableTF)rZ   )rM   eseallowedas        r"   _isHookExceptionOkJitTestCase._isHookExceptionOk   s)    V2Aw  r$   c                   ^  U 4S jn[         R                  R                  5           [        UR                  5      S:X  a
   S S S 5        g [        U[         R                  R                  5      (       a'  [        UR                  5       5      S:X  a
   S S S 5        g [        R                  " 5       n[         R                  R                  X5        UR                  5       nU" U5      u  pV[        R                  " U5      n[         R                  R!                  U5      n	[        R                  " 5       n
[         R                  R                  X5        U
R#                  S5        U" U
5      u  p[%        X[5       H  u  pT R'                  X5        M     [        U[         R                  R                  5      (       a8  T R)                  [         R                  R+                  XR,                  5      5        S S S 5        g ! [         a)  nT R                  U5      (       d  e  S nAS S S 5        g S nAff = f! , (       d  f       g = f)Nc                   >^ [         R                  " U 5      mT	R                  [        [	        TR                  5       5      5      [        TR                  5       5      5        [        [        S TR                  5       5      5      n[        S U5      nU4S jU 5       nS U 5       n[        S U5      nU4S jU 5       nS U 5       nXG4$ )Nc                 $    U R                  S5      $ )Nzarchive/code/)
startswithxs    r"   r,   KJitTestCase._compared_saved_loaded.<locals>.extract_files.<locals>.<lambda>   s    !,,*Gr$   c                 $    U R                  S5      $ )Nz.pyendswithr   s    r"   r,   r      s    ajj.?r$   c              3   F   >#    U  H  nTR                  U5      v   M     g 7fr   openr   farchives     r"   r   LJitTestCase._compared_saved_loaded.<locals>.extract_files.<locals>.<genexpr>   s      I.Qa.   !c              3      #    U  H4  nS R                  U Vs/ s H  o"R                  5       PM     sn5      v   M6     gs  snf 7f) N)joindecode)r   filelines      r"   r   r      s4     bPa"''T"BTT;;=T"BCCPa"Bs   A>
Ac                 $    U R                  S5      $ )Nz
.debug_pklr   )r   s    r"   r,   r      s    qzz,/Gr$   c              3   F   >#    U  H  nTR                  U5      v   M     g 7fr   r   r   s     r"   r   r      s     !K?a',,q//?r   c              3   N   #    U  H  n[         R                  " U5      v   M     g 7fr   )pickleload)r   r   s     r"   r   r      s     F3Ea6;;q>>3Es   #%)zipfileZipFileassertEqualr@   r   namelistr=   filter)
bufferfilescode_files_strcode_files_stream
code_filesdebug_files_strdebug_files_streamdebug_filesr   rM   s
           @r"   extract_files9JitTestCase._compared_saved_loaded.<locals>.extract_files   s    oof-GSW%5%5%7!893w?O?O?Q;RS GIYIYI[\]E#$?GN I. IbPabJ %%GOO!K?!KF3EFK**r$   r   )r(   _jit_internal_disable_emit_hooksr@   r   r'   r2   ScriptModule_method_namesioBytesIOr4   saveru   rA   r   r   seekzipassertMultiLineEqualr   _ivalue_tags_match_c)rM   mr   r   buffer_copyr   _debug_filesr   buffer2importedsaved_module_buffer_2code_files_2_debug_files_2r   bs   `              r"   _compared_saved_loaded"JitTestCase._compared_saved_loaded   s   	+$   446qvv;!#	 76
 a!6!6771??,-2 76 		q) %oo/+8+@(
 jj-Gyy~~g.H %'JJL!IINN8;!&&q)+89N+O(LJ5))!/ 6 !UXX2233 ; ;A{{ KLQ 76&   ..q11/ 76&' 76sC   H2G<AG<AG<)D
H2<
H/H*H2*H//H22
I c                 h    UR                   S:X  d  SUR                   ;   a  g U R                  U5        g )Nz<lambda>zaten::)namer  )rM   funcs     r"   r   JitTestCase.emitFunctionHook  s*    99
"h$))&;##D)r$   c                 &    U R                  U5        g r   )r  )rM   modules     r"   r   JitTestCase.emitModuleHook	  s    ##F+r$   Nc                    [         R                  " 5       nUR                  S 5        [        R                  R                  X5        UR                  S 5        UR                  S5        [        R                  R                  XCS9nUR                  S 5        U(       d  U$ [        R                  " SS9n UR                  5         UR                  UR                  5        [        R                  R                  UR                  US9n[        R                  " UR                  5        UR                  S 5        U$ ! [        R                  " UR                  5        f = f)	Nc                 f    U R                   R                  S5      (       a  U R                  5       $ S $ )N_pack)r   _has_methodr  ss    r"   r,   <JitTestCase.getExportImportCopyWithPacking.<locals>.<lambda>  s&    qtt'7'7'@'@!'')JdJr$   c                 f    U R                   R                  S5      (       a  U R                  5       $ S $ N_unpackr   r  r  r  s    r"   r,   r    s&    )9)9))D)D!))+N$Nr$   r   )map_locationc                 f    U R                   R                  S5      (       a  U R                  5       $ S $ r  r  r  s    r"   r,   r    s'    0@0@0K0K!UQU!Ur$   F)deletec                 f    U R                   R                  S5      (       a  U R                  5       $ S $ r  r  r  s    r"   r,   r  $  s&    add.>.>y.I.Iqyy{StSr$   )r   r   applyr(   r4   r   r   r   tempfileNamedTemporaryFilecloser  osunlink)rM   r   also_test_filer  r   r  r   results           r"   getExportImportCopyWithPacking*JitTestCase.getExportImportCopyWithPacking  s    	JK		q!	NOA99>>&>DUVO
 ''u5	GGIMM!&&!YY^^AFF^FFIIaffST IIaffs   7AD> >"E c                    ^^ U(       aF  [        U5      nUR                  T5      UR                  ST 35      -
  nU R                  US:  5        g UU4S jmT" U5      nU R                  [        U5      S:  5        g )Nwith r   c                    > / nU R                  5        HJ  nUR                  5       T:X  a  UR                  U5        UR                  5        H  n UT" U 5      -  nM     ML     U$ r   r   r   rt   r   r   outr   r   r   s      r"   r   .JitTestCase.assertGraphContains.<locals>.nodes/  W    C99;$&JJt$![[]E5<'C + &
 Jr$   )rZ   countr   r@   )rM   r   r   consider_subgraphsstrgraphr2  	out_nodesr   s     `    @r"   assertGraphContainsJitTestCase.assertGraphContains'  si    5zHNN4(8>>E$.+IIEOOEAI&	 %L	I*+r$   c                    ^^	 S nU(       a=  [        U5      nUR                  T5      UR                  ST 35      -
  nU" UTXsU5        g UU	4S jm	T	" U5      nU" UT[        U5      UU5        g )Nc                 V    X#:X  a  g U(       a  SOSn[        U  SU SU SU SU 3	5      e)N	including	excludingz
Error: graph contains  z nodes (z subgraphs) but expected )AssertionError)r   r   actualexpectedr3  subgraphs         r"   perform_assert>JitTestCase.assertGraphContainsExactly.<locals>.perform_assert<  sG    !&8{kH '1&4&
Rkltkuvx xr$   r+  c                    > / nU R                  5        HJ  nUR                  5       T:X  a  UR                  U5        UR                  5        H  n UT" U 5      -  nM     ML     U$ r   r-  r.  s      r"   r   5JitTestCase.assertGraphContainsExactly.<locals>.nodesJ  r1  r$   )rZ   r2  r@   )
rM   r   r   num_kind_nodesr3  rA  r4  r2  r5  r   s
     `      @r"   assertGraphContainsExactly&JitTestCase.assertGraphContainsExactly;  st    	x 5zHNN4(8>>E$.+IIE5$-/	 %L	udC	NN)	+r$   c                     [         R                  R                  U[        R                  S9nU R
                  " U/UQ70 UD6  g )N)operator_export_type)r(   onnx_optimize_tracer	   ONNXassertExpectedGraph)rM   r   rw   kwargss       r"   assertExpectedONNXGraph#JitTestCase.assertExpectedONNXGraphW  s:    JJ&&q?R?W?W&X  4T4V4r$   c                    [        U[        R                  R                  5      (       a  UnOUR	                  5       n[        R                  R                  U5        [        R                  R                  U5        [        R                  R                  U5        [        R                  R                  U5      n[        R                  R                  U5        U R                  " [        U5      /UQ70 UD6  g r   )
r'   r(   r2   Graphr   _jit_pass_lint_jit_pass_dce_jit_pass_canonicalizeassertExpectedrZ   )rM   tracerw   rN  r   s        r"   rM  JitTestCase.assertExpectedGraph[  s    eUXX^^,,EKKME&u%&//6&CJ888r$   c                    [        U[        R                  R                  5      (       a  UnSnOSnUR	                  5       n[        R                  R                  U5        [        [        R                  SU-   5      " U5      nUb  [        U[        5      (       d  Un[        R                  R                  U5        U(       a  UR                  U5        U$ )NFT
_jit_pass_)	r'   r(   r2   rR  r   rS  getattrbool	set_graph)rM   r  rW  r   r]  r'  s         r"   run_passJitTestCase.run_passh  s    eUXX^^,,EIIKKME&<$#67>j&>&>E&OOE"r$   c                 2   [         R                  " 5       nU(       d  [        S5      eSnX1S-   :  a-  UR                  nU(       d  [        S5      eUS-  nX1S-   :  a  M-  0 nUR	                  UR
                  5        UR	                  UR                  5        U$ )Nzfailed to inspect framer   r   zfailed to get frame)inspectcurrentframerA   f_backupdatef_locals	f_globals)rM   	frames_upframeidefined_varss        r"   get_frame_varsJitTestCase.get_frame_varsz  s    $$&899a-LLE"#899FA	 a-
 (*ENN+EOO,r$   c                     [        XX#5      $ r   )rF   )rM   rN   rK   rL   s       r"   assertRaisesRegexWithHighlight*JitTestCase.assertRaisesRegexWithHighlight  s    5duXXr$   r   c
                    [        5          U R                  X45         [        U[        5      (       a3  U R	                  U5      n
0 n[        XUS9  U
R                  U5        X   nOUnU" U6   SSS5        U R                  X45         [        U[        5      (       a)  [        R                  R                  XS9n[        X5      nO\[        R                  " [        R                  " U5      5      n[        R                  R                  XS9n[        XR                  5      nU" U6   SSS5        [        U[        5      (       d>  U R                  X45         [        R                  R!                  W5      nU" U6   SSS5        SSS5        g! , (       d  f       GN$= f! , (       d  f       N|= f! , (       d  f       N:= f! , (       d  f       g= f)z
Checks that a given function will throw the correct exception,
when executed with normal python, the string frontend, and the
AST frontend. Logic taken from `checkScript` (see comments there
for details)
r    r!   N
_frames_up)r   rW   r'   rZ   rk  r#   rd  r(   r4   CompilationUnitr[  textwrapdedentra  	getsourcer`   script)rM   rx  r   rN   rK   r  outputscapture_outputrg  	profilingrh  
the_locals	python_fncustring_frontendsourceges                    r"   checkScriptRaisesRegex"JitTestCase.checkScriptRaisesRegex  sY    78''	9fc** //	:E13J
CLL, %I &I6" : ''	9fc**2262PB&-b&7O%__W->->v-FGF2262PB&-b//&BO( : fc**++I=)))4BK >; 9899 :9 >=; 98sT   F>AF
-F>B F&.F>%F-9F>

F	F>
F*	&F>-
F;	7F>>
Gc                     UR                  5       n[        U5      nUR                  R                  5       n[	        SU5       H4  nUR                  R                  U5        U" U6 nU R                  X5        M6     g Nr   )get_debug_staterD   r   num_bailoutsrangerequest_bailoutr   )	rM   modelr   r?  stateplanr  ri  bailout_outputss	            r"   checkBailoutsJitTestCase.checkBailouts  sf    %%'!%(yy--/q,'AII%%a(#VnO_7 (r$   r  c                 *   [         R                  R                  U5         [        5          [	        S U 5       5      n[        U[        5      (       a[  [         R                  R                  XS9nU R                  U5      n0 n[        XUS9  UR                  U5        X   n[        X5      nOj[        R                  " [        R                  " U5      5      nU R!                  UUUR"                  UUUUSS9  [         R                  R%                  USS9nUnU(       a  ['        S U5      nOUnU(       a  U R)                  5        nU" U6 nSSS5        U R)                  5          U" U6 nSSS5        U R)                  5          U" U6 nSSS5        [*        (       d  U R-                  WS	   S
S9  U R/                  WWXS9  O@U" U6 nU(       d  U(       a  U" U6 nU" U6 n[0        (       a  U R3                  UUU5        U" U6 nU R/                  UWXS9  U R/                  UUXS9  UsSSS5        sSSS5        $ ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       O= f SSS5        g! , (       d  f       g= f)zd
Checks that a given script generates the same output as the Python
version using the given inputs.
c              3   |   #    U  H2  n[        U[        R                  5      =(       a    UR                  v   M4     g 7fr   )r'   r(   r)   requires_grad)r   r   s     r"   r   *JitTestCase.checkScript.<locals>.<genexpr>  s*     (ibh]^Au||)D)X)Xbhs   :<rr  rq     )optimizeinputs_requires_gradrz  r{  rg  r   c                 >    U R                  5       R                  5       $ r   )detachrequires_grad_r*   s    r"   r,   )JitTestCase.checkScript.<locals>.<lambda>  s    ahhj>W>W>Yr$   Nr   rn   )subnameatolrtol)r(   r4   optimized_executionr   anyr'   rZ   rt  rk  r#   rd  r[  ru  rv  ra  rw  checkScriptr`   rx  r0   r{   r   rV  r   r   r  )rM   rx  r   r  r  r  rz  rg  r{  r  r  extra_profile_runsr~  rh  r|  r}  scripted_fnr  recording_inputsscript_stdoutscript_outputsopt_script_outputspython_outputss                          r"   r  JitTestCase.checkScript  s]    YY**84:<%((ibh(i%i"fc** 2262PB
 !//	:E13J
CLL, %I")""3K &__W->->v-FGF$$!)-A'5"+"# % % #())"2"26a"2"HK &I''34Y[a'b$'-$!,,.-)46F)G /,,.-8:J-K* /,,.)2F); /%:++M!,<h+O$$^5Gd$^ &12B%CN+/A-8:J-K*)46F)G&$}**;@RS%.%7N  d V  1C$ Z"} =< 54T /.....[ =<< 544sl   JDI)H6I)$I*I)IBI)#	J6
I I)
II)
I&"I))
I7	3J
Jc                   ^^ U4S jnUc  UnU4S jnUnU(       a  [        S U5      mU" T5      nOUm[        R                  R                  XUU
SS9nU	(       a  U R	                  U5      nU(       a  [        UR                  5        U" U6 nU" U6 nU R                  UU5        U" T6 nU(       a%  [        R                  R                  U" U5      WUS9nU" T6 nU(       a%  [        R                  R                  U" U5      WUS9nU R                  UU5        U(       a  U R                  WWXS9  U" T6 nU" U5      nU(       a   [        R                  R                  UWSUS	9nU(       a*  U" W5      U-  n[        R                  R                  UWUS9nU(       a  [        S
 U5      mU" T5      nU" T6 nU" U5      nU(       a   [        R                  R                  UWSUS	9nU(       a*  U" W5      U-  n[        R                  R                  UWUS9nU R                  UU5        U(       aA  U R                  WWXS9  [        WW5       H   u  nnUc  Uc  M  U R                  UUSSS9  M"     U$ )Nc                 L   > Tb  U S T*  n [        S [        U 5       5       5      $ )Nc              3      #    U  H6  u  pUc  M
  [         R                  " US-   5      UR                  5       -  v   M8     g 7f)Nr  )mathlogsum)r   ri  vs      r"   r   9JitTestCase.checkTrace.<locals>.allSum.<locals>.<genexpr>  s.     \]TQa0txxA0]s
   	A 1A )r  	enumerate)vsdrops    r"   allSum&JitTestCase.checkTrace.<locals>.allSum  s/     $Z \Yr]\\\r$   c                 :   >^ U4S jm[        T" TS / 5      5      $ )Nc                    >^ ^ [        T [        R                  5      (       a  T" T U5        U$ [        T [        5      (       a  [	        UU U4S jT U5        U$ [	        UU4S jT U5        U$ )Nc                    > T" TU   TU 5      $ r   r:   )r   keyr.   r/   input_reduces     r"   r,   VJitTestCase.checkTrace.<locals>.flatten_inputs.<locals>.input_reduce.<locals>.<lambda>%  s    LsR,Mr$   c                    > T" UTU 5      $ r   r:   )r   valr.   r  s     r"   r,   r  '  s    Lb#,Fr$   )r'   r(   r)   dictr   )r/   r.   r   r  s   `` r"   r  DJitTestCase.checkTrace.<locals>.flatten_inputs.<locals>.input_reduce!  s\    eU\\22ucN
 
	  t,,MuVYZ 
 FsS
r$   c                 $    UR                  U 5      $ r   )rt   )r+   r   s     r"   r,   @JitTestCase.checkTrace.<locals>.flatten_inputs.<locals>.<lambda>)  s    szzRS}r$   )tuple)r   r  r  s    @r"   flatten_inputs.JitTestCase.checkTrace.<locals>.flatten_inputs   s!     &68TVXYZZr$   c                 >    U R                  5       R                  5       $ r   )cloner  r*   s    r"   r,   (JitTestCase.checkTrace.<locals>.<lambda>-  s    aggi6N6N6Pr$   F)check_tolerance_force_outplacecheck_trace)allow_unusedr  T)create_graphr  c                     [        U SS9$ )NT)r  r   r*   s    r"   r,   r  \  s    hqPT6Ur$   g-C6J?)r0   r(   r4   rW  getExportImportCopyprintr   r   autogradgradr   )rM   r  reference_tensorsinput_tensorsr  r  verboseinputs_require_gradsr  export_importr  	grad_atol	grad_rtolr  r  nograd_inputsflattened_recording_inputsr  ry  
outputs_gegradsgrads_gel1l2grads2l1_gel2_ge	grads2_geg2g2_ger  s       `                         @r"   
checkTraceJitTestCase.checkTrace  s   	]  -M		[ *+,PRcd)78H)I&0
 YY__T/-<%  Q ))"-B"((O &'
*- ()NN''w9S5A ( CE )*
~~**6*+=?Y8D + FH*-UH9M ()G_NN'',FUY5A ( CE-"$B^^((-GVb(cF+,UWhi)78H)I&)*
z"~~**1S_ + aH  H%-E++E3M\h+iI*-UH9M 3	E:%-  UD A 4
 	r$   c                 .   [         R                  R                  U5      n[        5          U" U6 nSSS5        [        5          U" U6 nSSS5        U R	                  WW5        U R                  X25        U$ ! , (       d  f       NK= f! , (       d  f       ND= f)zY
Check that a nn.Module's results in Script mode match eager and that it
can be exported
N)r(   r4   rx  r   r   assertExportImportModule)rM   	nn_modulerw   sm	eager_out
script_outs         r"   checkModuleJitTestCase.checkModules  sz    
 YYi(!4(I   TJ   	J/%%b/	    s   A5B5
B
B)r:   )TN)F)
NNFFTgh㈵>TFNN)#r`   ra   rb   rc   _do_cuda_memory_leak_checkr   r=   r{   r   r   r   r   r   r   r   r  r   r   r(  r6  rF  rO  rM  r^  rk  rn  r   	PROFILINGr  r  r  r  r  re   __classcell__)r   s   @r"   rg   rg   e   s    !%) )) )Q1(<;M|*,4,(+859$Y %)$u)*m6M6M( T8  !).#(+55N#` AE:?RVDHbH r$   rg   c                        \ rS rSrS rS rSrg)NoTracerWarnContextManageri  c                     [         R                  R                  5       U l        [         R                  R	                  S5        g NF)r(   r2   _jit_get_tracer_state_warnprev_jit_set_tracer_state_warnrR   s    r"   rS   $NoTracerWarnContextManager.__enter__  s(    HH779	++E2r$   c                 V    [         R                  R                  U R                  5        g r   )r(   r2   r  r  rv   s     r"   r^   #NoTracerWarnContextManager.__exit__  s    ++DII6r$   )r  N)r`   ra   rb   rc   rS   r^   re   r:   r$   r"   r  r    s    37r$   r  c              #     #    [         R                  R                  5       n[         R                  R                  U 5         S v   [         R                  R                  U5        g ! [         R                  R                  U5        f = f7fr   )r(   r2   _jit_get_inline_everything_mode_jit_set_inline_everything_mode)should_inlineolds     r"   inline_everything_moder    sU     
((
2
2
4C	HH,,];6005005   >B	A%  B	%!BB	c              #     #    [         R                  R                  5       n[         R                  R                  U 5         S v   [         R                  R                  U5        g ! [         R                  R                  U5        f = f7fr   )r(   r2    _debug_get_fusion_group_inlining _debug_set_fusion_group_inlining)inliningr  s     r"   set_fusion_group_inliningr	    sU     
((
3
3
5C	HH--h7711#611#6r  c              #      #    [         R                  R                  U (       + 5         S v   [         R                  R                  S5        g ! [         R                  R                  S5        f = f7frV   )r(   r2   %_debug_set_autodiff_subgraph_inlining)enableds    r"   "disable_autodiff_subgraph_inliningr    sE     	HH22w;?=66t<66t<s   %A0A  A0!A--A0c                 F   ^  [         R                  " T 5      U 4S j5       nU$ )Nc                  `   > [        S5         T" U 0 UD6  S S S 5        g ! , (       d  f       g = frV   r  rw   rN  r.   s     r"   wrapper#_inline_everything.<locals>.wrapper  s$    #D) *))   	
-	functoolswrapsr.   r  s   ` r"   _inline_everythingr    %    __R    Nr$   c                 F   ^  [         R                  " T 5      U 4S j5       nU$ )Nc                  `   > [        S5         T" U 0 UD6  S S S 5        g ! , (       d  f       g = fr  r  r  s     r"   r  5_tmp_donotuse_dont_inline_everything.<locals>.wrapper  s$    #E* +**r  r  r  s   ` r"   $_tmp_donotuse_dont_inline_everythingr    r  r$   c                     ^ ^ U U4S jnU$ )Nc                 H   > [         R                  R                  " U T40 TD6$ r   )r(   r4   rW  )r  rw   rN  s    r"   r  _trace.<locals>.wrapper  s    yytT4V44r$   r:   )rw   rN  r  s   `` r"   _tracer"    s    5Nr$   c                    ^  U 4S jnU$ )Nc                  P  > [         R                  R                  S5        [         R                  R                  S5        [         R                  R	                  S5         T" U 0 UD6  [         R                  R                  S5        [         R                  R                  S5        [         R                  R	                  S5        g ! [         R                  R                  S5        [         R                  R                  S5        [         R                  R	                  S5        f = fNTF)r(   r2   $_jit_override_can_fuse_on_cpu_legacy_jit_override_can_fuse_on_cpu_jit_set_te_must_use_llvm_cpur  s     r"   r  !enable_cpu_fuser.<locals>.wrapper  s    55d;..t4..u5	9HH99%@HH2259HH2248 HH99%@HH2259HH2248s    C AD%r:   r  s   ` r"   enable_cpu_fuserr*    s    	9 Nr$   c                 &    U (       a  [         $ S nU$ )Nc                    ^  U 4S jnU$ )Nc                     > T" U 0 UD6$ r   r:   r  s     r"   r  8enable_cpu_fuser_if.<locals>.noop_fuser.<locals>.wrapper  s    4*6**r$   r:   r  s   ` r"   
noop_fuser'enable_cpu_fuser_if.<locals>.noop_fuser  s    +Nr$   )r*  )condr/  s     r"   enable_cpu_fuser_ifr2    s    	 r$   c                 $    U R                  S5      $ Nforward)_get_methodcs    r"   get_forwardr9    s    ==##r$   c                 8    U R                  S5      R                  $ r4  )r6  r   r7  s    r"   get_forward_graphr;    s    ==#)))r$   c                 V    U R                   R                  U5      R                  U5      $ r   )r   r[  r6  )r   r  methods      r"   get_module_methodr>    s     44<<++F33r$   c                     U R                   R                  R                  5        VVs/ s H  u  p#UR                  U5      (       d  M  UPM!     snn$ s  snnf r   )_modulesr   r   r   )r  prefixr   _s       r"   attrs_with_prefixrC    sH     //,,224 %4$!||F# 4 % % %s   AAc                     Sn/ n[        U5       HU  n[        U5      S:  a4  [        R                  R                  " U /UQ76 nUR                  U5        MF  U R                  SS9  MW     U$ )N   r   T)retain_graph)r  r@   r(   r  r  rt   backward)r   rw   profiling_countresultsrB  rs         r"   warmup_backwardrK    s`    OG?#t9q=##A--ANN1JJDJ) $ Nr$   c                  z    U  H5  n[        [        R                  UR                     UR                  U5        M7     g r   )setattrrm   modulesra   r`   )rw   args     r"   make_globalrP    s)    CNN+S\\3? r$   c                    [         R                  " 5        n[        R                  R	                  US5      n[        US5       nUR                  U 5        S S S 5        [        R                  R                  X5      n[        R                  R                  U5      nUR                  n[        U[        5      (       d   eUR                  U5        [        Xa5      nUsS S S 5        $ ! , (       d  f       N= f! , (       d  f       g = f)Nz	script.pyw)r!  TemporaryDirectoryr$  pathr   r   write	importlibutilspec_from_file_locationmodule_from_specloaderr'   r   exec_moduler[  )	r   fn_nametmp_dirscript_pathr   specr  rZ  r.   s	            r"   _get_py3_coder`    s    		$	$	&'ggll7K8+s#qGGDM $~~55gK006&&))))6"V% 
'	&## 
'	&s$   -C6C%BC6%
C3	/C66
Dc                   $    \ rS rSrSS jrS rSrg)TensorExprTestOptionsi  Nc                 (   [         R                  R                  S5      U l        [         R                  R	                  S5      U l        [         R                  R                  5       U l        [         R                  R                  5       U l	        [         R                  R                  S5        [         R                  R                  S5        [         R                  R                  5       U l        [         R                  R                  S5        [         R                  R                  5       U l        [         R                  R#                  S5        [         R                  R%                  5       U l        [         R                  R)                  S5        g r%  )r(   r2   _jit_set_profiling_executorold_profiling_executor_get_graph_executor_optimizeold_profiling_mode_jit_can_fuse_on_cpuold_cpu_fuser_state_jit_can_fuse_on_gpuold_gpu_fuser_stater'  _jit_override_can_fuse_on_gpu_jit_texpr_fuser_enabledtexpr_fuser_state_jit_set_texpr_fuser_enabledr  old_fusion_inliningr  _jit_get_te_must_use_llvm_cpuold_te_must_use_llvm_cpur(  rR   s    r"   rO   TensorExprTestOptions.__init__  s    &+hh&J&J4&P#"'(("G"G"M#(88#@#@#B #(88#@#@#B ..t4..t4!&!B!B!D--d3#(88#L#L#N 11%8(-(N(N(P%..u5r$   c                 B   [         R                  R                  U R                  5        [         R                  R	                  U R
                  5        [         R                  R                  U R                  5        [         R                  R                  U R                  5        [         R                  R                  U R                  5        [         R                  R                  U R                  5        [         R                  R                  U R                  5        g r   )r(   r2   rd  re  rf  rg  ro  rn  rl  rk  r'  ri  r  rp  r(  rr  rR   s    r"   restoreTensorExprTestOptions.restore  s    ,,T-H-HI--d.E.EF--d.D.DE..t/G/GH..t/G/GH11$2J2JK..t/L/LMr$   )ri  rp  rk  re  rg  rr  rn  )returnN)r`   ra   rb   rc   rO   ru  re   r:   r$   r"   rb  rb    s    6Nr$   rb  c                    / nU  H  n[        U[        R                  5      (       a/  UR                  UR	                  5       R                  5       5        MQ  [        U5      (       a?  UR                  U Vs/ s H   o3R	                  5       R                  5       PM"     sn5        M  UR                  U5        M     U$ s  snf r   )r'   r(   r)   rt   r  r  r   )rw   r   rO  r+   s       r"   clone_inputsry    s    <>Fc5<<((MM#**,,,./#C((MMs;s!88:++-s;<MM#  M	 <s   5'B<
c           	        ^ / nTR                  X5      nTR                  5       nTR                  5       nXVS.nTR                  S;   nU(       a&  S[	        [
        R                  TR                  5      0nSS/S.SS/S.SS/S.S	S
/S.SS/S.SS/S.SS/S./n	U(       a  U$ U H  n
UR                  5        H  nUc  M  [        U5      (       a  M  [        U4S jU	5      nU H~  nUS    Hr  n[        U
R                  5      n[        U
R                  5      U:  a1  [        U
R                  U   [        5      (       a  [        X   5      X'   [!        U5      U
l        Mt     M     UR#                  X45        M     M     U$ )N)functionr=  )resize_
resize_as_r=  div_floor_roundingr   )r  arg_idxdiv_no_rounding_modediv_trunc_rounding
index_fillr  	full_likemulnew_fullr   c                 (   > TR                   U S   :H  $ )Nr  )formatted_name)r   ops    r"   r,   1get_traced_sample_variant_pairs.<locals>.<lambda>n  s    B,=,=6,Jr$   r  )sample_inputsget_op
get_methodr  r[  r(   r)   r?   	is_lambdar   r=   rw   r@   r'   r\  intr  rt   )devicedtyper  ry  samplesr  r=  variantshas_fake_functionops_with_unsupported_bool_argssamplevariantmatching_opsop_dataidxrw   s     `             r"   get_traced_sample_variant_pairsr  +  s   %'Gv-G 99;D]]_F H #<<gellBGG<= )s	

 +s	

 )s	

 !s	

  s	

 s	

 s	
3&"@ (G!!!"JLjkL'"9-C,D6;;'#-*V[[=Mt2T2T$'	N	"'+FK	 . ( NNG,- ) $ Nr$   c                 r    S n[        U [        U5      5      =(       a    U R                  UR                  :H  $ )Nc                      gr  r:   r:   r$   r"   r,   is_lambda.<locals>.<lambda>|  s    Qr$   )r'   r[   r`   )lambLAMBDAs     r"   r  r  {  s*    FdDL)Ndmmv.NNr$   )T)\torch.autogradr   torch.autograd.functionr   torch.jit.annotationsr   r   
torch.onnxr	   r(   
torch.cuda	torch.jittorch.jit._loggingtorch.jit.frontendtorch.jit.quantizedr   r  torch.testingr
   $torch.testing._internal.common_utilsr   r   r   r   r   r   "torch.testing._internal.common_jitr   r   
contextlibr   r   r   r   collectionsr   importlib.utilrV  ra  r  r$  r   rm   r!  ru  importlib.abcr   typingr   r   cudais_availableRUN_CUDAdevice_countRUN_CUDA_MULTI_GPURUN_CUDA_HALFversionhipr2   _cuda_getCompiledVersionCUDA_VERSIONr  dget_device_capabilitymajorr#   r0   r;   rD   rF   r   rg   r  r  r	  r  r  r  r"  r*  r2  r9  r;  r>  rC  rK  rP  r`  rb  ry  r  r  r:   r$   r"   <module>r     s   $ / F *         $  A F &   #   	  	  
     ::""$?%**"9"9";a"? ::U]]%6%688446L5::**,-

003A6AI!M .
I*
 2 '^# ^@7 7 6 6 7 7 = =$*4%
@N N4M`Or$   