§
    ž²Åjh  ã                   ó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                óV	  ‡‡‡‡— 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    �rªddl m} t5          j        ¦   «         }t.          j                             |¦  «        sõ|                     |	d         |
|¦  «        \  }}t          |¦  «        dk    rÂ|                     ||¦  «        }t.          j                             |¦  «        s�|dk    sJ ‚|                      || !                    |¦  «        gd¬¦  «        }	 | "                    |¦  «         nB# tF          $ 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    rÊddl m)} t5          j*        ¦   «         5 }|j        dk    rD‰j                             t+          ¦   «         › d|j+         ,                    d¬¦  «        › �¦  «        }|dk    sJ ‚|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ta          d!¦  «        ‚| 1                     |d         |¦  «        ¦  «        Šd"„ Šˆfd#„Šˆˆˆfd$„}|S )%Nr   )Úrelay)Úgraph_executorc                 ó,   — g | ]\  }}d |› �|j         f‘ŒS )Úinp_)Úshape)Ú.0ÚidxÚis      úKC:\Projects\Historical\venv\Lib\site-packages\torch/_dynamo/backends/tvm.pyú
<listcomp>ztvm.<locals>.<listcomp>%   s)   € ÐRÐRÐR©f¨c°1�<˜#�<�< ¤Ð)ÐRÐRÐRó    z0Explicitly fall back to eager due to zero outputÚcudar   ÚTVM_SCHEDULERr   r	   r   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   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.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Ò$Ð$õ Ô# I§O¢OÑ$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ÐU°Q�� §¢¨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×-=Ò-=Ñ-?Ô-?Ð@Ñ@Ô@ˆÝ! $¨Ñ*Ô*ð 	ð 	‰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   )2rA   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Ú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ÚtunerÚtune_optionÚlibÚmsr*   r.   ra   rN   r;   rB   rA   s                              @@@@r   rA   rA      s`  øøøø€ ð €J€J€JØÐÐÐÐÐØ*Ð*Ð*Ð*Ð*Ð*åŒ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àÐ$Ò$Ñ$Ø&Ð&Ð&Ð&Ð&Ð&åÔ.Ñ0Ô0ˆåŒw�~Š~˜hÑ'Ô'ð 	Ø"0×">Ò">Ø�F”˜V Vñ#ô #ÑˆE�<õ �5‰zŒz˜QŠˆØ&×4Ò4°U¸LÑIÔI�Ý”w—~’~ hÑ/Ô/ð Ø! Aš:˜:˜:˜:Ø"0×">Ò">Ø+1Ø+9×+FÒ+FÀxÑ+PÔ+PÐ*QØ'+ð #?ñ #ô #�Kð
ØŸ
š
 ;Ñ/Ô/Ð/Ð/øÝ$ð ð ð Ýœ7Ÿ>š>¨(Ñ3Ô3ð 0ÝœI hÑ/Ô/Ð/Øðøøøð
 ×,Ò,¨XÑ6Ô6ð 	Eð 	EØ”×*Ò*Ø#Ð-OÐQUÐ,Vð +ñ ô ð Eð Eð —k’k #¨f¸V�kÑ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ÐV°2´8×3EÒ3EÈeÐ3EÑ3TÔ3TÐ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øõ "ð\ñ
ô 
ð 	
ð 	×"Ò" > 3 y¤>°#Ñ#6Ô#6Ñ7Ô7€AðEð Eð Eð0ð 0ð 0ð 0ð 0ðVð Vð Vð Vð Vð Vð Vð, €Osg   É.J Ê?KËL6Ë:LÌL6ÌL#	Ì#L6Ì&L#	Ì'L6Ì6L:Ì=L:Í"BPÐPÐPÐ6QÑQÑ"Q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øÝð ð ð Øˆ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Ú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¸!Ð<Ð<ñ+ô +ð	Pð Pð Pð Ð&Ô'ð	Pð Pð Pñ Ôñ ÔðPðf &�IÔ% c°_ÐEÑEÔEÐ Ø&�YÔ& sÐ6FÐGÑGÔGÐ ðð ð ð €Ô�TÑÔðð ñ Ôðð ð r   