
    `i                        d Z ddlZddlZddlZddlZddlZddlZddlmZ ddl	m
Z
mZmZ ddlZddlmZ ddlmZmZ ddlmZ  ej        e          Zeedd	d
ej        deej                 deeee
f                  dede
f         fd                        Z ej        ed          Z ej        ed          ZdefdZ ej!        defd            Z"dS )a*  
This module provides TVM backend integration for TorchDynamo.

Apache TVM is a deep learning compiler framework that can optimize and execute
models on various hardware backends. This module enables:

- Compilation of PyTorch models to TVM's computation graphs
- Multiple scheduling options:
  - Default scheduler
  - Auto-scheduler for automatic optimization
  - Meta-schedule for evolutionary search-based tuning
- Hardware-specific optimizations:
  - CUDA GPU support
  - CPU support with LLVM targeting and architecture-specific tuning
  - Automatic detection of CPU capabilities (AVX2, AVX512)
- Tensor conversion utilities between PyTorch and TVM formats
- Configurable optimization levels and tuning trials

The backend can be used with torch.compile():
    model = torch.compile(model, backend="tvm")
    N)MappingProxyType)AnyCallableOptional)fx   )device_from_inputsfake_tensor_unsupported)register_backend)optionsgmexample_inputsr   return.c                4
   |t          d ddd          }|J 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           }| t0          j                            dd           }|                    dd          }|                    dd          }|dk    rddlm} t7          j                    }t0          j                            |          s|                    |	d         |
|          \  }}t          |          dk    r|                     ||          }t0          j                            |          s|dk    sJ |!                    ||"                    |          gd          }	 |#                    |           nB# tH          $ r5 t0          j                            |          rt1          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*} t7          j+                    5 }|j        d	k    rDj                            t-                       d|j,        -                    d                     }|dk    sJ |j.        /                    |	|||d|
d|          }|j.        0                    ||	||
|          }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tc          d"          |2                     |d          |                    d#j3        j4        d$t
          j5        fd%d&t
          j5        d$j3        j4        ffd'd(t
          j5        d$tl          t
          j5                 ffd)}|S )*Ni N     )	schedulertrials	opt_levelr   )relay)graph_executorc                 ,    g | ]\  }}d | |j         fS )inp_)shape).0idxis      n/home/jaya/work/projects/VOICE-AGENT/VIET/agent-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   auto_scheduler)r"   maini  )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.	nd_tensorr   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)r5   s    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   torch_tensorc                     | j         t          j        k    r>j                            |                                                                           S j                            |           S )z8A helper function to transfer a torch.tensor to NDArray.)r8   r9   r7   ndarraycpur;   r>   )rA   tvms    r   to_tvm_tensorztvm.<locals>.to_tvm_tensor   sW    ++ 6<< 0 0 2 2 8 8 : :;;;v!!,///r   i_argsc                  $   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 rK   rK   )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 rK   )
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)rH   args
shape_inforP   active_inputsr   arginp_namerT   r@   rG   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   )7r   rF   r   tvm.contribr   r9   jittracer	   rW   lenr[   r\   forwardfrontendfrom_pytorchtyper    indexr(   rE   Targetllvm_targetgetosenvironr"   tempfileNamedTemporaryFilepathexistsextract_tasksTaskSchedulerTuningOptionsRecordToFiletune	ExceptionunlinkApplyHistoryBest	transformPassContextbuildr*   TemporaryDirectoryr<   	cpu_countrelay_integration
tune_relaycompile_relayNotImplementedErrorGraphModulerC   rD   Tensorlist)r   r   r   r   r   jit_moddevice
shape_listexample_outputsr.   r)   devr(   r   r   r   r"   log_filetaskstask_weightstunertune_optionlibmsr/   r3   rf   rT   r@   rG   rF   s                              @@@@r   rF   rF   *   s    "UV#W#WXX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< 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36< EEL E E E E0EL 0SV\ 0 0 0 0 0 0V%, V4+= V V V V V V V V, Osg   J ?K4ML8,M8L<	<M?L<	 MMM;BP  P$'P$Q44Q8;Q8r*   )r   r"   c                  R    	 t          j        d           dS # t          $ r Y dS w xY w)NrF   TF)	importlibimport_moduleImportErrorrK   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   rq   rq      sO    
|w'',,..w..w))6r   )#__doc__	functoolsr   loggingrs   r   ru   typesr   typingr   r   r   r9   r   commonr	   r
   registryr   	getLogger__name__r[   r   r   r   strrF   partialtvm_meta_scheduletvm_auto_schedulerr7   r   cacherq   rK   r   r   <module>r      s   ,          				 



  " " " " " " * * * * * * * * * *        ? ? ? ? ? ? ? ? & & & & & & g!! 
 59	Q Q Q
Q&Q &sCx01	Q
 c3hQ Q Q  Qh &I%c_EEE &Y&s6FGGG      S      r   