o
    0h                     @   s  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	j23 Z4e4oe	j25 dkZ6e4Z7e	j23 re	j8j9se	j:; Z<e=e	j25 D ]Z>e	j2?e>d  Z@e@dk rdZ7qdd ZAdd ZBdd ZCdd ZDG dd dZEdZFG dd deZGG d d! d!ZHed"d# ZIed$d% ZJedId'd(ZKd)d* ZLd+d, ZMd-d. ZNd/d0 ZOd1d2 ZPd3d4 ZQd5d6 ZRd7d8 ZSd9d: ZTd;d< ZUd=d> ZVd?d@ ZWG dAdB dBZXdCdD ZYdEdF ZZdGdH Z[dS )J    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                 C   s   t | || d S N)exec)codeglobloc r    U/var/www/vscode/kcb/lib/python3.10/site-packages/torch/testing/_internal/jit_utils.pyexecWrapper7   s   r"   c                 C   s   t dd | |S )Nc                 S   s   t | tjS r   )
isinstancetorchTensortr    r    r!   <lambda>;       zdo_input_map.<locals>.<lambda>r   fninputr    r    r!   do_input_map:      r-   c                   C   s,   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_stater    r    r    r!   clear_class_registry=   s   
r7   c                 C   s4   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_stater9   	num_plansr    r    r!   get_execution_planB   s   r?   c                   @   s(   e Zd ZdZdd Zdd Zd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                 C   s   || _ || _|| _|| _d S r   )	test_caseexception_typeregex	highlight)selfrA   	exceptionrC   rD   r    r    r!   __init__P   s   
z/_AssertRaisesRegexWithHighlightContext.__init__c                 C   s   | S r   r    rE   r    r    r!   	__enter__V   s   z0_AssertRaisesRegexWithHighlightContext.__enter__c                 C   s\   | j | j| j |r|W d    n1 sw   Y  | jr,t | jt| dS NT)	rA   assertRaisesRegexrB   rC   rD   r	   check_source_highlightedrunstr)rE   typevalue	tracebackr    r    r!   __exit__Y   s   z/_AssertRaisesRegexWithHighlightContext.__exit__N)__name__
__module____qualname____doc__rG   rI   rR   r    r    r    r!   r@   J   s
    r@   zprim::TensorExprGroupc                       s$  e Zd ZdZdZG dd deZG dd deZdd Zd	d
 Z	 fddZ
 fddZd8ddZdd Zdd Zdd Zdd Zd9ddZd:ddZd:dd Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zdddd+ejfd,d-Zd.d/ Zd0dddd+ejddfd1d2Z				d;d4d5Zd6d7 Z  Z S )<JitTestCaseTFc                   @       e Zd ZdZdd Zdd ZdS )zJitTestCase.capture_stdoutz>
        Replace sys.stdout with a temporary StringIO
        c                 C      t j| _t | _| jt _| S r   )sysstdout
sys_stdoutr   stringiorH   r    r    r!   rI   m      z$JitTestCase.capture_stdout.__enter__c                 G   $   |  t| j  | `| jt_d S r   )appendrN   r]   getvaluer\   rZ   r[   rE   argsr    r    r!   rR   s      z#JitTestCase.capture_stdout.__exit__NrS   rT   rU   rV   rI   rR   r    r    r    r!   capture_stdouti       rf   c                   @   rX   )zJitTestCase.capture_stderrz>
        Replace sys.stderr with a temporary StringIO
        c                 C   rY   r   )rZ   stderr
sys_stderrr   r]   rH   r    r    r!   rI   |   r^   z$JitTestCase.capture_stderr.__enter__c                 G   r_   r   )r`   rN   r]   ra   ri   rZ   rh   rb   r    r    r!   rR      rd   z#JitTestCase.capture_stderr.__exit__Nre   r    r    r    r!   capture_stderrx   rg   rj   c                 C   s   t j| j| j d S r   )r$   r/   _jit_set_emit_hooksemitModuleHookemitFunctionHookrH   r    r    r!   setHooks      zJitTestCase.setHooksc                 C   s   t jd d  d S r   )r$   r/   rk   rH   r    r    r!   
clearHooks   r.   zJitTestCase.clearHooksc                    s.   t    tjstjj  dt_|   d S rJ   )	supersetUprW   _restored_warningsr$   r1   TracerWarningignore_lib_warningsrn   rH   	__class__r    r!   rr      s
   
