
    Vhw                    P   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e      Z G d de      Z e       rgd dlZd dlZd dlZ eej(                  j*                  d      rd dlmZ 	 	 d$dZnJ eej*                  j*                  d      rd dlmZ 	 	 d$dZn 	 	 d$dZn ej0                  dddgddg      ZdZ G d de      Z G d de      Z G d dej8                        Z G d  d!ej8                        Z G d" d#ej8                        Zy)%    )annotationsN)autoEnum)OptionalUnion)has_triton_packagei   i   i   i   )XYZR0_R1_@   c                      e Zd ZdZdZdZdZy)ReductionHintr            N)__name__
__module____qualname__INNEROUTER
OUTER_TINYDEFAULT     M/home/dcms/DCMS/lib/python3.12/site-packages/torch/_inductor/runtime/hints.pyr   r      s    EEJGr   r   c                      e Zd ZdZdZy)TileHintr   r   N)r   r   r   SQUAREr   r   r   r   r   r       s    FGr   r   AttrsDescriptorr!   c                    | |d}t        j                  |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ress       r   AttrsDescriptorWrapperr/   /   sk     $3)F "++#)/2J2JKC &&'89R???&&}5:::Jr   c                "    | |d}t        di |S )N)r+   r,   r   r"   )r+   r,   r-   s      r   r/   r/   E   s!     $3(F #,V,,r   c                6    | D ci c]	  }|fddgg c}S c c}w )Nr$   r(   r   )r+   r,   xs      r   r/   r/   X   s)     >MMQD-r233MMMs   r+   r,   r   )defaults    c                  n    e Zd Z e       Z e       Z e       Z e       Z e       Z e       Z	 e       Z
y)HeuristicTypeN)r   r   r   r   PERSISTENT_REDUCTION	POINTWISE	REDUCTION
SPLIT_SCANTEMPLATEUSER_AUTOTUNEFIXEDr   r   r   r6   r6   j   s4    6IIJvHFMFEr   r6   c                  (    e Zd ZdZej
                  Zy)AutotuneHintr   N)r   r   r   ONE_ELEMENT_PER_THREADr   __str____repr__r   r   r   r?   r?   t   s     ||Hr   r?   c                      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
j                  d      dd              Zy)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_sizec                   dd l }ddlm} |j                  }|j                  j
                  r|dk(  rd} ||      }|j                  |      }	 |j                  } | ||j                  ||j                  |      t        |dd       t        |d	d       t        |d
d       t        |d|dk7  rd            S d             S # t        $ r |dk(  r|j                  }n	|dk(  rd}n Y w xY w)Nr   )get_interface_for_devicecudahipxpumps   rL   rM   rN   rO   cpur4   )rF   rH   rI   rJ   rL   rM   rN   rO   )torchtorch._dynamo.device_interfacerQ   rF   versionrS   get_device_propertiesrI   AttributeErrorgpu_subslice_countrH   get_compute_capabilitygetattr)r'   devicerX   rQ   device_typedevice_interfacepropsrI   s           r   createzDeviceProperties.create   s    	Kkk==!6K3F; 66v>		$)$?$?! ,,"766v>%$/$+E3Ld$S,38$- e[u8L"W
 	
 SWW
 	
  	e#(-(@(@%%()%	s   B? ?$C&%C&)returnrD   )r   r   r   __doc____annotations__rL   rM   rN   rO   classmethod	functools	lru_cacherd   r   r   r   rD   rD   ~   sk    Y
IJGE=-1]159#]9#I}#Y 
   
r   rD   c                  z    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ZddZ	ddZ
ddZy)HalideInputSpecrE   ctypenameNzOptional[list[str]]shapestrideOptional[str]offsetalias_ofc                8    | j                   dv ry| j                   S )N)half*	bfloat16*z	uint16_t*)rm   selfs    r   bindings_typezHalideInputSpec.bindings_type   s    :://zzr   c                    | j                   dk(  ry| j                   dk(  ryd| j                   j                  dd       dS )	Nru   z$halide_type_t(halide_type_float, 16)rv   z%halide_type_t(halide_type_bfloat, 16)zhalide_type_of<* z>())rm   replacerw   s    r   halide_typezHalideInputSpec.halide_type   sA    :: 9::$: !3!3C!< =SAAr   c                    | j                   d u S Nro   rw   s    r   	is_scalarzHalideInputSpec.is_scalar   s    zzT!!r   c                    | j                   d uS r   r   rw   s    r   	is_bufferzHalideInputSpec.is_buffer   s    zz%%r   )re   rE   re   bool)r   r   r   rg   ro   rp   rr   rs   ry   r~   r   r   r   r   r   rl   rl      sK    J
I!%E%"&F& FM "Hm"
B"&r   rl   c                  \    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ZddZy)
HalideMetazlist[HalideInputSpec]argtypesrE   targetNrq   	schedulerz$Optional[dict[str, Union[int, str]]]scheduler_flagsrK   cuda_devicec                    d| j                    g}| j                  r|j                  d| j                          | j                  rG| j                  sJ | j                  j	                         D ]  \  }}|j                  d| d|         |S )z-Command line args to pass to halide generatorztarget=zautoscheduler=zautoscheduler.=)r   r   appendr   items)rx   argskvs       r   r   zHalideMeta.args   s    $++'(>>KK.(89:>>!>,,224 61nQCq456r   c                    | j                   d uS r   )r   rw   s    r   is_cudazHalideMeta.is_cuda   s    t++r   )re   z	list[str]r   )	r   r   r   rg   r   r   r   r   r   r   r   r   r   r      s6    ##K#I}#<@O9@!%K%	,r   r   )NN) 
__future__r   collectionsri   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_WARPr6   r?   
NamedTuplerD   rl   r   r   r   r   <module>r      s<   "     " 2 
		   D t  ##v''):;< !	$ 
))+<	=< !	-( !	N 4[33	L)b  D 4 .
v(( .
b&f'' &6,"" ,r   