
    çg@                       d dl mZ d dlZd dlZddlmZmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ dd	lmZmZmZ dd
lmZ d dlmZ ddlmZ d dlmZ d dlZd dlZd dlZe G d d                      ZdZdZeeedZ dZ!dZ"e!e!e"dZ#d Z$d)dZ% G d d          Z& G d d          Z' ej(                    d             Z)d Z*d*d"Z+d+d#Z,d$ Z- G d% d&          Z. G d' d(          Z/dS ),    )annotationsN   )get_cache_invalidating_env_varsir)backends)	GPUTarget)__version__)OutOfResources)get_cache_managerget_dump_managerget_override_manager)driver)	dataclass   )ast_to_ttir)Pathc                  T    e Zd ZU dZded<   dZded<   d Zd Zed             Z	d Z
dS )	AttrsDescriptorNsetdivisible_by_16
equal_to_1c                r    | j         t                      | _         | j        t                      | _        d S d S N)r   r   r   selfs    T/var/www/html/ai-engine/env/lib/python3.11/site-packages/triton/compiler/compiler.py__post_init__zAttrsDescriptor.__post_init__   s6    '#&55D ?"!eeDOOO #"    c                T    t          | j                  t          | j                  dS )Nr   r   )listr   r   r   s    r   to_dictzAttrsDescriptor.to_dict   s'    #'(<#=#=TRVRaMbMbcccr   c           	         t          t          |                     dg                     t          |                     dg                               S )Nr   r   r    )r   r   get)datas    r   	from_dictzAttrsDescriptor.from_dict"   sO    s488<Mr3R3R/S/S*-dhh|R.H.H*I*IK K K 	Kr   c                    t          d | j                                        D                       }t          j        |                    d                                                    S )Nc                ,    g | ]}t          |          S  )sorted).0xs     r   
<listcomp>z(AttrsDescriptor.hash.<locals>.<listcomp>(   s    ===6!99===r   utf-8)str__dict__valueshashlibsha256encode	hexdigest)r   keys     r   hashzAttrsDescriptor.hash'   sT    ==dm&:&:&<&<===>>~cjj1122<<>>>r   )__name__
__module____qualname__r   __annotations__r   r   r"   staticmethodr&   r7   r)   r   r   r   r      s         OJ$ $ $d d d K K \K? ? ? ? ?r   r   z^\s*tt\.func\s+(?:public\s+)?(@\w+)(\((?:%\w+: [\S\s]+(?: \{\S+ = \S+ : \S+\})?(?:, )?)*\))\s*(attributes \{[\S\s]+\})?\s+\{\s*$z=\.(?:visible|extern)\s+\.(?:entry|func)\s+(\w+)\s*\(([^)]*)\))ttirttgirptxz %\w+: ((?:[^,\s<)]+|<[^>]+>)+),?z\.param\s+\.(\w+)c                ~    t          j        d|           }|%dt          |                    d                    z   S | S )Nz!tt\.ptr<([^,]+)*r   )researchconvert_type_reprgroup)r,   matchs     r   rD   rD   E   s?     I)1--E&u{{1~~6666Hr   srcr/   c                    d}t          j        ||           }t          |          dk    s
J d            t          |d                   }|S )Nz&"triton_gpu.num-warps"\s?=\s?(\d+)\s?:r   z(Expected exactly one match for num_warpsr   )rB   findalllenint)rG   ttgir_num_warps_patternnum_warps_matches	num_warpss       r   _get_num_warps_from_ir_strrO   N   sY    G 
#:C@@ !!Q&&&(R&&&%a())Ir   c                  *    e Zd Zdd	dZd Zd Zd ZdS )
	ASTSourceNreturnNonec                p   || _         d| _        |j        | _        || _        || _        || _        t          | j        t                    r6d t          | j        
                    d                    D             | _        | j        t                      | _        | j        t                      | _        d S d S )Nr=   c                >    i | ]\  }}||                                 S r)   )stripr+   kvs      r   