zJitTestCase.setUpc                    s   t    |   t  d S r   )rq   tearDownrp   r7   rH   rv   r    r!   rx      s   

zJitTestCase.tearDownr    c                    s   fdddt dddddht|B  tt}|t | | t|d	kd
|  tt| \}}| t|d	kd
|  | t	 fdd|
 D d
|  d S )Nc                    s   |   D ]b}| |kr||  | q| dkr$ |d|| q| dkrY|    dksN|    dksN|    dkrY |  || q| D ]} ||| q]qd S )Nzprim::DifferentiableGraphSubgraphprim::Ifz	aten::allprim::TypeCheckprim::RequiresGradCheck)nodeskindr`   ginputs__next__nodeblocks)blockr~   accr   inner_block)!get_nodes_and_parents_recursivelyr    r!   r      s   $zEJitTestCase.assertAllFused.<locals>.get_nodes_and_parents_recursivelyzprim::Constantzprim::BailoutTemplatezprim::TupleConstructrz   r{   r|   r   zgot c                 3   s    | ]	}|   v V  qd S r   )r~   ).0r   )allowed_nodesr    r!   	<genexpr>   s    z-JitTestCase.assertAllFused.<locals>.<genexpr>)FUSION_GROUPsetr   r8   
assertTruer;   nextiteritemsallr}   )rE   graph
except_forfusion_groupsfusion_nodesr    )r   r   r!   assertAllFused   s   zJitTestCase.assertAllFusedc                 C   s(   t |}d}|D ]	}||v r dS qdS )N)z Could not export Python functionzclosures are not exportableTF)rN   )rE   eseallowedar    r    r!   _isHookExceptionOk   s   zJitTestCase._isHookExceptionOkc                    s   fdd}t j  z?t|jdkrW W d    d S t|t jjr5t| dkr5W W d    d S t	
 }t j|| | }||\}}W n tyj } z |sY W Y d }~W d    d S d }~ww t	
|}t j|}	t	
 }
t j|	|
 |
d ||
\}}t||D ]
\}} || qt|t jjr t j||	j W d    d S W d    d S 1 sw   Y  d S )Nc                    s   t |  tt  t   ttdd   }tdd |} fdd|D }dd |D }tdd |} fdd|D }d	d |D }||fS )
Nc                 S   
   |  dS )Nzarchive/code/
startswithxr    r    r!   r(         
 zKJitTestCase._compared_saved_loaded.<locals>.extract_files.<locals>.<lambda>c                 S   r   )Nz.pyendswithr   r    r    r!   r(      r   c                 3       | ]}  |V  qd S r   openr   farchiver    r!   r          zLJitTestCase._compared_saved_loaded.<locals>.extract_files.<locals>.<genexpr>c                 s   s$    | ]}d  dd |D V  qdS ) c                 S   s   g | ]}|  qS r    )decode)r   liner    r    r!   
<listcomp>   s    zWJitTestCase._compared_saved_loaded.<locals>.extract_files.<locals>.<genexpr>.<listcomp>N)join)r   filer    r    r!   r      s   " c                 S   r   )Nz
.debug_pklr   )r   r    r    r!   r(      r   c                 3   r   r   r   r   r   r    r!   r      r   c                 s   s    | ]}t |V  qd S r   )pickleloadr   r    r    r!   r      r   )zipfileZipFileassertEqualr;   r   namelistr8   filter)bufferfilescode_files_strcode_files_stream
code_filesdebug_files_strdebug_files_streamdebug_filesrH   r   r!   extract_files   s   
 z9JitTestCase._compared_saved_loaded.<locals>.extract_filesr   )r$   _jit_internal_disable_emit_hooksr;   r   r#   r/   ScriptModule_method_namesioBytesIOr1   savera   r<   r   r   seekzipassertMultiLineEqualr   _ivalue_tags_match_c)rE   mr   r   buffer_copyr   _debug_filesr   buffer2importedsaved_module_buffer_2code_files_2_debug_files_2r   br    rH   r!   _compared_saved_loaded   sD   




'"z"JitTestCase._compared_saved_loadedc                 C   s&   |j dks
d|j v rd S | | d S )Nz<lambda>zaten::)namer   )rE   funcr    r    r!   rm     s   zJitTestCase.emitFunctionHookc                 C   s   |  | d S r   )r   )rE   moduler    r    r!   rl   	     zJitTestCase.emitModuleHookNc              	   C   s   t  }|dd  tj|| |dd  |d tjj||d}|dd  |s1|S tj	dd}z|
  ||j tjj|j|d}W t|j nt|j w |d	d  |S )
Nc                 S      | j dr
|  S d S )N_pack)r   _has_methodr   sr    r    r!   r(         z<JitTestCase.getExportImportCopyWithPacking.<locals>.<lambda>c                 S   r   N_unpackr   r   r   r   r    r    r!   r(     r   r   )map_locationc                 S   r   r   r   r   r    r    r!   r(     r   F)deletec                 S   r   r   r   r   r    r    r!   r(   $  r   )r   r   applyr$   r1   r   r   r   tempfileNamedTemporaryFilecloser   osunlink)rE   r   also_test_filer   r   r   r   resultr    r    r!   getExportImportCopyWithPacking  s"   
z*JitTestCase.getExportImportCopyWithPackingc                    sd   |rt |}| |d   }| |dk d S  fdd|}| t|dk d S )Nwith r   c                    F   g }|   D ]}|  kr|| | D ]} || 7 }qq|S r   r}   r~   r`   r   r   outr   r~   r}   r    r!   r}   /     
z.JitTestCase.assertGraphContains.<locals>.nodes)rN   countr   r;   )rE   r   r~   consider_subgraphsstrgraphr   	out_nodesr    r   r!   assertGraphContains'  s   	zJitTestCase.assertGraphContainsc           	         sp   dd }|r!t |}| |d   }|| ||| d S  fdd|}|| t||| d S )Nc              
   S   s<   ||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   subgraphr    r    r!   perform_assert<  s   z>JitTestCase.assertGraphContainsExactly.<locals>.perform_assertr   c                    r   r   r   r   r   r    r!   r}   J  r   z5JitTestCase.assertGraphContainsExactly.<locals>.nodes)rN   r   r;   )	rE   r   r~   num_kind_nodesr   r  r   r   r   r    r   r!   assertGraphContainsExactly;  s   
	z&JitTestCase.assertGraphContainsExactlyc                 O   s.   t jj|tjd}| j|g|R i | d S )N)operator_export_type)r$   onnx_optimize_tracer   ONNXassertExpectedGraph)rE   r   rc   kwargsr    r    r!   assertExpectedONNXGraphW  s   z#JitTestCase.assertExpectedONNXGraphc                 O   sx   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$   r/   Graphr   _jit_pass_lint_jit_pass_dce_jit_pass_canonicalizeassertExpectedrN   )rE   tracerc   r  r   r    r    r!   r
  [  s    zJitTestCase.assertExpectedGraphc                 C   sx   t |tjjr|}d}nd}| }tj| ttjd| |}|d ur-t |ts-|}tj| |r:|| |S )NFT
