
    `i                         d dl mZ d dlmZ d dlmZmZ d dlm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mZmZmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dl m!Z! d dl"m#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,Z,d dl-m.Z. d dl/m0Z0m1Z1 e	j2        3                                Z4e4oe	j2        5                                dk    Z6e4Z7e	j2        3                                rre	j8        j9        sfe	j:        ;                                Z< e=e	j2        5                                          D ]*Z>e	j2        ?                    e>          d          Z@e@dk     rdZ7+d ZAd ZBd ZCd ZD G d d          ZEdZF G d de          ZG G d d          ZHed             ZIed             ZJed3d!            ZKd" ZLd# ZMd$ ZNd% ZOd& ZPd' ZQd( ZRd) ZSd* ZTd+ ZUd, ZVd- ZW G d. d/          ZXd0 ZYd1 ZZd2 Z[dS )4    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                 (    t          | ||           d S N)exec)codegloblocs      u/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/torch/testing/_internal/jit_utils.pyexecWrapperr#   7   s    tS    c                 6     t          d |           |          S )Nc                 6    t          | t          j                  S r   )
isinstancetorchTensorts    r"   <lambda>zdo_input_map.<locals>.<lambda>;   s    Au|!<!< r$   r   )fninputs     r"   do_input_mapr/   :   s     A;<<bAA%HHHr$   c                      t           j                                         t           j        j                                        t           j        j        _        t           j        j                                         d S r   )	r(   _C_jit_clear_class_registryjit
_recursiveConcreteTypeStoreconcrete_type_store_state_clear_class_state r$   r"   clear_class_registryr:   =   sQ    	H&&(((/4y/C/U/U/W/WEI,	I'')))))r$   c                     t          | j                                                  }t          |          }|dk    rt	          d|           |d         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_planrC   B   sj    /?FFHHIIOO$$IA~~ MAJM M N N 	N1r$   c                   $    e Zd ZdZd Zd Zd ZdS )&_AssertRaisesRegexWithHighlightContextz~
    A context manager that is useful for checking that error messages highlight
    the correct part of the source code.
    c                 >    || _         || _        || _        || _        d S r   )	test_caseexception_typeregex	highlight)selfrG   	exceptionrI   rJ   s        r"   __init__z/_AssertRaisesRegexWithHighlightContext.__init__P   s#    "'
"r$   c                     | S r   r9   rK   s    r"   	__enter__z0_AssertRaisesRegexWithHighlightContext.__enter__V   s    r$   c                 $   | j                             | j        | j                  5  |r|	 d d d            n# 1 swxY w Y   | j        rFt                                          | j                                      t          |                     dS NT)	rG   assertRaisesRegexrH   rI   rJ   r
   check_source_highlightedrunstr)rK   typevalue	tracebacks       r"   __exit__z/_AssertRaisesRegexWithHighlightContext.__exit__Y   s    ^--d.A4:NN 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 > 	QKK00@@DDSZZPPPts   8<<N)__name__
__module____qualname____doc__rM   rP   rZ   r9   r$   r"   rE   rE   J   sK         
# # #      r$   rE   zprim::TensorExprGroupc                   $    e Zd ZdZdZ G d de          Z G d de          Zd Zd Z	 fd	Z
 fd
Zd"dZd Zd Zd Zd Zd#dZd$dZd$dZd Zd Zd Zd Zd Zddddej        fdZd Zdddddej        ddfdZ	 	 	 	 d%d Zd! Z xZ S )&JitTestCaseTFc                       e Zd ZdZd Zd ZdS )JitTestCase.capture_stdoutz>
        Replace sys.stdout with a temporary StringIO
        c                 p    t           j        | _        t                      | _        | j        t           _        | S r   )sysstdout
sys_stdoutr   stringiorO   s    r"   rP   z$JitTestCase.capture_stdout.__enter__m   $    !jDO$JJDMCJKr$   c                     |                      t          | j                                                             | `| j        t
          _        d S r   )appendrV   rg   getvaluerf   rd   re   rK   argss     r"   rZ   z#JitTestCase.capture_stdout.__exit__s   <    KKDM224455666CJJJr$   Nr[   r\   r]   r^   rP   rZ   r9   r$   r"   capture_stdoutrb   i   <        	 		 	 		) 	) 	) 	) 	)r$   rp   c                       e Zd ZdZd Zd ZdS )JitTestCase.capture_stderrz>
        Replace sys.stderr with a temporary StringIO
        c                 p    t           j        | _        t                      | _        | j        t           _        | S r   )rd   stderr
