o
    Zhw                     @  s|  d dl m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m	Z	 d dl
mZ ddddd	d
ZdZG dd deZG dd deZe rd dlZd dlZd dlZeejjdrfd dlmZ 		d%ddZn)eejjdr{d dlmZ 		d%ddZn		d%ddZnejdddgddgdZdZG dd deZG dd deZG dd  d ejZG d!d" d"ejZG d#d$ d$ejZdS )&    )annotationsN)autoEnum)OptionalUnion)has_triton_packagei   i   i   i   )XYZZR0_ZR1_@   c                   @  s   e Zd ZdZdZdZdZdS )ReductionHintr            N)__name__
__module____qualname__ZINNERZOUTERZ
OUTER_TINYDEFAULT r   r   L/var/www/auris/lib/python3.10/site-packages/torch/_inductor/runtime/hints.pyr      s
    r   c                   @  s   e Zd ZdZdZdS )TileHintr   r   N)r   r   r   SQUAREr   r   r   r   r   r       s    r   AttrsDescriptorr   c                 C  sD   | |d}t |t jd}|jd dksJ |jd dks J |S )N)tt.divisibilitytt.equal_to)Zarg_propertiesclsr      r   r   )r   	from_dictr   Zproperty_values)divisible_by_16
equal_to_1kwargsresr   r   r   AttrsDescriptorWrapper/   s   
r#   c                 C  s   | |d}t di |S )Nr   r    r   r   )r   r    r!   r   r   r   r#   E   s   c                 C  s   dd | D S )Nc                 S  s   i | ]	}|fd dggqS )r   r   r   ).0xr   r   r   
<dictcomp>\   s    z*AttrsDescriptorWrapper.<locals>.<dictcomp>r   r$   r   r   r   r#   X   s   r   r    r   )defaults    c                   @  s6   e Zd Ze Ze Ze Ze Ze Ze Z	e Z
dS )HeuristicTypeN)r   r   r   r   ZPERSISTENT_REDUCTIONZ	POINTWISEZ	REDUCTIONZ
SPLIT_SCANTEMPLATEZUSER_AUTOTUNEZFIXEDr   r   r   r   r*   j   s    
r*   c                   @  s   e Zd ZdZejZdS )AutotuneHintr   N)r   r   r   ZONE_ELEMENT_PER_THREADr   __str____repr__r   r   r   r   r,   t   s    
r,   c                   @  sz   e Zd ZU dZded< ded< ded< ded< dZd	ed
< dZd	ed< dZd	ed< dZd	ed< e	e
ddddZdS )DevicePropertieszOCopy device properties into a data structure not requiring torch to be importedstrtypeintindexmulti_processor_countccNOptional[int]majorregs_per_multiprocessormax_threads_per_multi_processor	warp_sizereturnc                 C  s   dd l }ddlm} |j}|jjr|dkrd}||}||}z|j}W n ty>   |dkr4|j	}n|dkr;d}n Y nw | ||j
|||t|dd t|d	d t|d
d t|d|dkrcddS d dS )Nr   )get_interface_for_devicecudahipZxpuZmps   r7   r8   r9   r:   cpur)   )r1   r3   r4   r5   r7   r8   r9   r:   )torchZtorch._dynamo.device_interfacer<   r1   versionr>   Zget_device_propertiesr4   AttributeErrorZgpu_subslice_countr3   Zget_compute_capabilitygetattr)r   ZdevicerA   r<   Zdevice_typeZdevice_interfacepropsr4   r   r   r   create   s>   




zDeviceProperties.create)r;   r/   )r   r   r   __doc____annotations__r7   r8   r9   r:   classmethod	functools	lru_cacherF   r   r   r   r   r/   ~   s   
 r/   c                   @  sv   e Zd ZU ded< ded< dZded< dZded< dZded	< dZded
< dddZdddZ	dddZ
dddZdS )HalideInputSpecr0   ctypenameNzOptional[list[str]]shapestrideOptional[str]offsetalias_ofr;   c                 C  s   | j dv rdS | j S )N)half*	bfloat16*z	uint16_t*)rM   selfr   r   r   bindings_type   s   
zHalideInputSpec.bindings_typec                 C  s2   | j dkrdS | j dkrdS d| j dd dS )	NrT   z$halide_type_t(halide_type_float, 16)rU   z%halide_type_t(halide_type_bfloat, 16)zhalide_type_of<* z>())rM   replacerV   r   r   r   halide_type   s
   

zHalideInputSpec.halide_typeboolc                 C  s
   | j d u S NrO   rV   r   r   r   	is_scalar      
zHalideInputSpec.is_scalarc                 C  
   | j d uS r^   r_   rV   r   r   r   	is_buffer   ra   zHalideInputSpec.is_buffer)r;   r0   r;   r]   )r   r   r   rH   rO   rP   rR   rS   rX   r\   r`   rc   r   r   r   r   rL      s   
 


rL   c                   @  sV   e Zd ZU ded< ded< dZded< dZded	< dZd
ed< dddZdddZdS )
HalideMetazlist[HalideInputSpec]argtypesr0   targetNrQ   	schedulerz$Optional[dict[str, Union[int, str]]]scheduler_flagsr6   cuda_devicer;   	list[str]c                 C  sd   d| j  g}| jr|d| j  | jr0| jsJ | j D ]\}}|d| d|  q |S )z-Command line args to pass to halide generatorztarget=zautoscheduler=zautoscheduler.=)rg   rh   appendri   items)rW   argskvr   r   r   ro      s   
zHalideMeta.argsr]   c                 C  rb   r^   )rj   rV   r   r   r   is_cuda   ra   zHalideMeta.is_cuda)r;   rk   rd   )	r   r   r   rH   rh   ri   rj   ro   rr   r   r   r   r   re      s   
 
re   )NN) 
__future__r   collectionsrJ   typingenumr   r   r   r   Ztorch.utils._tritonr   ZTRITON_MAX_BLOCKZTRITON_MAX_RSPLITr   r   ZtritonZtriton.backends.compilerZtriton.compiler.compilerhasattrbackendscompilerr   r#   
namedtupleZ_NUM_THREADS_PER_WARPr*   r,   
NamedTupler/   rL   re   r   r   r   r   <module>   sX   

1