_jit_pass_)	r#   r$   r/   r  r   r  getattrbool	set_graph)rE   r   r  r   r  r   r    r    r!   run_passh  s   
zJitTestCase.run_passc                 C   sj   t  }|s
tdd}||d k r%|j}|std|d7 }||d k si }||j ||j |S )Nzfailed to inspect framer   r   zfailed to get frame)inspectcurrentframer<   f_backupdatef_locals	f_globals)rE   	frames_upframeidefined_varsr    r    r!   get_frame_varsz  s   zJitTestCase.get_frame_varsc                 C   s   t | |||S r   )r@   )rE   rF   rC   rD   r    r    r!   assertRaisesRegexWithHighlight  r   z*JitTestCase.assertRaisesRegexWithHighlightr   c
              	   C   s  t   | ||+ t|tr(| |}
i }t||
|d |
| |
| }n|}||  W d   n1 s8w   Y  | ||5 t|trWtjj	||d}t
||}ntt|}tjj	||d}t
||j}||  W d   n1 s{w   Y  t|ts| || tj|}||  W d   n1 sw   Y  W d   dS W d   dS W d   dS 1 sw   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   rK   r#   rN   r"  r"   r  r$   r1   CompilationUnitr  textwrapdedentr  	getsourcerS   script)rE   r+  r   rF   rC   r   outputscapture_outputr  	profilingr  
the_locals	python_fncustring_frontendsourceger    r    r!   checkScriptRaisesRegex  s<   	