sys_stderrr   rg   rO   s    r"   rP   z$JitTestCase.capture_stderr.__enter__|   rh   r$   c                     |                      t          | j                                                             | `| j        t
          _        d S r   )rj   rV   rg   rk   rv   rd   ru   rl   s     r"   rZ   z#JitTestCase.capture_stderr.__exit__   rn   r$   Nro   r9   r$   r"   capture_stderrrs   x   rq   r$   rx   c                 Z    t           j                            | j        | j                   d S r   )r(   r1   _jit_set_emit_hooksemitModuleHookemitFunctionHookrO   s    r"   setHookszJitTestCase.setHooks   s&    $$T%8$:OPPPPPr$   c                 F    t           j                            d d            d S r   )r(   r1   rz   rO   s    r"   
clearHookszJitTestCase.clearHooks   s     $$T400000r$   c                     t                                                       t          j        s/t          j        j                                         dt          _        |                                  d S rR   )	supersetUpr`   _restored_warningsr(   r3   TracerWarningignore_lib_warningsr}   rK   	__class__s    r"   r   zJitTestCase.setUp   sQ     - 	2I#77999-1K*r$   c                     t                                                       |                                  t                       d S r   )r   tearDownr   r:   r   s    r"   r   zJitTestCase.tearDown   s=     	r$   r9   c                 .   fddt           dddddht          |          z  t          t                    } |t           |           |                     t          |          dk    d	|            t          t          |                                                    \  }}|                     t          |          dk    d	|            |                     t          fd
|
                                D                       d	|            d S )Nc                    |                                  D ]}|                                |k    r||                              |           7|                                dk    r! |                    d          ||           p|                                dk    r|                                                                                                                                dk    s|                                                                                                                                dk    sN|                                                                                                                                dk    r3 |                                                                ||           |                                D ]} |||           d S )Nzprim::DifferentiableGraphSubgraphprim::Ifz	aten::allprim::TypeCheckprim::RequiresGradCheck)nodeskindrj   ginputs__next__nodeblocks)blockr   accr   inner_block!get_nodes_and_parents_recursivelys        r"   r   zEJitTestCase.assertAllFused.<locals>.get_nodes_and_parents_recursively   s    R R99;;$&&J%%d++++YY[[$???55dffZ6H6H$PSTTTTYY[[J..DKKMM4J4J4L4L4Q4Q4S4S4X4X4Z4Z^i4i4i48KKMM4J4J4L4L4Q4Q4S4S4X4X4Z4Z^o4o4o48KKMM4J4J4L4L4Q4Q4S4S4X4X4Z4Z^w4w4w55dkkmm6L6L6N6NPTVYZZZZ'+{{}} R R99+tSQQQQRR Rr$   zprim::Constantzprim::BailoutTemplatezprim::TupleConstructr   r   r   r   zgot c              3   D   K   | ]}|                                 v V  d S r   )r   ).0r   allowed_nodess     r"   	<genexpr>z-JitTestCase.assertAllFused.<locals>.<genexpr>   s0      SSTDIIKK=8SSSSSSr$   )FUSION_GROUPsetr   r<   
assertTruer?   nextiteritemsallr   )rK   graph
except_forfusion_groupsfusion_nodesr   r   s        @@r"   assertAllFusedzJitTestCase.assertAllFused   s<   	R 	R 	R 	R 	R *<9P/=NPikmpq{m|m|} EPPTDUDU))%}MMMM**a/@@@ $T-*=*=*?*?%@%@ A AL))Q.u???SSSSU[[]]SSSSS&u	( 	( 	( 	( 	(r$   c                 @    t          |          }d}|D ]	}||v r dS 
dS )N)z Could not export Python functionzclosures are not exportableTF)rV   )rK   eseallowedas        r"   _isHookExceptionOkzJitTestCase._isHookExceptionOk   s=    VV2 	 	ABwwtt ur$   c                      fd}t           j                                        5  	 t          |j                  dk    r	 d d d            d S t          |t           j        j                  r3t          |                                          dk    r	 d d d            d S t          j
                    }t           j                            ||           |                                } ||          \  }}n9# t          $ r,}                     |          s Y d }~d d d            d S d }~ww xY wt          j
        |          }t           j                            |          }	t          j
                    }
t           j                            |	|
           |
                    d            ||
          \  }}t%          ||          D ]\  }}                     ||           t          |t           j        j                  r8                     t           j                            ||	j                             d d d            d S # 1 swxY w Y   d S )Nc                    t          j        |           	                    t          t	                                                              t                                                               t          t          d                                                     }t          d |          }fd|D             }d |D             }t          d |          }fd|D             }d |D             }||fS )Nc                 ,    |                      d          S )Nzarchive/code/
startswithxs    r"   r,   zKJitTestCase._compared_saved_loaded.<locals>.extract_files.<locals>.<lambda>   s    !,,*G*G r$   c                 ,    |                      d          S )Nz.pyendswithr   s    r"   r,   zKJitTestCase._compared_saved_loaded.<locals>.extract_files.<locals>.<lambda>   s    ajj.?.? r$   c              3   B   K   | ]}                     |          V  d S r   openr   farchives     r"   r   zLJitTestCase._compared_saved_loaded.<locals>.extract_files.<locals>.<genexpr>   s-       I IQa I I I I I Ir$   c              3   T   K   | ]#}d                      d |D                       V  $dS ) c                 6    g | ]}|                                 S r9   )decode)r   lines     r"   
<listcomp>zWJitTestCase._compared_saved_loaded.<locals>.extract_files.<locals>.<genexpr>.<listcomp>   s     "B"B"BT4;;=="B"B"Br$   N)join)r   files     r"   r   zLJitTestCase._compared_saved_loaded.<locals>.extract_files.<locals>.<genexpr>   s=      bb"''"B"BT"B"B"BCCbbbbbbr$   c                 ,    |                      d          S )Nz
.debug_pklr   )r   s    r"   r,   zKJitTestCase._compared_saved_loaded.<locals>.extract_files.<locals>.<lambda>   s    qzz,/G/G r$   c              3   B   K   | ]}                     |          V  d S r   r   r   s     r"   r   zLJitTestCase._compared_saved_loaded.<locals>.extract_files.<locals>.<genexpr>   s-      !K!Ka',,q//!K!K!K!K!K!Kr$   c              3   >   K   | ]}t          j        |          V  d S r   )pickleload)r   r   s     r"   r   zLJitTestCase._compared_saved_loaded.<locals>.extract_files.<locals>.<genexpr>   s*      FFa6;q>>FFFFFFr$   )zipfileZipFileassertEqualr?   r   namelistr<   filter)
bufferfilescode_files_strcode_files_stream
code_filesdebug_files_strdebug_files_streamdebug_filesr   rK   s
           @r"   extract_filesz9JitTestCase._compared_saved_loaded.<locals>.extract_files   s   of--GSW%5%5%7%7!8!8993w?O?O?Q?Q;R;RSSS G GIYIYI[I[\\]]E#$?$?GGN I I I I. I I IbbPabbbJ %%G%GOOO!K!K!K!K?!K!K!KFF3EFFFK{**r$   r   )r(   _jit_internal_disable_emit_hooksr?   r   r'   r1   ScriptModule_method_namesioBytesIOr3   saverk   r@   r   r   seekzipassertMultiLineEqualr   _ivalue_tags_match_c)rK   mr   r   buffer_copyr   _debug_filesr   buffer2importedsaved_module_buffer_2code_files_2_debug_files_2r   bs   `              r"   _compared_saved_loadedz"JitTestCase._compared_saved_loaded   s   	+ 	+ 	+ 	+ 	+$  4466 (	M (	Mqv;;!##	(	M (	M (	M (	M (	M (	M (	M (	M
 a!677 1??,,--22(	M (	M (	M (	M (	M (	M (	M (	M 	q&))) %oo//+8=+@+@(
LL   ..q11 FFF/(	M (	M (	M (	M (	M (	M (	M (	M& j--Gy~~g..H %'JLL!INN8%:;;;!&&q)))+8=9N+O+O(L.J55 0 01))!Q////!UX233 M ; ;Ax{ K KLLLQ(	M (	M (	M (	M (	M (	M (	M (	M (	M (	M (	M (	M (	M (	M (	M (	M (	M (	MsI   IC5AC5AC54I5
D+?D&I&D++DIIIc                 \    |j         dk    s	d|j         v rd S |                     |           d S )Nz<lambda>zaten::)namer   )rK   funcs     r"   r|   zJitTestCase.emitFunctionHook  s:    9
""h$)&;&;F##D)))))r$   c                 0    |                      |           d S r   )r   )rK   modules     r"   r{   zJitTestCase.emitModuleHook	  s    ##F+++++r$   Nc                    t          j                    }|                    d            t          j                            ||           |                    d            |                    d           t          j                            ||          }|                    d            |s|S t          j	        d          }	 |
                                 |                    |j                   t          j                            |j        |          }t          j        |j                   n# t          j        |j                   w xY w|                    d            |S )	Nc                 b    | j                             d          r|                                 nd S )N_pack)r   _has_methodr   ss    r"   r,   z<JitTestCase.getExportImportCopyWithPacking.<locals>.<lambda>  s'    qt'7'7'@'@J!'')))d r$   c                 b    | j                             d          r|                                 nd S N_unpackr   r   r   r   s    r"   r,   z<JitTestCase.getExportImportCopyWithPacking.<locals>.<lambda>  s'    )9)9))D)DN!))+++$ r$   r   )map_locationc                 b    | j                             d          r|                                 nd S r   r   r   s    r"   r,   z<JitTestCase.getExportImportCopyWithPacking.<locals>.<lambda>  s(    0@0@0K0K!UQU r$   F)deletec                 b    | j                             d          r|                                 nd S r   r   r   s    r"   r,   z<JitTestCase.getExportImportCopyWithPacking.<locals>.<lambda>$  s'    ad.>.>y.I.ISqyy{{{t r$   )r   r   applyr(   r3   r   r   r   tempfileNamedTemporaryFilecloser   osunlink)rK   r   also_test_filer  r   r   r   results           r"   getExportImportCopyWithPackingz*JitTestCase.getExportImportCopyWithPacking  s4   	JJKKK	q&!!!	NNOOOA9>>&|>DDUUVVV 	O
 'u555	GGIIIMM!&!!!Y^^AF^FFFIafBIafSSTTTs   AD4 4Ec                 ,   |rXt          |          }|                              |                    d           z
  }|                     |dk               d S fd |          }|                     t          |          dk               d S )Nwith r   c                     g }|                                  D ]T}|                                k    r|                    |           |                                D ]} | |           z  }U|S r   r   r   rj   r   r   outr   r   r   s      r"   r   z.JitTestCase.assertGraphContains.<locals>.nodes/  y    C ( (99;;$&&JJt$$$![[]] ( (E55<<'CC(Jr$   )rV   countr   r?   )rK   r   r   consider_subgraphsstrgraphr  	out_nodesr   s     `    @r"   assertGraphContainszJitTestCase.assertGraphContains'  s     	5zzHNN4((8>>.$..+I+IIEOOEAI&&&F	 	 	 	 	 	 E%LL	I*+++++r$   c                 
  	 d }|rNt          |          }|                              |                    d           z
  } |||||           d S 	fd	 	|          } ||t          |          ||           d S )Nc                 X    ||k    rd S |rdnd}t          |  d| d| d| d| 	          )N	including	excludingz