<dictcomp>z&ASTSource.__init__.<locals>.<dictcomp>b   s&    \\\tq!a\\\r   ,)fnextr8   name	signature	constantsattrs
isinstancer/   	enumeratesplitdictr   )r   r\   r_   r`   ra   s        r   __init__zASTSource.__init__Z   s    K	""
dnc** 	]\\yAUAUVYAZAZ7[7[\\\DN>!!VVDN:(**DJJJ r   c                   d t          | j                                                  D             }t          d | j                                        D                       }| j        j         d| j                                         d| d| }t          j	        |
                    d                                                    S )Nc                    g | ]\  }}|S r)   r)   rW   s      r   r-   z"ASTSource.hash.<locals>.<listcomp>i   s    CCCDAqaCCCr   c              3  >   K   | ]\  }}t          |          |fV  d S r   )r/   rW   s      r   	<genexpr>z!ASTSource.hash.<locals>.<genexpr>l   s0      !Q!Q$!Q3q661+!Q!Q!Q!Q!Q!Qr   -r.   )r*   r_   itemsr`   r\   	cache_keyra   r7   r2   r3   r4   r5   )r   
sorted_sigsorted_constantsr6   s       r   r7   zASTSource.hashh   s    CCF4>+?+?+A+A$B$BCCC
 "!Q!Q$.:N:N:P:P!Q!Q!QQQ"XXTZ__%6%6XXXXFVXX~cjj1122<<>>>r   c                4    t          | j        | |||          S )N)contextoptionscodegen_fns)r   r\   )r   rr   rs   rq   s       r   make_irzASTSource.make_irp   s    47D'7Xcddddr   c                    t                      S r   )re   r   s    r   parse_optionszASTSource.parse_optionss   s    vvr   NNrR   rS   r8   r9   r:   rf   r7   rt   rv   r)   r   r   rQ   rQ   X   s]        + + + + +? ? ?e e e    r   rQ   c                  &    e Zd Zd Zd Zd Zd ZdS )IRSourcec                   || _         t          |          }|j        dd          | _        |                                | _        t          j        t          | j                 | j        t          j	                  }|
                    d          | _        |
                    d          }t          j        t          | j                 |          }d t          |          D             | _        d S )Nr   r   c                4    i | ]\  }}|t          |          S r)   )rD   )r+   rX   tys      r   rZ   z%IRSource.__init__.<locals>.<dictcomp>   s'    QQQuq"!.r22QQQr   )pathr   suffixr]   	read_textrG   rB   rC   prototype_pattern	MULTILINErE   r^   rI   arg_type_patternrc   r_   )r   r   rF   r_   typess        r   rf   zIRSource.__init__y   s    	Dzz;qrr?>>##	+DH5txNNKKNN	KKNN	
+DH5yAAQQ	%@P@PQQQr   c                ~    t          j        | j                            d                                                    S )Nr.   )r2   r3   rG   r4   r5   r   s    r   r7   zIRSource.hash   s,    ~dhoog6677AACCCr   c                H    t          j        | j        |          }||_        |S r   )r   parse_mlir_moduler   rq   )r   rr   rs   rq   modules        r   rt   zIRSource.make_ir   s"    %di99 r   c                `    | j         dk    rdt          | j                  iS t                      S )Nr>   rN   )r]   rO   rG   re   r   s    r   rv   zIRSource.parse_options   s.    8w!;DH!E!EFFvvr   Nry   r)   r   r   r{   r{   w   sV        	R 	R 	RD D D  
    r   r{   c                    dd l } t          j                            t          j                            t          j                            t
                                        }g }t          t
          d          5 }|t          j        |	                                          
                                gz  }d d d            n# 1 swxY w Y   t          j                            |d          dft          j                            |d          dfg}|D ]\  }}|                     |g|          D ]}t          |j                            |j                  j        d          5 }|t          j        |	                                          
                                gz  }d d d            n# 1 swxY w Y   t          j                    }t          t          j                            |d          d          5 }	 |	                    d
          }	|	sn|                    |	           .	 d d d            n# 1 swxY w Y   |                    |
                                           t          j                            |d          }
|                     |
g          D ]}t          |j                            |j                  j        d          5 }|t          j        |	                                          
                                gz  }d d d            n# 1 swxY w Y   t(           d                    |          z   S )Nr   rbcompilerztriton.compiler.r   ztriton.backends.)prefixz_C/libtriton.soTi   languagerk   )pkgutilosr   dirnameabspath__file__openr2   r3   readr5   joinwalk_packagesmodule_finder	find_specr^   originupdateappenditer_modulesr	   )r   TRITON_PATHcontentsfpath_prefixesr   r   liblibtriton_hashchunklanguage_paths              r   