"z"JitTestCase.checkScriptRaisesRegexc           	      C   sN   |  }t|}|j }td|D ]}|j| || }| || qd S Nr   )get_debug_stater?   r   num_bailoutsrangerequest_bailoutr   )	rE   modelr   r  stateplanr8  r   bailout_outputsr    r    r!   checkBailouts  s   
zJitTestCase.checkBailoutsr   c                 C   sJ  t j| t  tdd |D }t|tr?t jj||d}| |}i }t	|||d |
| || }t||}n tt|}| j|||j||||dd t jj|dd}|}|ritdd	 |}n|}|r|  }|| }W d
   n1 sw   Y  |   || }W d
   n1 sw   Y  |   || }W d
   n1 sw   Y  ts| j|d dd | j|||	|
d n|| }|s|r|| }|| }tr| ||| || }| j|||	|
d | j|||	|
d |W  d
   W  d
   S 1 sw   Y  W d
   d
S 1 sw   Y  d
S )z|
        Checks that a given script generates the same output as the Python
        version using the given inputs.
        c                 s   s"    | ]}t |tjo|jV  qd S r   )r#   r$   r%   requires_grad)r   r   r    r    r!   r     s     z*JitTestCase.checkScript.<locals>.<genexpr>r%  r$     )optimizeinputs_requires_gradr-  r.  r  r   c                 S      |    S r   )detachrequires_grad_r&   r    r    r!   r(     r)   z)JitTestCase.checkScript.<locals>.<lambda>Nr   r[   )subnameatolrtol)r$   r1   optimized_executionr   anyr#   rN   r'  r"  r"   r  r  r(  r)  r  r*  checkScriptrS   r+  r-   rf   r
   r  r   r   r?  )rE   r+  r   r   rB  rC  r-  r  r.  rI  rJ  extra_profile_runsr1  r  r/  r0  scripted_fnr3  recording_inputsscript_stdoutscript_outputsopt_script_outputspython_outputsr    r    r!   rM    sl   








$zJitTestCase.checkScripth㈵>c                    s
   fdd}|d u r|}fdd}|}|r"t dd ||}n|tjj||||
dd}|	r6| |}|r=t|j || }|| }| || | }|r\tjj	||||d	}| }|rmtjj	||||d	}| || |r~| j||||d
 | }||}|rtjj	||d|d}|r||| }tjj	|||d	}|rt dd ||}| }||}|rtjj	||d|d}|r||| }tjj	|||d	}| || |r| j||||d
 t
