o
    Zh+                     @   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 )NZ
aoti_eager)r   r	   )r
   r    r   I/var/www/auris/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)Ztorch._inductor.codecacher   r   Ztorch.utils._filelockr   ospathjoin)r   r   r   r   Zop_conf_lock_fileZ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_valueZ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   Zdevice_kernel_cacheop_conff	json_dataitemZkernel_lib_abs_pathmetadataZ	dtype_keyeerr_msgr   r   r   load_aoti_eager_cache    sd   




&%

r<   c                   C   s   t tjttjttjiS N)intr0   Zint32floatboolr   r   r   r   #supported_builtin_dtype_torch_dtypeT   r   rA   .c                  C   s   t  } t|  S r=   )rA   tuplekeys)type_to_torch_dtyper   r   r   supported_scalar_typesX   s   rE   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_gradZdispatch_key_set)
isinstancer0   Tensorr   typer   indexr$   listsizeZstriderJ   Z_CZ_dispatch_keysZraw_repr)rF   rG   r9   r   r   r   extract_tensor_metadata]   s   


rQ   c                 C   s>   g }|D ]}t |tjsJ |t| | qi }||d< |S )NZtensor_list)rK   r0   rL   appendrQ   )rF   rG   Zmetadata_listr8   r9   r   r   r   extract_tensor_list_metadatao   s   rS   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$   Zscalar_value)rK   rE   rA   rM   )r   rG   r9   rD   r   r   r   extract_scalar_metadata}   s   rT   c                 C   s   t | tsJ i }| |d< |S )NZstring_value)rK   strrG   r9   r   r   r   extract_string_metadata   s   rW   c                 C   "   t | tjsJ i }|  |d< |S )Nr%   )rK   r0   r$   rV   r   r   r   extract_dtype_metadata      
rY   c                 C   s.   t | tjsJ i }| j |d< | j|d< |S )NZdevice_type_valueZdevice_index_value)rK   r0   r   rM   rN   rV   r   r   r   extract_device_metadata   s
   
r[   c                 C   rX   )Nr'   )rK   r0   layoutrV   r   r   r   extract_layout_metadata   rZ   r]   F)dynamic_shapesoptionsremove_runtime_assertionsdisable_constraint_solverr6   argskwargsr^   r_   r`   ra   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 r=   )	rK   rE   r0   rL   rO   rU   r$   r   r\   ).0rG   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 r=   rK   r0   rL   rd   r8   r   r   r   re      s    
z<_impl_with_aoti_compile encounters unsupported input types: T)parentslibZTORCHINDUCTOR_CACHE_DIRF)r^   r`   ra   Zsame_signaturec                 s   rf   r=   rg   rh   r   r   r   re      s    zUnsupported input type: Z	arg_orderr   r   r   rwN   )indentzFailed to compile z:  ),rO   valuesallr3   r4   r.   rK   r   r(   mkdirr   patchdictr   environabsoluter,   r0   Z_exportZaot_compilerU   	enumeraterL   rQ   rS   rE   rT   rW   r$   rY   r   r[   r\   r]   rM   rR   r   relative_tor   r)   r*   r+   r2   dump)r   r   r   rF   r6   rb   rc   r^   r_   r`   ra   Zflattened_inputsr;   rG   Zpersistent_cacheZpersistent_cache_libZkernel_lib_pathZkernel_metadata_itemsidxr9   Zkernel_meta_infor7   Zupdate_jsonr5   modeZop_conf_filer8   r:   r   r   r   "aoti_compile_with_persistent_cache   s   












J

Jr|   )+r*   loggingr   pathlibr   typingr   r   r   Zunittestr   r0   Ztorch._exportZtorch._inductor.utilsr   Zruntime.runtime_utilsr	   	getLogger__name__r3   rU   r   r   rO   rt   r<   rM   r$   rA   rB   rE   r@   rL   rQ   rS   rT   rW   rY   r   r[   r\   r]   r|   r   r   r   r   <module>   s    


4 



	