triton_keyr      s   NNN'//"'//"'//(2K2K"L"LMMKH	h		 ;W^AFFHH--7799::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; 
k:	.	.0BC	k:	.	.0BCM & C Cf(($(?? 	C 	CCc'11#(;;BDII CQW^AFFHH55??AABBC C C C C C C C C C C C C C C	C
 ^%%N	bgll;(9::D	A	A )Q	)FF7OOE !!%(((		) 	) ) ) ) ) ) ) ) ) ) ) ) ) ) ) OON,,..///GLLj99M##]O44 ? ?##--ch77>EE 	?11;;==>>H	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?chhx0000sH   :=CC
C%=F..F25F2<0H99H= H==LL"	%L"	c                   |dk    s|dk    rt          j        | |          }||_        |S |dk    s|dk    r!t          |                                           S |dk    r!t          |                                           S d S )Nr=   r>   llirr?   cubin)r   r   rq   r   r   
read_bytes)	full_namer]   rq   r   s       r   parser      s    
f}}w%i99 
f}}uI((***
g~~I))+++ ~r   eBaseExceptionc                   | j         t          | j                    | j        t          | j                   ddg}| j        g }9t	          fd|D                       s|                               j        9t          ||dd                   D ]\  }}||_        |s	d| _        dS d|d         _        |d         | _        dS )z
    Removes code_generator.py and related files from tracebacks.

    These are uninteresting to the user -- "just show me *my* code!"
    Nz"/triton/compiler/code_generator.pyz/ast.pyc              3  d   K   | ]*}j         j        j                            |          &|V  +d S r   )tb_framef_codeco_filenameendswith)r+   r   tbs     r   rj   z#filter_traceback.<locals>.<genexpr>   s?      VV2;+=+I+R+RST+U+UV1VVVVVVr   r   r   )	__cause__filter_traceback__context____traceback__anyr   tb_nextzip)r   	BAD_FILESframes	cur_frame
next_framer   s        @r   r   r      s     	{%%%} ''' 	-I
 
BF
.VVVViVVVVV 	MM"Z .
 $'vvabbz#:#: ' 'J&	 $!r
 )r   c                
   |t           j                                        }t          |t                    s
J d            t          |          }t          | t                     }|r.t          | t                    s
J d            t          |           } | 	                                }|	                    t          |pt                      fi |          }t                      }t                       d|                                  d|                                 d|                                 dt          t          |                                                     	}t!          j        |                    d                                                    }t)          |          }	t*          j                            dd          dk    }
t*          j                            dd          dk    }|
r!t1          |                                           nd }|r!t3          |                                           nd }| j         d	}|	                    |          pi }|                    |          }t*          j                            d
d          dk    }|sF|Dt9          j        t=          |                                                    }tA          | ||          S ||d|j!        |}t                      }|"                    ||           tG          |$                                          %                    | j&                  }|r|dz  }tO          j(                    }tO          j)        |           |)                    |           |*                                }	 | +                    |||          }n"# tX          $ r}t[          |            d }~ww xY wt*          j                            dd          dk    }tG          |                                          |d          D ]\  }} |||          }| j         d| }|	.                    ||          ||<   ||.                    ||           |M|/                    |          r8ta          d|            |1                    |          }te          |||          }|rB|dk    r<|	1                    |          }|3                    |           ta          d|            |}|	.                    t9          j4        |tj                    |d          ||<   |	6                    ||           tA          | ||          S )Nz target must be of GPUTarget typez'source must be either AST or a filepathrk   r.   TRITON_KERNEL_OVERRIDE01TRITON_KERNEL_DUMP.jsonTRITON_ALWAYS_COMPILE)r7   targetr   USE_TTGIR_LOC.z
Overriding kernel with file r>   zCreate new locations for )defaultF)binary)7r   activeget_current_targetrb   r   make_backendrQ   r/   r{   rv   re   r   r   r7   r*   rl   r2   r3   r4   r5   r   r   environr$   r   r   r^   	get_groupjsonloadsr   r   CompiledKernelr0   
add_stagesr!   keysindexr]   r   rq   load_dialectsget_codegen_implementationrt   	Exceptionr   puthas_fileprintget_filer   create_location_snapshotdumpsvars	put_group) rG   r   rr   backend	ir_sourceextra_optionsenv_varsr6   r7   fn_cache_managerenable_overrideenable_ir_dumpfn_override_managerfn_dump_managermetadata_filenamemetadata_groupmetadata_pathalways_compilemetadatastagesfirst_stagerq   rs   r   r   use_ttgir_locr]   
compile_irnext_moduleir_filenamer   ttgir_full_names                                    r   compiler      sB   ~1133fi((LL*LLLL6""GsI...I #s##NN%NNNNsmm%%''M##D):DFF$L$Lm$L$LMMG.00H\\
j
jCHHJJ
j
j
j
j',,..
j
j3vV^VdVdVfVfOgOgKhKh
j
jC>#**W--..88::D(.. jnn%=sCCsJOZ^^$8#>>#EN>MW.sxxzz:::SW6DN&sxxzz222$O8***%//0ABBHbN"&&'899MZ^^$;SAASHN 9m7:d=11;;==>>c>4888   
 	H VVFvw'''v{{}}%%++CG44K qjllGW'"""4466KWk7;;    JNN?C88C?M//=  Z j22))C))&6&:&:;&T&T{#&[999+0C0L0L[0Y0Y+@;@@AAA+44[AAI	388K 	ASG^^.77DDO00AAA?o??@@@(8(<(<TZZ^=_=_=_arDI )= )K )KN$%0.AAA#~t444s   "N: :