||D ]\}}|d u r|d u rq| j||ddd
 q|S )Nc                    s,    d ur| d    } t dd t| D S )Nc                 s   s2    | ]\}}|d urt |d |  V  qd S )NrA  )mathlogsum)r   r   vr    r    r!   r     s   0 z9JitTestCase.checkTrace.<locals>.allSum.<locals>.<genexpr>)rX  	enumerate)vs)dropr    r!   allSum  s   z&JitTestCase.checkTrace.<locals>.allSumc                    s     fdd t  dd g S )Nc                    sZ   t tjr | |S t tr t fdd| |S t fdd| |S )Nc                    s   |  | S r   r    )r   key)r+   r,   input_reducer    r!   r(   %  s    zVJitTestCase.checkTrace.<locals>.flatten_inputs.<locals>.input_reduce.<locals>.<lambda>c                    s   | | S r   r    )r   val)r+   r_  r    r!   r(   '  r)   )r#   r$   r%   dictr   )r,   r+   r   r_  r*   r!   r_  !  s   

zDJitTestCase.checkTrace.<locals>.flatten_inputs.<locals>.input_reducec                 S   s
   | | S r   )r`   )r'   r   r    r    r!   r(   )  r   z@JitTestCase.checkTrace.<locals>.flatten_inputs.<locals>.<lambda>)tuple)r   )rP  rb  r!   flatten_inputs   s   z.JitTestCase.checkTrace.<locals>.flatten_inputsc                 S   rD  r   )clonerF  r&   r    r    r!   r(   -  r)   z(JitTestCase.checkTrace.<locals>.<lambda>F)check_tolerance_force_outplacecheck_trace)allow_unusedrH  T)create_graphri  c                 S   s   t | ddS )NT)r@  r   r&   r    r    r!   r(   \  r)   g-C6J?)r-   r$   r1   r  getExportImportCopyprintr   r   autogradgradr   )rE   r   reference_tensorsinput_tensorsr\  ri  verboseinputs_require_gradsrf  export_importrg  	grad_atol	grad_rtolr]  rd  nograd_inputsflattened_recording_inputsr4  r,  
outputs_gegradsgrads_gel1l2grads2l1_gel2_ge	grads2_geg2g2_ger    )r\  rP  r!   
checkTrace  sz   


zJitTestCase.checkTracec                 C   s   t j|}t  || }W d   n1 sw   Y  t  || }W d   n1 s/w   Y  | || | || |S )zq
        Check that a nn.Module's results in Script mode match eager and that it
        can be exported
        N)r$   r1   r+  r   r   assertExportImportModule)rE   	nn_modulerc   sm	eager_out
script_outr    r    r!   checkModules  s   

zJitTestCase.checkModule)r    )TN)F)
NNFFTrU  TFNN)!rS   rT   rU   _do_cuda_memory_leak_checkrs   r8   rf   rj   rn   rp   rr   rx   r   r   r   rm   rl   r   r   r  r  r
  r  r"  r#  r   	PROFILINGr5  r?  rM  r  r  __classcell__r    r    rv   r!   rW   e   sR    

	>



*
P
drW   c                   @   s   e Zd Zdd Zdd ZdS )NoTracerWarnContextManagerc                 C   s   t j | _t jd d S NF)r$   r/   _jit_get_tracer_state_warnprev_jit_set_tracer_state_warnrH   r    r    r!   rI     s   z$NoTracerWarnContextManager.__enter__c                 G   s   t j| j d S r   )r$   r/   r  r  rb   r    r    r!   rR     r.   z#NoTracerWarnContextManager.__exit__N)rS   rT   rU   rI   rR   r    r    r    r!   r    s    r  c              	   c   @    t j }t j|  zd V  W t j| d S t j| w r   )r$   r/   _jit_get_inline_everything_mode_jit_set_inline_everything_mode)should_inlineoldr    r    r!   inline_everything_mode     
r  c              	   c   r  r   )r$   r/    _debug_get_fusion_group_inlining _debug_set_fusion_group_inlining)inliningr  r    r    r!   set_fusion_group_inlining  r  r  Tc              	   c   s8    t j|   zd V  W t jd d S t jd w rJ   )r$   r/   %_debug_set_autodiff_subgraph_inlining)enabledr    r    r!   "disable_autodiff_subgraph_inlining  s
   r  c                       t   fdd}|S )Nc                     <   t d  | i | W d    d S 1 sw   Y  d S rJ   r  rc   r  r+   r    r!   wrapper     
"z#_inline_everything.<locals>.wrapper	functoolswrapsr+   r  r    r  r!   _inline_everything     r  c                    r  )Nc                     r  r  r  r  r  r    r!   r    r  z5_tmp_donotuse_dont_inline_everything.<locals>.wrapperr  r  r    r  r!   $_tmp_donotuse_dont_inline_everything  r  r  c                     s    fdd}|S )Nc                    s   t jj|  fi S r   )r$   r1   r  )r   r  r    r!   r    ro   z_trace.<locals>.wrapperr    )rc   r  r  r    r  r!   _trace  s   r  c                        fdd}|S )Nc               	      s   t jd t jd t jd z | i | W t jd t jd t jd d S t jd t jd t jd w NTF)r$   r/   $_jit_override_can_fuse_on_cpu_legacy_jit_override_can_fuse_on_cpu_jit_set_te_must_use_llvm_cpur  r  r    r!   r    s   z!enable_cpu_fuser.<locals>.wrapperr    r  r    r  r!   enable_cpu_fuser  s   
r  c                 C   s   | rt S dd }|S )Nc                    r  )Nc                     s    | i |S r   r    r  r  r    r!   r    r   z8enable_cpu_fuser_if.<locals>.noop_fuser.<locals>.wrapperr    r  r    r  r!   
noop_fuser  s   z'enable_cpu_fuser_if.<locals>.noop_fuser)r  )condr  r    r    r!   enable_cpu_fuser_if  s   r  c                 C   r   Nforward)_get_methodcr    r    r!   get_forward  s   
r  c                 C   s   |  djS r  )r  r   r  r    r    r!   get_forward_graph  s   r  c                 C   s   | j ||S r   )r   r  r  )r   r   methodr    r    r!   get_module_method  r.   r  c                    s    fdd| j j D S )Nc                    s   g | ]\}}|  r|qS r    r   )r   r   _prefixr    r!   r     s    
z%attrs_with_prefix.<locals>.<listcomp>)_modulesr   r   )r   r  r    r  r!   attrs_with_prefix  s   r  c                 G   sR   d}g }t |D ]}t|dkr tjj| g|R  }|| q| jdd q|S )N   r   T)retain_graph)r9  r;   r$   rm  rn  r`   backward)r   rc   profiling_countresultsr  rr    r    r!   warmup_backward  s   r  c                  G   s$   | D ]}t tj|j |j| qd S r   )setattrrZ   modulesrT   rS   )rc   argr    r    r!   make_global  s   r  c           	   	   C   s   t  L}tj|d}t|d}||  W d    n1 s!w   Y  tj	||}tj
|}|j}t|ts=J || t||}|W  d    S 1 sSw   Y  d S )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   r  r+   r    r    r!   _get_py3_code  s   