Error: graph contains  z nodes (z subgraphs) but expected )AssertionError)r   r   actualexpectedr  subgraphs         r"   perform_assertz>JitTestCase.assertGraphContainsExactly.<locals>.perform_assert<  s_    !!&8I{{kH vv&vv4vvvvltvvx x xr$   r  c                     g }|                                  D ]T}|                                k    r|                    |           |                                D ]} | |           z  }U|S r   r  r  s      r"   r   z5JitTestCase.assertGraphContainsExactly.<locals>.nodesJ  r  r$   )rV   r  r?   )
rK   r   r   num_kind_nodesr  r#  r  r  r  r   s
     `      @r"   assertGraphContainsExactlyz&JitTestCase.assertGraphContainsExactly;  s    	x 	x 	x  	5zzHNN4((8>>.$..+I+IIEN5$~-/ / /F	 	 	 	 	 	 E%LL	udC	NNN)	+ 	+ 	+ 	+ 	+r$   c                 ~    t           j                            |t          j                  } | j        |g|R i | d S )N)operator_export_type)r(   onnx_optimize_tracer	   ONNXassertExpectedGraph)rK   r   rm   kwargss       r"   assertExpectedONNXGraphz#JitTestCase.assertExpectedONNXGraphW  sI    J&&q?R?W&XX  4T444V44444r$   c                    t          |t          j        j                  r|}n|                                }t          j                            |           t          j                            |           t          j                            |           t          j                            |          }t          j                            |            | j        t          |          g|R i | d S r   )
r'   r(   r1   Graphr   _jit_pass_lint_jit_pass_dce_jit_pass_canonicalizeassertExpectedrV   )rK   tracerm   r-  r   s        r"   r,  zJitTestCase.assertExpectedGraph[  s    eUX^,, 	"EEKKMME&&&u%%%&&&//66&&&CJJ888888888r$   c                    t          |t          j        j                  r|}d}nd}|                                }t          j                            |            t          t          j        d|z             |          }|t          |t                    s|}t          j                            |           |r|                    |           |S )NFT
_jit_pass_)	r'   r(   r1   r0  r   r1  getattrbool	set_graph)rK   r   r5  r   r:  r  s         r"   run_passzJitTestCase.run_passh  s    eUX^,, 	"EIIIKKMME&&&7<$#677>>j&>&>E&&& 	#OOE"""r$   c                    t          j                    }|st          d          d}||dz   k     r&|j        }|st          d          |dz  }||dz   k     &i }|                    |j                   |                    |j                   |S )Nzfailed to inspect framer   r   zfailed to get frame)inspectcurrentframer@   f_backupdatef_locals	f_globals)rK   	frames_upframeidefined_varss        r"   get_frame_varszJitTestCase.get_frame_varsz  s    $&& 	:8999)a-LE :"#8999FA	 )a-
 (*EN+++EO,,,r$   c                 &    t          | |||          S r   )rE   )rK   rL   rI   rJ   s       r"   assertRaisesRegexWithHighlightz*JitTestCase.assertRaisesRegexWithHighlight  s    5dIuiXXXr$   r   c
                    t                      5  |                     ||          5  t          |t                    rG|                     |          }
i }t          ||
|           |
                    |           |
|         }n|} ||  ddd           n# 1 swxY w Y   |                     ||          5  t          |t                    r2t          j        	                    ||          }t          ||          }n\t          j        t          j        |                    }t          j        	                    ||          }t          ||j                  } ||  ddd           n# 1 swxY w Y   t          |t                    sR|                     ||          5  t          j                            |          } ||  ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )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   rS   r'   rV   rG  r#   r@  r(   r3   CompilationUnitr8  textwrapdedentr=  	getsourcer[   script)rK   rR  r   rL   rI   r   outputscapture_outputrC  	profilingrD  
the_locals	python_fncustring_frontendsourceges                    r"   checkScriptRaisesRegexz"JitTestCase.checkScriptRaisesRegex  s    788 	  	 ''	599 # #fc** ' //	::E13JU
CCCCLL,,, %dII &I	6""# # # # # # # # # # # # # # # ''	599 	) 	)fc** C226i2PPB&-b$&7&7OO%_W->v-F-FGGF226i2PPB&-b&/&B&BO((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) fc**  ++Iu==    )))44BBKK                             ;	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s~   G+A$B
G+B	G+B	G+7B)E, G+,E0	0G+3E0	4.G+"%GG+G	G+G	G++G/2G/c                    |                                 }t          |          }|j                                        }t	          d|          D ]7}|j                            |            || }|                     ||           8d S Nr   )get_debug_staterC   r   num_bailoutsrangerequest_bailoutr   )	rK   modelr   r!  stateplanr`  rE  bailout_outputss	            r"   checkBailoutszJitTestCase.checkBailouts  s    %%''!%((y--//q,'' 	8 	8AI%%a(((#eVnO_h7777	8 	8r$   r   c                    t           j                            |          5  t                      5  t	          d |D                       }t          |t                    rxt           j                            ||          }|                     |          }i }t          |||           |
                    |           ||         }t          ||          }nkt          j        t          j        |                    }|                     |||j        ||||d           t           j                            |d          }|}|rt'          d |          }n|}|r|                                 5 } || }ddd           n# 1 swxY w Y   |                                 5   || }ddd           n# 1 swxY w Y   |                                 5   || }ddd           n# 1 swxY w Y   t*          s|                     |d	         d
           |                     |||	|
           n6 || }|s|r || } || }t0          r|                     |||            || }|                     |||	|
           |                     |||	|
           |cddd           cddd           S # 1 swxY w Y   	 ddd           dS # 1 swxY w Y   dS )z|
        Checks that a given script generates the same output as the Python
        version using the given inputs.
        c              3   X   K   | ]%}t          |t          j                  o|j        V  &d S r   )r'   r(   r)   requires_grad)r   r   s     r"   r   z*JitTestCase.checkScript.<locals>.<genexpr>  s6      (i(i]^Au|)D)D)X(i(i(i(i(i(ir$   rL  rK     )optimizeinputs_requires_gradrT  rU  rC  r   c                 N    |                                                                  S r   )detachrequires_grad_r*   s    r"   r,   z)JitTestCase.checkScript.<locals>.<lambda>  s    ahhjj>W>W>Y>Y r$   Nr   re   )subnameatolrtol)r(   r3   optimized_executionr   anyr'   rV   rN  rG  r#   r@  r8  rO  rP  r=  rQ  checkScriptr[   rR  r/   rp   r   r4  r   r   rg  )rK   rR  r   r   rl  rm  rT  rC  rU  rs  rt  extra_profile_runsrX  rD  rV  rW  scripted_fnrZ  recording_inputsscript_stdoutscript_outputsopt_script_outputspython_outputss                          r"   rw  zJitTestCase.checkScript  s    Y**844 ?	# ?	#:<< ># >#%((i(ibh(i(i(i%i%i"fc** ' 226i2PPB
 !//	::E13JU