OOOc                      fdt          j                    D             }t          |          dk    r*t          t          |           d j         d| d           |d                    S )Nc                R    g | ]#}|j                                       |j         $S r)   )r   supports_target)r+   r,   r   s     r   r-   z make_backend.<locals>.<listcomp>2  s1    [[[a
8R8RSY8Z8Z[qz[[[r   r   z! compatible backends for target (z) (z). There should only be one.r   )r   r1   rJ   RuntimeErrorr   )r   activess   ` r   r   r   1  s    [[[[8?#4#4[[[G
7||q7||vvfnvvQXvvvx x 	x71:fr   c                  "    e Zd Zd ZddZd ZdS )LazyDictc                "    || _         g | _        d S r   )r%   extras)r   r%   s     r   rf   zLazyDict.__init__;  s    	r   rR   rS   c                    | j         D ]\  }}| j         || z  | _        | j                                          | j        S r   )r  r%   clearr   funcargss      r   r$   zLazyDict.get?  sI    + 	0 	0JD$	DD$K/DIIyr   c                >    | j                             ||f           d S r   )r  r   r  s      r   addzLazyDict.addE  s"    D$<(((((r   Nrx   )r8   r9   r:   rf   r$   r
  r)   r   r   r  r  9  sF             ) ) ) ) )r   r  c                  >     e Zd ZdZdZd Zd Z fdZd Zd Z	 xZ
S )r   Nc           	     *   ddl m} t          d |                                D                       }t	          j        |                                          }t          |d                   |d<   |d         }t          |d         |d         |d                   |d<    |d	t          t          |                                                              } |di || _        t          | j        j                  }	|	                    | j                  | _        || _        || _        | j        j        | _        d
 |                                D             }
|	j        fd|
D             | _        | j                 | _        d | _        d | _        d S )Nr   )
namedtuplec              3  d   K   | ]+\  }}|                     d           t          |          V  ,dS )r   Nr   r   r+   cps      r   rj   z*CompiledKernel.__init__.<locals>.<genexpr>R  s>      ``$!QAJJW^L_L_`d1gg``````r   cluster_dimsr   r   arch	warp_sizeKernelMetadatac                \    g | ])\  }}|                     d           t          |          *S )r   r  r  s      r   r-   z+CompiledKernel.__init__.<locals>.<listcomp>`  s4    [[[AqzzRYGZGZ[T!WW[[[r   c                    i | ]K}|j         d d         |j         d d         k    r|                                n|                                LS )r   N)r   r   r   )r+   file
binary_exts     r   rZ   z+CompiledKernel.__init__.<locals>.<dictcomp>b  se     
 
 
 KO$+abb/Z2O2OT__...UYUcUcUeUe
 
 
r   r)   )collectionsr  nextrl   r   r   r   tupler   r*   r!   r   r   r   r   pack_metadatapacked_metadatarG   r7   r^   r  asmkernelr   function)r   rG   r   r7   r  r   r   r   r  r   	asm_filesr  s              @r   rf   zCompiledKernel.__init__P  s   ******``.2F2F2H2H```aa:m557788#(.)A#B#B (#&vi'8&.&Q\J]^^#$4fT(--//=R=R6S6STT&2222t}344&44T]CC	M&	[[)=)=)?)?[[[	'

 
 
 
!
 
 
 hz* r   c                   | j         d S t          j                                        }t          j                            | j        | j                  | _        t          j        j        	                    |          d         }| j        j
        |k    rt          | j        j
        |d          t          j        j                            | j        | j        | j        j
        |          \  | _         | _        | _        | _        d S )Nmax_shared_memzshared memory)r   r   r   get_current_devicelauncher_clsrG   r   runutilsget_device_propertiessharedr
   load_binaryr^   r!  r"  n_regsn_spills)r   device