$r  c                   @   s   e Zd ZdddZdd ZdS )TensorExprTestOptionsreturnNc                 C   s   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$   r/   _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  rH   r    r    r!   rG     s   zTensorExprTestOptions.__init__c                 C   sf   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$   r/   r  r  r  r  r  r  r  r  r  r  r  r  r  r  rH   r    r    r!   restore  s   zTensorExprTestOptions.restore)r  N)rS   rT   rU   rG   r  r    r    r    r!   r    s    
r  c                 C   sZ   g }| D ]&}t |tjr||   qt|r%|dd |D  q|| q|S )Nc                 S   s   g | ]}|   qS r    )rE  re  )r   r'   r    r    r!   r   %  r   z clone_inputs.<locals>.<listcomp>)r#   r$   r%   r`   rE  re  r   )rc   r   r  r    r    r!   clone_inputs  s   r  c              	      sF  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}	|rN|S |D ]P}
| D ]I}|d u r]qVt|rbqVt	 fdd|	}|D ]*}|d D ]#}t
|
j}t|
j|krt|
j| trt|| ||< t||
_qsqm|||
f qVqP|S )N)functionr  )resize_
resize_as_r  div_floor_roundingr   )r   arg_idxdiv_no_rounding_modediv_trunc_rounding
index_fillrA  	full_likemulnew_fullr   c                    s    j | d kS )Nr   )formatted_namer   opr    r!   r(   n  s    z1get_traced_sample_variant_pairs.<locals>.<lambda>r  )sample_inputsget_op
get_methodr   r  r$   r%   r:   	is_lambdar   r8   rc   r;   r#   r  intrc  r`   )devicedtyper   r,  samplesr   r  variantshas_fake_functionops_with_unsupported_bool_argssamplevariantmatching_opsop_dataidxrc   r    r  r!   get_traced_sample_variant_pairs+  sd   
 
r  c                 C   s"   dd }t | t|o| j|jkS )Nc                   S   s   dS r6  r    r    r    r    r!   r(   |  s    zis_lambda.<locals>.<lambda>)r#   rO   rS   )lambLAMBDAr    r    r!   r  {  s   r  )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  rV  r   r   rZ   r   r(  importlib.abcr   typingr   r   cudais_availableRUN_CUDAdevice_countRUN_CUDA_MULTI_GPURUN_CUDA_HALFversionhipr/   _cuda_getCompiledVersionCUDA_VERSIONr9  dget_device_capabilitymajorr"   r-   r7   r?   r@   r   rW   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r    r    r    r!   <module>   s    

    $

		
P