CCCCLL,,, %dI")"d"3"3KK &_W->v-F-FGGF$$!)-A'5"+"# % % % % #()"2"26a"2"H"HK &I' .'34Y4Y[a'b'b$$'-$! 8,,.. H-)46F)GH H H H H H H H H H H H H H H,,.. L L-8[:J-K*L L L L L L L L L L L L L L L,,.. < <)2F);< < < < < < < < < < < < < < <% P++M!,<h+OOO$$^5GdY]$^^^^ &1[2B%CN+ L/A L-8[:J-K*)46F)G&$ T**;@RSSS%.Y%7N  dQU VVV  1C$UY ZZZ"}># ># ># ># ># ># >#?	# ?	# ?	# ?	# ?	# ?	# ?	# ?	#># ># ># ># ># ># ># ># >#?	# ?	# ?	# ?	# ?	# ?	# ?	# ?	# ?	# ?	# ?	# ?	# ?	# ?	# ?	# ?	# ?	# ?	#s   KD>J,-E?3J,?FJ,FJ,F0$J,0F44J,7F48J,G!J,!G%%J,(G%)B*J,K,J0	0K3J0	4KK	K	h㈵>c                    fd}||}fd}|}|rt          d |           |          }n|t          j                            ||||
d          }|	r|                     |          }|rt          |j                    || } || }|                     ||            | }|r+t          j        	                     ||          ||          } | }|r+t          j        	                     ||          ||          }|                     ||           |r|                     ||||            | } ||          }|r#t          j        	                    ||d|	          }|r0 ||          |z  }t          j        	                    |||          }|rt          d
 |           |          } | } ||          }|r#t          j        	                    ||d|	          }|r0 ||          |z  }t          j        	                    |||          }|                     ||           |rM|                     ||||           t          ||          D ]#\  }}||