max_shareds      r   _init_handleszCompiledKernel._init_handlesm  s    ;"F1133=--dhFF](>>vFFGWX
=*,, !5z?SSSAGATA`A`It{DM$8&BB BB>T]DKr   c                z    |dk    r|                                   t                                          |          S )Nr(  )r1  super__getattribute__)r   r^   	__class__s     r   r4  zCompiledKernel.__getattribute__{  s6    5==   ww''---r   c                   t           j        d S t          | j        | j        |d          }t          | j        t                    r| j        j        j	        |S i }d}t          | j        j        j                  D ]>\  }}|| j        j        j        v r| j        j        |         ||<   .||         ||<   |dz  }?|                    | j        j        j	        || j        |f           |S )N)r^   r"  streamr   r   )r   launch_enter_hookr  r^   r"  rb   rG   rQ   r\   launch_metadatarc   	arg_names
constexprsr`   r
  r   )	r   gridr7  r  retarg_dictarg_idxiarg_names	            r   r9  zCompiledKernel.launch_metadata  s    +34	t}PVWWXX$(I.. 	$(+2M2UJ$TX[%:;; 	 	KAxDHK***%)X%7%A""%)']"1+dDM8-LMMM
r   c                D                                        d d fd
}|S )N)r7  c                0   | =t           j                                        }t           j                            |          }  j        | g|R  } j        d         d         d         | j        j        |t          j	        t          j
        g	|R   d S )Nr   r   r   )r   r   r&  get_current_streamr9  r(  r"  r  r   r8  launch_exit_hook)r7  r  r/  r9  r<  r   s       r   runnerz*CompiledKernel.__getitem__.<locals>.runner  s    ~99;;99&AA2d24G$GGGODHT!Wd1gtAwtG[]l#5~7V_Y]_ _ _ _ _ _r   )r1  )r   r<  rF  s   `` r   __getitem__zCompiledKernel.__getitem__  sP    !% 	_ 	_ 	_ 	_ 	_ 	_ 	_ 	_ r   )r8   r9   r:   r8  rE  rf   r1  r4  r9  rG  __classcell__)r5  s   @r   r   r   I  s           :B B B. . . . .
  "      r   r   )rG   r/   )r   r   rw   )0
__future__r   r2   r   _C.libtritonr   r   r   backends.compilerr    r	   runtime.autotunerr
   runtime.cacher   r   r   runtime.driverr   dataclassesr   code_generatorr   pathlibr   rB   	functoolsr   r   mlir_prototype_patternptx_prototype_patternr   mlir_arg_type_patternptx_arg_type_patternr   rD   rO   rQ   r{   	lru_cacher   r   r   r   r   r  r   r)   r   r   <module>rY     s   " " " " " "   > > > > > > > >       ) ) ) ) ) )       . . . . . . U U U U U U U U U U # # # # # # ! ! ! ! ! ! ' ' ' ' ' '       				     				 ? ? ? ? ? ? ? ?> ] X "#    < + !"              >       6 1 1 1D, , ,$ $ $ $DL5 L5 L5 L5^  ) ) ) ) ) ) ) ) S S S S S S S S S Sr   