o
    Ih+                     @   s<  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	m
Z
 d dlZd dlZd dlmZ ddlmZ eeZded	ed
efddZded
efddZdededed
eeeeef   fddZd
eeejf fddZd
eedf fddZdedej d
eeef fddZ!dedeej  d
eeef fddZ"deded
eeef fdd Z#ded
eeef fd!d"Z$dejd
eeef fd#d$Z%dej&d
eeef fd%d&Z'dej(d
eeef fd'd(Z)ddd)d)d*dedededed+edef d,ee d-eeef d.eeeef  d/eeeef  d0ed1ed
efd2d3Z*dS )4    N)Path)AnyCallableOptional)mock)is_cpu_device   )	cache_dir	namespacedevicereturnc                 C   s   t t d |  | S )N
aoti_eager)r   r	   )r
   r    r   N/var/www/vscode/kcb/lib/python3.10/site-packages/torch/_inductor/aoti_eager.pyaoti_eager_cache_dir      r   op_func_name_with_overloadc                 C   sB   ddl m}m} ddlm} |  d}| }|tj|||dS )Nr   )get_lock_dirLOCK_TIMEOUT)FileLockz.lock)timeout)torch._inductor.codecacher   r   torch.utils._filelockr   ospathjoin)r   r   r   r   op_conf_lock_filelock_dirr   r   r   aoti_eager_op_conf_lock   s
   
r   nsdevice_typec              
   C   s  t | |}|| d }| sg S zt| t|}t|}|D ]~}||d  }| |d< | sIg   W  d    W  d    W S |d D ]T}	|	drXtdd|	v rf|	d dkrfd|	d	< d
D ]}
|
|	v r|t	t
|	|
 dd |	|
< qhd|	v rt	t
|	d dd |	d< d|	v rt	t
|	d dd |	d< qMq$|W  d    W  d    W S 1 sw   Y  W d    W d S 1 sw   Y  W d S  ty } zd| }t| g W  Y d }~S d }~ww )N.jsonkernel_path	meta_info
is_dynamic!Only support static shape for nowr    cpudevice_index)dtypedtype_value.layout_valuememory_format_valuez!Failed to load aoti eager cache: )r   existsr   openjsonloadas_posixgetNotImplementedErrorgetattrtorchsplit	Exceptionlog	exception)r   r   r    device_kernel_cacheop_conff	json_dataitemkernel_lib_abs_pathmetadata	dtype_keyeerr_msgr   r   r   load_aoti_eager_cache    sd   




&%

rE   c                   C   s   t tjttjttjiS N)intr6   int32floatboolr   r   r   r   #supported_builtin_dtype_torch_dtypeT   r   rK   .c                  C   s   t  } t|  S rF   )rK   tuplekeys)type_to_torch_dtyper   r   r   supported_scalar_typesX   s   rO   dynamicinputc                 C   s   i }| |d< t |tjsJ |jj |d< t|grd|d< n|jj|d< |j |d< t|	 |d< t|
 |d< |j|d< tj| |d	< |S )
Nr$   r    r'   r(   r)   sizesstridesrequires_graddispatch_key_set)
isinstancer6   Tensorr   typer   indexr)   listsizestriderT   _C_dispatch_keysraw_repr)rP   rQ   rA   r   r   r   extract_tensor_metadata]   s   


r`   c                 C   s>   g }|D ]}t |tjsJ |t| | qi }||d< |S )Ntensor_list)rV   r6   rW   appendr`   )rP   rQ   metadata_listr?   rA   r   r   r   extract_tensor_list_metadatao   s   rd   c                 C   s\   t |t sJ i }d|d< | |d< | dkrdnd|d< t }|t|  |d< ||d	< |S )
NFr$   r    r&   r'   r   r(   r)   scalar_value)rV   rO   rK   rX   )r    rQ   rA   rN   r   r   r   extract_scalar_metadata}   s   rf   c                 C   s   t | tsJ i }| |d< |S )Nstring_value)rV   strrQ   rA   r   r   r   extract_string_metadata   s   rj   c                 C   "   t | tjsJ i }|  |d< |S )Nr*   )rV   r6   r)   ri   r   r   r   extract_dtype_metadata      
rl   c                 C   s.   t | tjsJ i }| j |d< | j|d< |S )Ndevice_type_valuedevice_index_value)rV   r6   r   rX   rY   ri   r   r   r   extract_device_metadata   s
   
rp   c                 C   rk   )Nr,   )rV   r6   layoutri   r   r   r   extract_layout_metadata   rm   rr   F)dynamic_shapesoptionsremove_runtime_assertionsdisable_constraint_solverr=   argskwargsrs   rt   ru   rv   c                C   s  |rJ dt |t |  }tdd |D s'd| }t| t||D ]}t|t rGtdd |D sGd| }t| t|q)t| |}| sW|j	dd |d	 }| sc|	  t
jtjd
|  ii z?tjj|||||	|
dd}t|tsJ g }t|D ]o\}}t|tjrt||}nVt|t rtdd |D sJ t||}n@t|t rt||}n4t|trt|}n*t|tjrt|}nt|tjrt|}nt|tj rt!|}n	tdt"| ||d< |#| qi }||d< t$|%| |d< g }d}|| d }| r"dnd}t&|y t'||=}zt()|}W n t*yB   g }Y nw t|t sKJ |D ]}t|tsWJ |d |krbd} nqMW d   n	1 sow   Y  |r|#| t'|d}t(j+||dd W d   n	1 sw   Y  W d   n	1 sw   Y  |W W  d   S  t*y } zd| d| }t| W Y d}~W d   dS d}~ww 1 sw   Y  dS )zO
    Compile the given function with persistent cache for AOTI eager mode.
    r%   c              
   s   s2    | ]}t |t tjtttjtjtjfV  qd S rF   )	rV   rO   r6   rW   rZ   rh   r)   r   rq   ).0rQ   r   r   r   	<genexpr>   s    
z5aoti_compile_with_persistent_cache.<locals>.<genexpr>zUnsupported input types: c                 s       | ]	}t |tjV  qd S rF   rV   r6   rW   ry   r?   r   r   r   rz      s    
z<_impl_with_aoti_compile encounters unsupported input types: T)parentslibTORCHINDUCTOR_CACHE_DIRF)rs   ru   rv   same_signaturec                 s   r{   rF   r|   r}   r   r   r   rz      s    zUnsupported input type: 	arg_orderr#   r"   r!   rwN   )indentzFailed to compile z:  ),rZ   valuesallr9   r:   r4   rV   r   r.   mkdirr   patchdictr   environabsoluter2   r6   _exportaot_compilerh   	enumeraterW   r`   rd   rO   rf   rj   r)   rl   r   rp   rq   rr   rX   rb   r   relative_tor   r/   r0   r1   r8   dump)r   r   r    rP   r=   rw   rx   rs   rt   ru   rv   flattened_inputsrD   rQ   persistent_cachepersistent_cache_libkernel_lib_pathkernel_metadata_itemsidxrA   kernel_meta_infor>   update_jsonr<   modeop_conf_filer?   rC   r   r   r   "aoti_compile_with_persistent_cache   s   












J

Jr   )+r0   loggingr   pathlibr   typingr   r   r   unittestr   r6   torch._exporttorch._inductor.utilsr   runtime.runtime_utilsr	   	getLogger__name__r9   rh   r   r   rZ   r   rE   rX   r)   rK   rL   rO   rJ   rW   r`   rd   rf   rj   rl   r   rp   rq   rr   r   r   r   r   r   <module>   s    


4 



	
