
    קg%                     j   d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dlm	Z	 d dl
Z
ddlmZmZ ddlmZ  ej        e          Zee edddd	          d
de	e         fd                        Z e j        ed          Z e j        ed          Zd Z e j        d          d             ZdS )    N)MappingProxyType)Optional   )device_from_inputsfake_tensor_unsupported)register_backend N     )	schedulertrials	opt_level)optionsr   c                	   dd l ddl m} ddlm} t          j                            | |          }t          |          }d t          |          D             } | | }t          |          dk    r!t                              d           | j        S |j                            ||          \  }	}
|j        dk    r4                    |j                  }j                                        }n;                    d          }j                            t+                                }|                    dd           }| t.          j                            dd           }|                    d	d
          }|                    dd          }|dk    rddl m} t5          j                    }t.          j                            |          s|                    |	d         |
|          \  }}|D ]}t?          |j                    t?          d           t          |          dk    r|!                    ||          }t.          j                            |          s|dk    sJ |"                    ||#                    |          gd          }	 |$                    |           nB# tJ          $ r5 t.          j                            |          rt/          j&        |            w xY w|'                    |          5  j(        )                    |ddi          5  |*                    |	||
          }d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   n3|dk    rddl m+} t5          j,                    5 }|j        dk    rDj                            t+                       d|j-        .                    d                     }|dk    sJ |j/        0                    |	|||d|
d|          }|j/        1                    ||	||
|          }d d d            n# 1 swxY w Y   nc|d k    s|sLj(        )                    |!          5  |*                    |	||
          }d d d            n# 1 swxY w Y   nte          d"          |3                     |d          |                    d# fd$fd%}|S )&Nr   )relay)graph_executorc                 ,    g | ]\  }}d | |j         fS )inp_)shape).0idxis      V/var/www/html/ai-engine/env/lib/python3.11/site-packages/torch/_dynamo/backends/tvm.py
<listcomp>ztvm.<locals>.<listcomp>%   s)    RRRfc1<#<<)RRR    z0Explicitly fall back to eager due to zero outputcudar   TVM_SCHEDULERr   r	   r   r
   auto_scheduler)r   mainzNo tasksi  )num_measure_trialsmeasure_callbacksearly_stoppingz relay.backend.use_auto_schedulerT)r   config)targetparamsmeta_schedule)r%   z --num-cores F)logical@   evolutionary)modr#   work_dirmax_trials_globalnum_trials_per_iterr$   strategyr   )databaser)   r#   r$   r   default)r   zThis tuning option is invalid/not implemented for torchdynamo's TVM-related backend. There are three available options: default, auto_scheduler and meta_schedule.c                     | j         dk    r&t          j        |                                           S t          j        j                            |                                           S )z8A helper function to transfer a NDArray to torch.tensor.bool)dtypetorch
