o
    Ihw                     @  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ZR0_R1_@   c                   @  s   e Zd ZdZdZdZdZdS )ReductionHintr            N)__name__
__module____qualname__INNEROUTER
OUTER_TINYDEFAULT r   r   Q/var/www/vscode/kcb/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)arg_propertiesclsr      r    r   )r   	from_dictr   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   PERSISTENT_REDUCTION	POINTWISE	REDUCTION
SPLIT_SCANTEMPLATEUSER_AUTOTUNEFIXEDr   r   r   r   r1   j   s    
r1   c                   @  s   e Zd ZdZejZdS )AutotuneHintr   N)r   r   r   ONE_ELEMENT_PER_THREADr   __str____repr__r   r   r   r   r9   t   s    
r9   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hipxpumps   rE   rF   rG   rH   cpur0   )r?   rA   rB   rC   rE   rF   rG   rH   )torchtorch._dynamo.device_interfacerJ   r?   versionrL   get_device_propertiesrB   AttributeErrorgpu_subslice_countrA   get_compute_capabilitygetattr)r"   devicerQ   rJ   device_typedevice_interfacepropsrB   r   r   r   create   s>   




zDeviceProperties.create)rI   r=   )r   r   r   __doc____annotations__rE   rF   rG   rH   classmethod	functools	lru_cacher]   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 )HalideInputSpecr>   ctypenameNzOptional[list[str]]shapestrideOptional[str]offsetalias_ofrI   c                 C  s   | j dv rdS | j S )N)half*	bfloat16*z	uint16_t*)rd   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 )	Nrk   z$halide_type_t(halide_type_float, 16)rl   z%halide_type_t(halide_type_bfloat, 16)zhalide_type_of<* z>())rd   replacerm   r   r   r   halide_type   s
   

zHalideInputSpec.halide_typeboolc                 C  s
   | j d u S Nrf   rm   r   r   r   	is_scalar      
zHalideInputSpec.is_scalarc                 C  
   | j d uS ru   rv   rm   r   r   r   	is_buffer   rx   zHalideInputSpec.is_buffer)rI   r>   rI   rt   )r   r   r   r_   rf   rg   ri   rj   ro   rs   rw   rz   r   r   r   r   rc      s   
 


rc   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]argtypesr>   targetNrh   	schedulerz$Optional[dict[str, Union[int, str]]]scheduler_flagsrD   cuda_devicerI   	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.=)r~   r   appendr   items)rn   argskvr   r   r   r      s   
zHalideMeta.argsrt   c                 C  ry   ru   )r   rm   r   r   r   is_cuda   rx   zHalideMeta.is_cuda)rI   r   r{   )	r   r   r   r_   r   r   r   r   r   r   r   r   r   r|      s   
 
r|   )NN) 
__future__r   collectionsra   typingenumr   r   r   r   torch.utils._tritonr   TRITON_MAX_BLOCKTRITON_MAX_RSPLITr   r   tritontriton.backends.compilertriton.compiler.compilerhasattrbackendscompilerr   r*   
namedtuple_NUM_THREADS_PER_WARPr1   r9   
NamedTupler=   rc   r|   r   r   r   r   <module>   sX   

1