|                     ||dd           $|S )Nc                 j    | d           } t          d t          |           D                       S )Nc              3   x   K   | ]5\  }}|t          j        |dz             |                                z  V  6d S )Nrk  )mathlogsum)r   rE  vs      r"   r   z9JitTestCase.checkTrace.<locals>.allSum.<locals>.<genexpr>  s?      \\TQamtxA0mmmm\\r$   )r  	enumerate)vsdrops    r"   allSumz&JitTestCase.checkTrace.<locals>.allSum  s?     $Z \\Yr]]\\\\\\r$   c                 F    fdt           d g                     S )Nc                      t           t          j                  r  |           nAt           t                    rt	           fd |           nt	          fd |           |S )Nc                 *     |         |           S r   r9   )r   keyr-   r.   input_reduces     r"   r,   zVJitTestCase.checkTrace.<locals>.flatten_inputs.<locals>.input_reduce.<locals>.<lambda>%  s    LLsR,M,M r$   c                      ||           S r   r9   )r   valr-   r  s     r"   r,   zVJitTestCase.checkTrace.<locals>.flatten_inputs.<locals>.input_reduce.<locals>.<lambda>'  s    LLb#,F,F r$   )r'   r(   r)   dictr   )r.   r-   r   r  s   `` r"   r  zDJitTestCase.checkTrace.<locals>.flatten_inputs.<locals>.input_reduce!  s    eU\22 TBucNNNNt,, TMMMMMMuVYZZZZFFFFFsSSS
r$   c                 ,    |                     |           S r   )rj   )r+   r   s     r"   r,   z@JitTestCase.checkTrace.<locals>.flatten_inputs.<locals>.<lambda>)  s    szzRS}} r$   )tuple)r   r  rz  s    @r"   flatten_inputsz.JitTestCase.checkTrace.<locals>.flatten_inputs   sA         &68T8TVXYYZZZr$   c                 N    |                                                                  S r   )clonerp  r*   s    r"   r,   z(JitTestCase.checkTrace.<locals>.<lambda>-  s    aggii6N6N6P6P r$   F)check_tolerance_force_outplacecheck_trace)allow_unusedrr  T)create_graphr  c                 $    t          | d          S )NT)rj  r   r*   s    r"   r,   z(JitTestCase.checkTrace.<locals>.<lambda>\  s    hqPT6U6U6U r$   g-C6J?)r/   r(   r3   r5  getExportImportCopyprintr   r   autogradgradr   )rK   r   reference_tensorsinput_tensorsr  r  verboseinputs_require_gradsr  export_importr  	grad_atol	grad_rtolr  r  nograd_inputsflattened_recording_inputsr[  rS  
outputs_gegradsgrads_gel1l2grads2l1_gel2_ge	grads2_geg2g2_gerz  s       `                         @r"   
checkTracezJitTestCase.checkTrace  s   	] 	] 	] 	] 	]  -M		[ 		[ 		[ 		[ 		[ * 	1+,P,PRcdd)78H)I)I&&0
 Y__T=/-<%  Q Q  	.))"--B 	"(OOO $&R'
*--- $() 	CN''w9S5A ( C CE R)*
 	F~**66*+=+=?Y8D + F FH*--- 	NUH99MMM $()VG__ 	CN'',FUY5A ( C CE 	d&--"$B^((-GVb(ccF 	J+,U,UWhii)78H)I)I&R)*
z"" 	a~**1S_ + a aH   	jVH%%-E++E3M\h+iiI*--- 	BUH99MMM 33 B B	E:%-  UD AAAA	r$   c                 H   t           j                            |          }t                      5   || }ddd           n# 1 swxY w Y   t                      5   || }ddd           n# 1 swxY w Y   |                     ||           |                     ||           |S )zq
        Check that a nn.Module's results in Script mode match eager and that it
        can be exported
        N)r(   r3   rR  r   r   assertExportImportModule)rK   	nn_modulerm   sm	eager_out
script_outs         r"   checkModulezJitTestCase.checkModules  s'   
 Yi(( 	) 	)!	4(I	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)  	# 	#TJ	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	J///%%b$///	s#   A  AAA++A/2A/)r9   )TN)F)
NNFFTr  TFNN)!r[   r\   r]   _do_cuda_memory_leak_checkr   r<   rp   rx   r}   r   r   r   r   r   r   r|   r{   r  r  r&  r.  r,  r;  rG  rI  r   	PROFILINGr\  rg  rw  r  r  __classcell__)r   s   @r"   r`   r`   e   sS       !%) ) ) ) ) ) ) )) ) ) ) ) ) ) )Q Q Q1 1 1        ( ( ( (<  ;M ;M ;M|* * *, , ,   4, , , ,(+ + + +85 5 59 9 9  $  Y Y Y %)$u)*m6M(  (  (  ( T8 8 8  !).#(+5N# N# N# N#` AE:?RVDHb b b bH      r$   r`   c                       e Zd Zd Zd ZdS )NoTracerWarnContextManagerc                     t           j                                        | _        t           j                            d           d S NF)r(   r1   _jit_get_tracer_state_warnprev_jit_set_tracer_state_warnrO   s    r"   rP   z$NoTracerWarnContextManager.__enter__  s3    H7799	++E22222r$   c                 N    t           j                            | j                   d S r   )r(   r1   r  r  rl   s     r"   rZ   z#NoTracerWarnContextManager.__exit__  s     ++DI66666r$   N)r[   r\   r]   rP   rZ   r9   r$   r"   r  r    s2        3 3 37 7 7 7 7r$   r  c              #     K   t           j                                        }t           j                            |            	 d V  t           j                            |           d S # t           j                            |           w xY wr   )r(   r1   _jit_get_inline_everything_mode_jit_set_inline_everything_mode)should_inlineolds     r"   inline_everything_moder    su      
(
2
2
4
4C	H,,];;;60055555005555   A& &!Bc              #     K   t           j                                        }t           j                            |            	 d V  t           j                            |           d S # t           j                            |           w xY wr   )r(   r1    _debug_get_fusion_group_inlining _debug_set_fusion_group_inlining)inliningr  s     r"   set_fusion_group_inliningr    su      
(
3
3
5
5C	H--h777711#6666611#6666r  Tc              #      K   t           j                            |             	 d V  t           j                            d           d S # t           j                            d           w xY wrR   )r(   r1   %_debug_set_autodiff_subgraph_inlining)enableds    r"   "disable_autodiff_subgraph_inliningr    sd      	H22w;???=66t<<<<<66t<<<<s   A	 	!A*c                 F     t          j                    fd            }|S )Nc                  h    t          d          5   | i | d d d            d S # 1 swxY w Y   d S rR   r  rm   r-  r-   s     r"   wrapperz#_inline_everything.<locals>.wrapper  s    #D)) 	  	 B	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	    	'++	functoolswrapsr-   r  s   ` r"   _inline_everythingr    8    _R          Nr$   c                 F     t          j                    fd            }|S )Nc                  h    t          d          5   | i | d d d            d S # 1 swxY w Y   d S r  r  r  s     r"   r  z5_tmp_donotuse_dont_inline_everything.<locals>.wrapper  s    #E** 	  	 B	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 r  r  r  s   ` r"   $_tmp_donotuse_dont_inline_everythingr    r  r$   c                        fd}|S )Nc                 4    t          j        j        | fi S r   )r(   r3   r5  )r   rm   r-  s    r"   r  z_trace.<locals>.wrapper  s    ytT44V444r$   r9   )rm   r-  r  s   `` r"   _tracer    s'    5 5 5 5 5 5Nr$   c                       fd}|S )Nc                  R   t           j                            d           t           j                            d           t           j                            d           	  | i | t           j                            d           t           j                            d           t           j                            d           d S # t           j                            d           t           j                            d           t           j                            d           w xY wNTF)r(   r1   $_jit_override_can_fuse_on_cpu_legacy_jit_override_can_fuse_on_cpu_jit_set_te_must_use_llvm_cpur  s     r"   r  z!enable_cpu_fuser.<locals>.wrapper  s    55d;;;..t444..u555	9BH99%@@@H225999H22488888 H99%@@@H225999H2248888s    C AD&r9   r  s   ` r"   enable_cpu_fuserr    s#    	9 	9 	9 	9 	9 Nr$   c                     | rt           S d }|S )Nc                       fd}|S )Nc                       | i |S r   r9   r  s     r"   r  z8enable_cpu_fuser_if.<locals>.noop_fuser.<locals>.wrapper  s    r4*6***r$   r9   r  s   ` r"   
noop_fuserz'enable_cpu_fuser_if.<locals>.noop_fuser  s!    + + + + +Nr$   )r  )condr  s     r"   enable_cpu_fuser_ifr    s'     	 	 	 r$   c                 ,    |                      d          S Nforward)_get_methodcs    r"   get_forwardr    s    ==###r$   c                 6    |                      d          j        S r  )r  r   r  s    r"   get_forward_graphr     s    ==##))r$   c                 \    | j                             |                              |          S r   )r   r8  r  )r   r   methods      r"   get_module_methodr    s$    4<<++F333r$   c                 X    fd| j         j                                        D             S )Nc                 D    g | ]\  }}|                               |S r9   r   )r   r   _prefixs      r"   r   z%attrs_with_prefix.<locals>.<listcomp>  s=     % % %$!Q||F##%A % % %r$   )_modulesr   r   )r   r  s    `r"   attrs_with_prefixr	    s>    % % % %&/,2244 % % % %r$   c                     d}g }t          |          D ]X}t          |          dk    r-t          j        j        | g|R  }|                    |           B|                     d           Y|S )N   r   T)retain_graph)ra  r?   r(   r  r  rj   backward)r   rm   profiling_countresultsr  rs         r"   warmup_backwardr    s}    OG?## * *t99q==#A----ANN1JJDJ))))Nr$   c                  f    | D ]-}t          t          j        |j                 |j        |           .d S r   )setattrrd   modulesr\   r[   )rm   args     r"   make_globalr    s?     @ @CN+S\3????@ @r$   c                    t          j                    5 }t          j                            |d          }t          |d          5 }|                    |            d d d            n# 1 swxY w Y   t          j        	                    ||          }t          j        
                    |          }|j        }t          |t                    sJ |                    |           t          ||          }|cd d d            S # 1 swxY w Y   d S )Nz	script.pyw)r  TemporaryDirectoryr	  pathr   r   write	importlibutilspec_from_file_locationmodule_from_specloaderr'   r   exec_moduler8  )	r   fn_nametmp_dirscript_pathr   specr   r   r-   s	            r"   _get_py3_coder&    sg   		$	&	& 
