§
    ŠŠtj‚  ã                   ó¸  — 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
 ddlmZ ddl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f         dz  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)ÚCallable)ÚPath)ÚMappingProxyType)ÚAny)Úfxé   )Údevice_from_inputsÚfake_tensor_unsupported)Úregister_backend)ÚoptionsÚgmÚexample_inputsr   Úreturn.c                ó¼  ‡‡‡‡— |€t          d dddœ¦  «        }|€t          d¦  «        ‚	 dd lŠddlm} ddlm} n"# t          $ r}t          d¦  «        |‚d }~ww xY wt          j         	                    | |¦  «        }t          |¦  «        }d	„ t          |¦  «        D ¦   «         } | |Ž }	t          |	¦  «        dk    r!t                               d
¦  «         | j        S |j                             ||¦  «        \  }
}|j        dk    r4‰                     |j        ¦  «        }‰j                             ¦   «         }n;‰                     d¦  «        }‰j                             t1          ¦   «         ¦  «        }|                     dd ¦  «        }|€ t4          j                             dd ¦  «        }|                     dd¦  «        }|                     dd¦  «        }|dk    r®ddlm} t;          j        ¦   «         5 }|                     |¦  «        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   d d d ¦  «         n# 1 swxY w Y   �nC|dk    rÚddlm#} t;          j$        ¦   «         5 }|j        dk    rD‰j                             t1          ¦   «         › d|j%         &                    d¬¦  «        › �¦  «        }|dk    rt          d|› �¦  «        ‚|j'         (                    |
|||d|d|¬¦  «        }|j'         )                    ||
|||¬¦  «        }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tU          d"¦  «        ‚| +                     |d          |¦  «        ¦  «        Šd#‰j,        j-        d$t          j.        fd%„Šd&t          j.        d$‰j,        j-        fˆfd'„Šd(t          j.        d$t^          t          j.                 fˆˆˆfd)„}|S )*Ni N  é   )Ú	schedulerÚtrialsÚ	opt_levelzoptions must not be Noner   )Úrelay)Úgraph_executorzvPlease install apache-tvm to use the tvm backend. See https://tvm.apache.org/docs/install/index.html for instructions.c                 ó,   — g | ]\  }}d |› �|j         f‘ŒS )Úinp_)Úshape)Ú.0ÚidxÚis      úX/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/_dynamo/backends/tvm.pyú
<listcomp>ztvm.<locals>.<listcomp>D   s)   € ÐRÐRÐR©f¨c°1�<˜#�<�< ¤Ð)ÐRÐRÐRó    z0Explicitly fall back to eager due to zero outputÚcudar   ÚTVM_SCHEDULERr   r   Úauto_scheduler)r"   z relay.backend.use_auto_schedulerT)r   Úconfig)ÚtargetÚparamsÚmeta_schedule)r&   z --num-cores F)Úlogicalztrials must be positive, got é@   Úevolutionary)Úmodr$   Úwork_dirÚmax_trials_globalÚnum_trials_per_iterr%   Ústrategyr   )Údatabaser*   r$   r%   r   Údefault)r   z¢This 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)r1   s    r   Úto_torch_tensorztvm.<locals>.to_torch_tensor�   sQ   € àŒ?˜fÒ$Ð$õ Ô# I§O¢OÑ$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.)r4   r5   r3   ÚndÚarrayÚcpur7   r:   )r=   Útvms    €r   Úto_tvm_tensorztvm.<locals>.to_tvm_tensor˜   sW   ø€ àÔ¥¤Ò+Ð+ð ”6—<’< × 0Ò 0Ñ 2Ô 2× 8Ò 8Ñ :Ô :Ñ;Ô;Ð;ØŒv×!Ò! ,Ñ/Ô/Ð/r   Úi_argsc                  ó*  •— d„ | D ¦   «         }‰                      ¦   «         \  }}t          |                     ¦   «         ¦  «        }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   r   r   z6input %s skipped as not found in tvm's runtime libraryc                 óL   •— g | ] } ‰‰                      |¦  «        ¦  «        ‘Œ!S rG   )Ú
get_output)r   r   Úmr<   s     €€r   r   z)tvm.<locals>.exec_tvm.<locals>.<listcomp>´   s-   ø€ ÐUÐUÐU°Q�� §¢¨Q¡¤Ñ0Ô0ÐUÐUÐUr   )Úget_input_infoÚsetÚkeysÚ	enumerateÚdimÚrequires_gradÚdetachÚlogÚwarningÚ	set_inputÚrunÚrangeÚget_num_outputs)rD   ÚargsÚ
shape_infoÚ_Úactive_inputsr   ÚargÚinp_namerL   r<   rC   s           €€€r   Úexec_tvmztvm.<locals>.exec_tvm    s&  ø€ Ø/Ð/¨Ð/Ñ/Ô/ˆØ×(Ò(Ñ*Ô*‰ˆ
�AÝ˜JŸOšOÑ-Ô-Ñ.Ô.ˆÝ! $¨Ñ*Ô*ð 	ð 	‰HˆC�Ø�wŠw‰yŒy˜AŠ~ˆ~ØÔ$ð 'ØŸ*š*™,œ,�CØ' #˜<˜<�Ø =Ð0Ð0Ý—K’KØPØ ñô ð ð Ø—’ØØ!�M #Ñ&Ô&ñô ð øð 	
�Š‰ŒˆØUÐUÐUÐUÐU½%À×@QÒ@QÑ@SÔ@SÑ:TÔ:TÐUÑUÔUÐUr   )0r   ÚAssertionErrorrB   r   Útvm.contribr   ÚImportErrorr5   ÚjitÚtracer	   rP   ÚlenrT   rU   ÚforwardÚfrontendÚfrom_pytorchÚtyper    Úindexr$   rA   ÚTargetÚllvm_targetÚgetÚosÚenvironr"   ÚtempfileÚNamedTemporaryFileÚApplyHistoryBestÚ	transformÚPassContextÚbuildr&   ÚTemporaryDirectoryr8   Ú	cpu_countÚrelay_integrationÚ
tune_relayÚcompile_relayÚNotImplementedErrorÚGraphModuler?   r@   ÚTensorÚlist)r   r   r   r   r   ÚeÚjit_modÚdeviceÚ
shape_listÚexample_outputsr*   r%   Údevr$   r   r   r   r"   Úlog_fileÚlibÚmsr+   r/   r`   rL   r<   rC   rB   s                           @@@@r   rB   rB   ,   sŽ  øøøø€ ð €Ý"°ÀÐUVÐ#WÐ#WÑXÔXˆØ€ÝÐ7Ñ8Ô8Ð8ðØˆ
ˆ
ˆ
ØÐÐÐÐÐØ.Ð.Ð.Ð.Ð.Ð.Ð.øÝð ð ð ÝðSñ
ô 
ð ð	øøøøðøøøõ Œi�oŠo˜b .Ñ1Ô1€GÝ Ñ/Ô/€FØRÐR½	À.Ñ8QÔ8QÐRÑRÔR€JØ�b˜.Ð)€OÝ
ˆ?ÑÔ˜qÒ Ð Ý�ŠÐFÑGÔGÐGØŒzÐØ”.×-Ò-¨g°zÑBÔB�K€CˆØ„{�fÒÐØ�hŠh�v”|Ñ$Ô$ˆØ”—’Ñ"Ô"ˆˆà�gŠg�a‰jŒjˆØ”×"Ò"¥;¡=¤=Ñ1Ô1ˆà—’˜K¨Ñ.Ô.€IØÐÝ”J—N’N ?°DÑ9Ô9ˆ	à�[Š[˜ 5Ñ)Ô)€FØ—’˜K¨Ñ+Ô+€IàÐ$Ò$Ð$à&Ð&Ð&Ð&Ð&Ð&õ Ô'Ñ)Ô)ð	AØ-5Ø×+Ò+¨HÑ5Ô5ð	Að 	Að ŒM×%Ò%Ø#Ð-OÐQUÐ,Vð &ñ ô ð	Að 	Að —+’+˜c¨&¸�+Ñ@Ô@ˆCð	Að 	Að 	Añ 	Aô 	Að 	Að 	Að 	Að 	Að 	Að 	Aøøøð 	Að 	Að 	Að 	Að 	Að 	Að 	Añ 	Aô 	Að 	Að 	Að 	Að 	Að 	Að 	Aøøøð 	Að 	Að 	Að 	Að 	Að 	Að 	Añ 	Aô 	Að 	Að 	Að 	Að 	Að 	Að 	Aøøøð 	Að 	Að 	Að 	Aùð 
�oÒ	%Ð	%à+Ð+Ð+Ð+Ð+Ð+åÔ(Ñ*Ô*ð 	¨hØŒ{˜fÒ$Ð$ð œ×*Ò*Ý"‘}”}ÐVÐV°2´8×3EÒ3EÈeÐ3EÑ3TÔ3TÐVÐVñô �ð
 ˜Š{ˆ{Ý$Ð%MÀVÐ%MÐ%MÑNÔNÐNØÔ+×6Ò6ØØØ!Ø"(Ø$&ØØ'Ø#ð 7ñ 	ô 	ˆHð Ô&×4Ò4Ø!ØØØØ#ð 5ñ ô ˆCð+	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	øð8 
�iÒ	Ð	 yÐ	àŒ]×&Ò&°Ð&Ñ;Ô;ð 	Að 	AØ—+’+˜c¨&¸�+Ñ@Ô@ˆCð	Að 	Að 	Añ 	Aô 	Að 	Að 	Að 	Að 	Að 	Að 	Aøøøð 	Að 	Að 	Að 	Aøõ "ð\ñ
ô 
ð 	
ð 	×"Ò" > 3 y¤>°#Ñ#6Ô#6Ñ7Ô7€AðE 3¤6¤<ð EµE´Lð Eð Eð Eð Eð0¥E¤Lð 0°S´V´\ð 0ð 0ð 0ð 0ð 0ð 0ðV�%œ,ð V­4µ´Ô+=ð Vð Vð Vð Vð Vð Vð Vð Vð, €Os”   ¬= ½
AÁAÁAÇ;JÈI,È0IÉ	I,ÉIÉI,ÉIÉI,É JÉ,I0	É0JÉ3I0	É4JÊJÊ
JÊ/B)M$Í$M(Í+M(ÎN8Î8N<Î?N<r&   )r   r"   c                  óR   — 	 t          j        d¦  «         dS # t          $ r Y dS w xY w)NrB   TF)Ú	importlibÚimport_modulerc   rG   r   r   Úhas_tvmrŒ   ½   s?   € ðÝÔ Ñ&Ô&Ð&ØˆtøÝð ð ð Øˆuˆuðøøø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Úplatformr   Ú	read_text)Úcpuinfos    r   rm   rm   Å   sO   € å
„|�wÒÐÝ�Ñ'Ô'×1Ò1Ñ3Ô3ˆØ�wÐÐØ.Ð.Ø�wÐÐØ)Ð)Øˆ6r   )%Ú__doc__Ú	functoolsrŠ   Úloggingro   r’   rq   Úcollections.abcr   Úpathlibr   Útypesr   Útypingr   r5   r   Úcommonr	   r
   Úregistryr   Ú	getLoggerÚ__name__rT   r}   r   r~   ÚstrrB   ÚpartialÚtvm_meta_scheduleÚtvm_auto_schedulerr3   rŒ   Úcacherm   rG   r   r   ú<module>r¦      sù  ððð ð, Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø 	€	€	€	Ø 
€
€
€
Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ø Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð Ð Ð à ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø &Ð &Ð &Ð &Ð &Ð &ð €gÔ˜Ñ!Ô!€ð Øð
 26ð	Hð Hð HØ
ŒðHà˜œÔ&ðHð ˜c 3˜hÔ'¨$Ñ.ð	Hð
 ˆc�3ˆhÔðHð Hð Hñ Ôñ ÔðHðV &�IÔ% c°_ÐEÑEÔEÐ Ø&�YÔ& sÐ6FÐGÑGÔGÐ ð�ð ð ð ð ð „ð�Sð ð ð ñ „ðð ð r   