from_numpynumpyutilsdlpackfrom_dlpack	to_dlpack)	nd_tensors    r   to_torch_tensorztvm.<locals>.to_torch_tensor   sQ    ?f$$ #IOO$5$5666{!--i.A.A.C.CDDDr   c                     | j         t          j        k    r>j                            |                                                                           S j                            |           S )z8A helper function to transfer a torch.tensor to NDArray.)r2   r3   r1   ndarraycpur5   r8   )torch_tensortvms    r   to_tvm_tensorztvm.<locals>.to_tvm_tensor   sW    ++ 6<< 0 0 2 2 8 8 : :;;;v!!,///r   c                  $   d | D             }                                 \  }}d |                                D             }t          |d          D ]|\  }}|                                dk    r_|j        r|                                }d| }||vrt                              d|           ]                    | 
|                     }	                                 	fdt                                                    D             S )Nc                 6    g | ]}|                                 S  )
contiguous)r   as     r   r   z)tvm.<locals>.exec_tvm.<locals>.<listcomp>   s     ///1///r   c                     h | ]\  }}|S rE   rE   )r   name_s      r   	<setcomp>z(tvm.<locals>.exec_tvm.<locals>.<setcomp>   s    @@@'$@@@r   r   r   z6input %s skipped as not found in tvm's runtime libraryc                 L    g | ] }                      |                    !S rE   )
get_output)r   r   mr;   s     r   r   z)tvm.<locals>.exec_tvm.<locals>.<listcomp>   s-    UUUQQ00UUUr   )get_input_infoitems	enumeratedimrequires_graddetachlogwarning	set_inputrunrangeget_num_outputs)i_argsargs
shape_inforJ   active_inputsr   arginp_namerN   r;   rB   s           r   exec_tvmztvm.<locals>.exec_tvm   s.   /////((**
A@@Z-=-=-?-?@@@!$** 	 	HCwwyyA~~$ '**,,C'#<<=00KKP    !M#&&   	
UUUUU%@Q@Q@S@S:T:TUUUUr   )4rA   r   tvm.contribr   r3   jittracer   rQ   lenrU   rV   forwardfrontendfrom_pytorchtyper   indexr#   r?   Targetllvm_targetgetosenvironr   tempfileNamedTemporaryFilepathexistsextract_tasksprintcompute_dagTaskSchedulerTuningOptionsRecordToFiletune	ExceptionunlinkApplyHistoryBest	transformPassContextbuildr%   TemporaryDirectoryr6   	cpu_countrelay_integration
tune_relaycompile_relayNotImplementedErrorGraphModule) gmexample_inputsr   r   r   jit_moddevice
shape_listexample_outputsr)   r$   devr#   r   r   r   r   log_filetaskstask_weightstasktunertune_optionlibmsr*   r.   ra   rN   r;   rB   rA   s                                @@@@r   rA   rA      s    JJJ******ioob.11G//FRR	.8Q8QRRRJb.)O
?q  FGGGz.--gzBBKC{fhhv|$$""ggajj"";==11K..IJNN?D99	[[5))FK++I$$$&&&&&&.00w~~h'' 	"0">">FVV# #E<  " "d&''''j!!!5zzQ&44ULIIw~~h// !A::::"0">">+1+9+F+Fx+P+P*Q'+ #? # #K


;////$   7>>(33 0Ih///
 ,,X66 	E 	E**#-OQU,V +   E E kk#fVkDDE E E E E E E E E E E E E E E	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E
 
o	%	%++++++(** 	h{f$$ **"}}VV283E3Ee3E3T3TVV 
 A::::+66!"($&'# 7 	 	H &44!# 5  C)	 	 	 	 	 	 	 	 	 	 	 	 	 	 	6 
i		y	]&&&;; 	A 	A++c&+@@C	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A "\
 
 	
 	"">3y>##6#677AE E E0 0 0 0 0V V V V V V V, Osg   J- -?K,M#M<MM	MM	MM#&M#BP00P47P4RRRr%   )r   r   c                  R    	 t          j        d           dS # t          $ r Y dS w xY w)NrA   TF)	importlibimport_moduleImportErrorrE   r   r   has_tvmr      s?    &&&t   uus    
&&c                      t           j        dk    r-t          d                                          } d| v rdS d| v rdS dS )Nlinuxz/proc/cpuinfoavx512zllvm -mcpu=skylake-avx512avx2zllvm -mcpu=core-avx2llvm)sysplatformopenread)cpuinfos    r   rl   rl      sO    
|w'',,..w..w))6r   )	functoolsr   loggingrn   r   rp   typesr   typingr   r3   commonr   r   registryr   	getLogger__name__rU   rA   partialtvm_meta_scheduletvm_auto_schedulerr   	lru_cacherl   rE   r   r   <module>r      s            				 



  " " " " " "        ? ? ? ? ? ? ? ? & & & & & & g!! 
 +;*:e!<<+ +	T T T &'	T T T  Tn &I%c_EEE &Y&s6FGGG    T    r   