'gll7K88+s## 	qGGDMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	~55g{KK0066&&)))))6"""VW%%
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s6   1DA'D'A+	+D.A+	/BDD	Dc                       e Zd ZddZd ZdS )TensorExprTestOptionsreturnNc                 *   t           j                            d          | _        t           j                            d          | _        t           j                                        | _        t           j                                        | _	        t           j        
                    d           t           j                            d           t           j                                        | _        t           j                            d           t           j                                        | _        t           j                            d           t           j                                        | _        t           j                            d           d S r  )r(   r1   _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  rO   s    r"   rM   zTensorExprTestOptions.__init__  s   &+h&J&J4&P&P#"'("G"G"M"M#(8#@#@#B#B #(8#@#@#B#B ..t444..t444!&!B!B!D!D--d333#(8#L#L#N#N 11%888(-(N(N(P(P%..u55555r$   c                    t           j                            | j                   t           j                            | j                   t           j                            | j                   t           j                            | j	                   t           j        
                    | j                   t           j                            | j                   t           j                            | j                   d S r   )r(   r1   r+  r,  r-  r.  r6  r5  r3  r2  r  r0  r  r7  r  r9  rO   s    r"   restorezTensorExprTestOptions.restore  s    ,,T-HIII--d.EFFF--d.DEEE..t/GHHH..t/GHHH11$2JKKK..t/LMMMMMr$   )r)  N)r[   r\   r]   rM   r;  r9   r$   r"   r(  r(    s<        6 6 6 6N N N N Nr$   r(  c                 D   g }| D ]}t          |t          j                  r:|                    |                                                                           Vt          |          r |                    d |D                        |                    |           |S )Nc                 Z    g | ](}|                                                                 )S r9   )ro  r  )r   r+   s     r"   r   z clone_inputs.<locals>.<listcomp>%  s,    ;;;!188::++--;;;r$   )r'   r(   r)   rj   ro  r  r   )rm   r   r  s      r"   clone_inputsr>    s    <>F  c5<(( 	MM#**,,,,..////#C(( 	MM;;s;;;<<<<MM#Mr$   c           	         g }                     | |          }                                }                                }||d}j        dv }|r!dt	          t
          j        j                  i}ddgdddgdddgdd	d
gdddgdddgdddgdg}	|r|S |D ]}
|                                D ]}|t          |          rt          fd|	          }|D ]}|d         D ]z}t          |
j                  }t          |
j                  |k    r8t          |
j        |         t                    rt          ||                   ||<   t!          |          |
_        {|                    ||
f           Ȍ|S )N)functionr  )resize_
resize_as_r  div_floor_roundingr   )r   arg_idxdiv_no_rounding_modediv_trunc_rounding
index_fillrk  	full_likemulnew_fullr   c                 &    j         | d         k    S )Nr   )formatted_name)r   ops    r"   r,   z1get_traced_sample_variant_pairs.<locals>.<lambda>n  s    B,=6,J r$   rD  )sample_inputsget_op
get_methodr   r8  r(   r)   r>   	is_lambdar   r<   rm   r?   r'   r9  intr  rj   )devicedtyperM  rS  samplesr   r  variantshas_fake_functionops_with_unsupported_bool_argssamplevariantmatching_opsop_dataidxrm   s     `             r"   get_traced_sample_variant_pairsr^  +  s)   %'Gvu--G 99;;D]]__F F H #<< >gelBG<<= )s	
 	

 +s	
 	

 )s	
 	

 !s	
 	

  s	
 	

 s	
 	

 s	
 	
