
    Ph                        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mZ ddl	m
Z
  ej                  e      Ze
edddd              Z e j                  ed	      Z e j                  ed
	      Zd Z e j&                  d      d        Zy)    N   )device_from_inputsfake_tensor_unsupported)register_backend N  )	schedulertrialsc          
         dd l ddl m} ddlm} t        j
                  j                  | |      }t        |      }t        |      D 	cg c]  \  }}	d| |	j                  f }
}}	 | | }t        |      dk(  r!t        j                  d       | j                  S |j                  j                  ||
      \  }}|j                   dk(  r6j#                  |j$                        }j&                  j#                         }n4j)                  d      }j&                  j+                  t-                     }| t.        j0                  j3                  dd       }|dk(  rMdd	l m} t7        j8                         }t.        j:                  j=                  |      s|j?                  |d
   ||      \  }}|D ]  }tA        |jB                          tA        d       t        |      dk7  rn|jE                  ||      }t.        j:                  j=                  |      s=|dkD  sJ |jG                  ||jI                  |      gd      }	 |jK                  |       |jQ                  |      5  jR                  jU                  dddi      5  |jW                  |||      }d d d        d d d        n|dk(  rddl m,} t7        jZ                         5 }|j                   dk7  rBj&                  j+                  t-                d|j\                  j_                  d             }|j`                  jc                  |||dd|d      }|j`                  je                  ||||      }d d d        nL|dk(  s|s:jR                  jU                  d      5  |jW                  |||      }d d d        ntg        d       |ji                   d   |            d! fd"fd#}|S c c}	}w # tL        $ r6 t.        j:                  j=                  |      rt/        jN                  |        w xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)$Nr   )relay)graph_executorinp_z0Explicitly fall back to eager due to zero outputcudaTVM_SCHEDULERauto_scheduler)r   mainzNo tasksi  )num_measure_trialsmeasure_callbacksearly_stopping   z relay.backend.use_auto_schedulerT)	opt_levelconfig)targetparamsmeta_schedule)r   z --num-cores F)logicalr   @   evolutionary)modr   work_dirmax_trials_globalnum_trials_per_iterr   strategy)databaser   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                  | j                               S t        j                  j
                  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    eC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torch/_dynamo/backends/tvm.pyto_torch_tensorztvm.<locals>.to_torch_tensorp   sL    ??f$ ##IOO$566{{!!--i.A.A.CDD    c                     | j                   t        j                  k(  r7j                  j	                  | j                         j                               S j                  j                  |       S )z8A helper function to transfer a torch.tensor to NDArray.)r(   r)   r'   ndarraycpur+   r.   )torch_tensortvms    r1   to_tvm_tensorztvm.<locals>.to_tvm_tensory   sQ    + 66<< 0 0 2 8 8 :;;vv!!,//r3   c                  X   | D cg c]  }|j                          }}j                         \  }}|j                         D ch c]  \  }}|	 }}}t        |d      D ]m  \  }}|j	                         dk7  s|j
                  r|j                         }d| }	|	|vrt        j                  d|	       Vj                  |	 |             o j                          t        j                               D 
cg c]  }
 j                  |
             c}
S c c}w c c}}w c c}
w )Nr   r   z6input %s skipped as not found in tvm's runtime library)
contiguousget_input_infoitems	enumeratedimrequires_graddetachlogwarning	set_inputrunrangeget_num_outputs
get_output)i_argsaargs
shape_info_nameactive_inputsidxarginp_nameimr2   r:   s              r1   exec_tvmztvm.<locals>.exec_tvm   s   (./1/((*
A-7-=-=-?@-?'$-?@!$*HCwwyA~$$**,C!#<=0KKP  !#& + 	
:?@Q@Q@S:TU:TQQ0:TUU' 0@" Vs   DD!;D')5r9   r   tvm.contribr   r)   jittracer   r?   shapelenrC   rD   forwardfrontendfrom_pytorchtyper   indexr   r7   Targetllvm_targetosenvirongetr   tempfileNamedTemporaryFilepathexistsextract_tasksprintcompute_dagTaskSchedulerTuningOptionsRecordToFiletune	ExceptionunlinkApplyHistoryBest	transformPassContextbuildr   TemporaryDirectoryr,   	cpu_countrelay_integration
tune_relaycompile_relayNotImplementedErrorGraphModule) gmexample_inputsr   r	   r   r   jit_moddevicerQ   rT   
shape_listexample_outputsr   r   devr   r   log_filetaskstask_weightstasktunertune_optionlibmsr   r#   rV   rU   r2   r:   r9   s                                @@@@r1   r9   r9      s    *iioob.1G/F8A.8QR8Qfc1T#<)8QJR.)O
?q FGzz..--gzBKC{{fhhv||$"ggaj"";=1JJNN?D9	$$&..0ww~~h'"0">">FVV#E< d&&'  j!5zQ&44ULIww~~h/!A:%:"0">">+1+9+F+Fx+P*Q'+ #? #K


;/ ,,X6**%G$N +  kk#fVkD 76
 
o	%+((*h{{f$ **"}o]2883E3Ee3E3T2UV
 ++66!"'$&' 7 H &&44!	 5 C% +*0 
i	y]]&&&4++c&+@C 54 "\
 	
 	"">3y>##67AE0V, O SP % 77>>(3IIh/  76 +*4 54sO   OO% & P4P'P4BQ Q%?P$'P1	,P44P= Q	Qr   )r   r   c                  N    	 t        j                  d       y# t        $ r Y yw xY w)Nr9   TF)	importlibimport_moduleImportError r3   r1   has_tvmr      s*    & s    	$$c                  <    dt        d      j                         v ryy)Navx512z/proc/cpuinfozllvm -mcpu=skylake-avx512zllvm -mcpu=core-avx2)openreadr   r3   r1   rb   rb      s    4(--//*!r3   )	functoolsr   loggingrc   rf   r)   commonr   r   registryr   	getLogger__name__rC   r9   partialtvm_meta_scheduletvm_auto_schedulerr   	lru_cacherb   r   r3   r1   <module>r      s       	   ? &g! )-e F  FR &I%%c_E &Y&&s6FG  T" "r3   