3&"@   . .(( 	. 	.G!! !"J"J"J"JLjkkL' . ."9- . .C,,D6;''#--*V[=Mt2T2T-$'S	NNS	"'++FKK	. NNGV,----	." Nr$   c                 b    d }t          | t          |                    o| j        |j        k    S )Nc                      dS r^  r9   r9   r$   r"   r,   zis_lambda.<locals>.<lambda>|  s    Q r$   )r'   rW   r[   )lambLAMBDAs     r"   rQ  rQ  {  s-    YFdDLL))Ndmv.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.utilr  r=  r  r	  r   rd   r  rO  importlib.abcr   typingr   r   cudais_availableRUN_CUDAdevice_countRUN_CUDA_MULTI_GPURUN_CUDA_HALFversionhipr1   _cuda_getCompiledVersionCUDA_VERSIONra  dget_device_capabilitymajorr#   r/   r:   rC   rE   r   r`   r  r  r  r  r  r  r  r  r  r  r   r  r	  r  r  r&  r(  r>  r^  rQ  r9   r$   r"   <module>r     s   $ # # # # # / / / / / / F F F F F F F F * * * * * *                           $ # # # # #                A @ @ @ @ @ F F F F F F & % % % % %             # # # # # #      				  				  



                      :""$$?%*"9"9";";a"? : "U]%6 "84466LU5:**,,-- " "
0033A6AII!M  I I I* * *
         2 '^ ^ ^ ^ ^# ^ ^ ^@7 7 7 7 7 7 7 7 6 6 6 7 7 7 = = = =          $ $ $* * *4 4 4% % %
 
 
@ @ @  N N N N N N N N4  M M M`O O O O Or$   