
    wg@                       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jP                         d        Z)d Z*d&dZ+d'dZ,d  Z- G d! d"      Z. G d# d$      Z/y)(    )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                  L    e Zd ZU dZded<   dZded<   d Zd Zed        Z	d Z
y)	AttrsDescriptorNsetdivisible_by_16
equal_to_1c                r    | j                   t               | _         | j                  t               | _        y y N)r   r   r   selfs    ]/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/triton/compiler/compiler.py__post_init__zAttrsDescriptor.__post_init__   s0    '#&5D ??"!eDO #    c                X    t        | j                        t        | j                        dS )Nr   r   )listr   r   r   s    r   to_dictzAttrsDescriptor.to_dict   s$    #'(<(<#=TRVRaRaMbccr   c           	         t        t        | j                  dg             t        | j                  dg                   S )Nr   r   r    )r   r   get)datas    r   	from_dictzAttrsDescriptor.from_dict"   s7    s488<Mr3R/S*-dhh|R.H*IK 	Kr   c                    t        | j                  j                         D cg c]  }t        |       c}      }t	        j
                  |j                  d            j                         S c c}w Nutf-8)str__dict__valuessortedhashlibsha256encode	hexdigest)r   xkeys      r   hashzAttrsDescriptor.hash'   sN    dmm&:&:&<=6!9=>~~cjj12<<>> >s   A-)__name__
__module____qualname__r   __annotations__r   r   r"   staticmethodr&   r4    r   r   r   r      s<    OSJ$d 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                p    t        j                  d|       }|dt        |j                  d            z   S | S )Nz!tt\.ptr<([^,]+)*r   )researchconvert_type_reprgroup)r2   matchs     r   rB   rB   E   s9     II)1-E&u{{1~666Hr   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   )r@   findalllenint)srcttgir_num_warps_patternnum_warps_matches	num_warpss       r   _get_num_warps_from_ir_strrM   N   sL    G 

#:C@ !Q&R(RR&%a()Ir   c                  (    e Zd ZdddZd Zd Zd Zy)	ASTSourceNc                   || _         d| _        |j                  | _        || _        || _        || _        t        | j                  t              rKt        | j                  j                  d            D ci c]  \  }}||j                          c}}| _        | j
                  t               | _        | j                  t               | _        y y c c}}w )Nr;   ,)fnextr5   name	signature	constantsattrs
isinstancer*   	enumeratesplitstripdictr   )r   rR   rU   rV   rW   kvs          r   __init__zASTSource.__init__Z   s    KK	""
dnnc*7@AUAUVYAZ7[\tq!al\DN>>!!VDN::(*DJ  ]s   6Cc                   t        | j                  j                               D cg c]  \  }}|	 }}}t        d | j                  j                         D              }| j                  j
                   d| j                  j                          d| d| }t        j                  |j                  d            j                         S c c}}w )Nc              3  <   K   | ]  \  }}t        |      |f  y wr   )r*   ).0r]   r^   s      r   	<genexpr>z!ASTSource.hash.<locals>.<genexpr>l   s     !Q$!Q3q61+!Qs   -r)   )r-   rU   itemsrV   rR   	cache_keyrW   r4   r.   r/   r0   r1   )r   r]   r^   
sorted_sigsorted_constantsr3   s         r   r4   zASTSource.hashh   s    $*4>>+?+?+A$BCDAqaC
C "!Q$..:N:N:P!QQ""#1TZZ__%6$7qAFVEWX~~cjj12<<>> Ds   Cc                6    t        | j                  | |||      S )N)contextoptionscodegen_fns)r   rR   )r   rk   rl   rj   s       r   make_irzASTSource.make_irp   s    477D'7Xcddr   c                    t               S r   )r\   r   s    r   parse_optionszASTSource.parse_optionss   s	    vr   NNreturnNoner5   r6   r7   r_   r4   rm   ro   r:   r   r   rO   rO   X   s    +?er   rO   c                  $    e Zd Zd Zd Zd Zd Zy)IRSourcec                   || _         t        |      }|j                  dd  | _        |j	                         | _        t        j                  t        | j                     | j
                  t        j                        }|j                  d      | _        |j                  d      }t        j                  t        | j                     |      }t        |      D ci c]  \  }}|t        |       c}}| _        y c c}}w )Nr   r   )pathr   suffixrS   	read_textrI   r@   rA   prototype_pattern	MULTILINErC   rT   rF   arg_type_patternrY   rB   rU   )r   rx   rD   rU   typesr]   tys          r   r_   zIRSource.__init__y   s    	Dz;;qr?>>#		+DHH5txxNKKN	KKN	

+DHH5yA@I%@PQuq"!.r22QQs   C8c                z    t        j                  | j                  j                  d            j	                         S r(   )r.   r/   rI   r0   r1   r   s    r   r4   zIRSource.hash   s'    ~~dhhoog67AACCr   c                T    t        j                  | j                  |      }||_        |S r   )r   parse_mlir_modulerx   rj   )r   rk   rl   rj   modules        r   rm   zIRSource.make_ir   s$    %%dii9 r   c                b    | j                   dk(  rdt        | j                        iS t               S )Nr<   rL   )rS   rM   rI   r\   r   s    r   ro   zIRSource.parse_options   s*    88w!;DHH!EFFvr   Nrt   r:   r   r   rv   rv   w   s    	RD
r   rv   c                 0   dd l } t        j                  j                  t        j                  j                  t        j                  j	                  t
                          }g }t        t
        d      5 }|t        j                  |j                               j                         gz  }d d d        t        j                  j                  |d      dft        j                  j                  |d      dfg}|D ]  \  }}| j                  |g|      D ]y  }t        |j                  j                  |j                        j                   d      5 }|t        j                  |j                               j                         gz  }d d d        {  t        j                         }t        t        j                  j                  |d      d      5 }	 |j                  d	      }	|	sn|j#                  |	       &	 d d d        |j%                  |j                                t        j                  j                  |d
      }
| j'                  |
g      D ]y  }t        |j                  j                  |j                        j                   d      5 }|t        j                  |j                               j                         gz  }d d d        { t(         dj                  |      z   S # 1 sw Y   =xY w# 1 sw Y   xY w# 1 sw Y   
xY w# 1 sw Y   xY w)Nr   rbcompilerztriton.compiler.r   ztriton.backends.)prefixz_C/libtriton.soi   languagerd   )pkgutilosrx   dirnameabspath__file__openr.   r/   readr1   joinwalk_packagesmodule_finder	find_specrT   originupdateappenditer_modulesr	   )r   TRITON_PATHcontentsfpath_prefixesrx   r   liblibtriton_hashchunklanguage_paths              r   
triton_keyr      s   ''//"''//"''//(2K"LMKH	h	 ;W^^AFFH-779::; 
k:	.0BC	k:	.0BCM & Cf(($(? 	CCc''11#((;BBDI CQW^^AFFH5??ABBC C	CC ^^%N	bggll;(9:D	A )QFF7OE!!%(	  	) OON,,./GGLLj9M##]O4 ?###--chh7>>E 	?1;;=>>H	? 	?? ]chhx0005; ;C C
) )	? 	?s0   46K%6K2(K?6L%K/2K<?L	L	c                    |dk(  s|dk(  rt        j                  | |      }||_        |S |dk(  s|dk(  rt        |       j	                         S |dk(  rt        |       j                         S y )Nr;   r<   llirr=   cubin)r   r   rj   r   rz   
read_bytes)	full_namerS   rj   r   s       r   parser      sl    
f}w%%i9 
f}uI((**
g~I))++ r   c                   | j                   t        | j                          | j                  t        | j                         ddg}| j                  g }4t	        fd|D              s|j                         j                  4t        ||dd       D ]  \  }}||_         |sd| _        yd|d   _        |d   | _        y)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     K   | ]6  }j                   j                  j                  j                  |      s3| 8 y wr   )tb_framef_codeco_filenameendswith)rb   r   tbs     r   rc   z#filter_traceback.<locals>.<genexpr>   s/     V2;;+=+=+I+I+R+RST+U1Vs   4??r   r   )	__cause__filter_traceback__context____traceback__anyr   tb_nextzip)e	BAD_FILESframes	cur_frame
next_framer   s        @r   r   r      s     	{{%}} ' 	-I
 
BF
.ViVVMM"ZZ .
 $'vvabz#: 'J&	' !r
 )r   c                B	   |t         j                  j                         }t        |t              sJ d       t        |      }t        | t               }|r"t        | t              sJ d       t        |       } | j                         }|j                  t        |xs
 t               fi |      }t               }t                d| j                          d|j                          d|j                          dt        t        |j                                      	}t!        j"                  |j%                  d            j'                         }t)        |      }	t*        j,                  j/                  dd      dk(  }
t*        j,                  j/                  dd      dk(  }|
rt1        | j                               nd }|rt3        | j                               nd }| j4                   d	}|	j7                  |      xs i }|j/                  |      }t*        j,                  j/                  d
d      dk(  }|s;|9t9        j:                  t=        |      j?                               }tA        | ||      S ||d|jB                  |}t               }|jE                  ||       tG        |jI                               jK                  | jL                        }|r|dz  }tO        jP                         }tO        jR                  |       |jS                  |       |jU                         }	 | jW                  |||      }t*        j,                  j/                  dd      dk(  }tG        |j                               |d  D ]  \  }} |||      }| j4                   d| }|	j]                  ||      ||<   ||j]                  ||       |=|j_                  |      r,ta        d|        |jc                  |      }te        |||      }|r5|dk(  r0|	jc                  |      }|jg                  |       ta        d|        |} |	j]                  t9        jh                  |tj              |d      ||<   |	jm                  ||       tA        | ||      S # tX        $ r}t[        |        d }~ww xY w)Nz target must be of GPUTarget typez'source must be either AST or a filepathrd   r)   TRITON_KERNEL_OVERRIDE01TRITON_KERNEL_DUMP.jsonTRITON_ALWAYS_COMPILE)r4   targetr   USE_TTGIR_LOC.z
Overriding kernel with file r<   zCreate new locations for )defaultF)binary)7r   activeget_current_targetrX   r   make_backendrO   r*   rv   ro   r\   r   r   r4   r-   re   r.   r/   r0   r1   r   r   environr$   r   r   rT   	get_groupjsonloadsr   rz   CompiledKernelr+   
add_stagesr!   keysindexrS   r   rj   load_dialectsget_codegen_implementationrm   	Exceptionr   puthas_fileprintget_filer   create_location_snapshotdumpsvars	put_group) rI   r   rk   backend	ir_sourceextra_optionsenv_varsr3   r4   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_stagerj   rl   r   r   use_ttgir_locrS   
compile_irnext_moduleir_filenamer   ttgir_full_names                                    r   compiler      s5   ~113fi(L*LL(6"GsI..I#s#N%NN#sm%%'M##D):DF$Lm$LMG.0H\N!CHHJ<q(8',,.9I3vV^VdVdVfOgKhJi
jC>>#**W-.88:D(. jjnn%=sCsJOZZ^^$8#>#EN>M.sxxz:SW6D&sxxz2$O88*E*%//0ABHbN"&&'89MZZ^^$;SASHNm7::d=1;;=>c>488  

 	H VFvw'v{{}%++CGG4KqjjlGW'"446KWk7; JJNN?C8C?M/= Z 2
!C5)&6&:&:;&T{#&[9+0C0L0L[0Y2;-@A+44[AI	38KSG^.77DO00A-o->?@" )9(<(<TZZZ^=_arDI )= )KN$%0.A#~t443  s    R 	RRRc                   t        j                         D cg c]*  }|j                  j                  |       s|j                  , }}t	        |      dk7  r't        t	        |       d| j                   d| d       |d   |       S c c}w )Nr   z! compatible backends for target (z) (z). There should only be one.r   )r   r,   r   supports_targetrG   RuntimeErrorr   )r   r2   activess      r   r   r   1  s    #+??#4[a

8R8RSY8Zqzz[G[
7|q7|n=fnn=MSQXPYYuvx 	x71:f	 \s
    BBc                       e Zd Zd ZddZd Zy)LazyDictc                     || _         g | _        y r   )r%   extras)r   r%   s     r   r_   zLazyDict.__init__;  s    	r   c                    | j                   D ]  \  }}| j                   || z  | _         | j                   j                          | j                  S r   )r   r%   clearr   funcargss      r   r$   zLazyDict.get?  sG    ++ 	0JD$		D$K/DI	0yyr   c                >    | j                   j                  ||f       y r   )r   r   r   s      r   addzLazyDict.addE  s    D$<(r   Nrq   )r5   r6   r7   r_   r$   r  r:   r   r   r   r   9  s    )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 |j                         D              }t	        j
                  |j                               }t        |d         |d<   |d   }t        |d   |d   |d         |d<    |d	t        t        |j                                           } |di || _        t        | j                  j                        }	|	j                  | j                        | _        || _        || _        | j                  j&                  | _        |j                         D 
cg c]"  \  }
}|
j)                  d
      rt+        |      $ }}
}|	j,                  }|D ci c]B  }|j.                  dd  |j.                  dd  |k(  r|j1                         n|j                         D c}| _        | j2                  |   | _        d | _        d | _        y c c}}
w c c}w )Nr   )
namedtuplec              3  \   K   | ]$  \  }}|j                  d       st        |       & yw)r   N)r   r   )rb   cps      r   rc   z*CompiledKernel.__init__.<locals>.<genexpr>R  s$     `$!QAJJW^L_d1g`s   ,,cluster_dimsr   r   arch	warp_sizeKernelMetadatar   r   r:   )collectionsr  nextre   r   r   rz   tupler   r-   r!   r   r   r   r   pack_metadatapacked_metadatarI   r4   rT   r   r   
binary_extry   r   asmkernelr   function)r   rI   r   r4   r  r   r   r   r  r   r  r  	asm_filesr  files                  r   r_   zCompiledKernel.__init__P  s   *`.2F2F2H`a::m5578#(.)A#B (#&vi'8&.&Q\J]^#$4fT(--/=R6ST&22t}}334&44T]]C	MM&&	)7)=)=)?[AqzzRYGZT!W[	[''
 "
 KKO$++ab/Z2OT__.UYUcUcUee
 hhz*  \
s   *GG$AGc                r   | j                   y t        j                  j                         }t        j                  j	                  | j
                  | j                        | _        t        j                  j                  j                  |      d   }| j                  j                  |kD  r!t        | j                  j                  |d      t        j                  j                  j                  | j                  | j                  | j                  j                  |      \  | _         | _        | _        | _        y )Nmax_shared_memzshared memory)r   r   r   get_current_devicelauncher_clsrI   r   runutilsget_device_propertiessharedr
   load_binaryrT   r  r  n_regsn_spills)r   device
max_shareds      r   _init_handleszCompiledKernel._init_handlesm  s    ;;"113==--dhhF]]((>>vFGWX
==*, !5!5z?SSAGATATA`A`IIt{{DMM$8$8&BB>T]DKr   c                L    |dk(  r| j                          t        | 	  |      S )Nr  )r%  super__getattribute__)r   rT   	__class__s     r   r(  zCompiledKernel.__getattribute__{  s&    5= w'--r   c                b   t         j                  y t        | j                  | j                  |d      }t        | j                  t              r | j                  j                  j                  |S i }d}t        | j                  j                  j                        D ]Q  \  }}|| j                  j                  j                  v r| j                  j                  |   ||<   E||   ||<   |dz  }S |j                  | j                  j                  j                  || j                  |f       |S )N)rT   r  streamr   r   )r   launch_enter_hookr   rT   r  rX   rI   rO   rR   launch_metadatarY   	arg_names
constexprsrV   r  r   )	r   gridr+  r   retarg_dictarg_idxiarg_names	            r   r-  zCompiledKernel.launch_metadata  s    ++3		t}}PVWX$((I.$((++2M2M2UJ$TXX[[%:%:; 	KAxDHHKK***%)XX%7%7%A"%)']"1	 	++dDMM8-LM
r   c                <      j                          d d fd
}|S )N)r+  c                T   | =t         j                  j                         }t         j                  j                  |      }  j                  | g| } j
                  d   d   d   | j                  j                  |t        j                  t        j                  g	|  y )Nr   r   r   )r   r   r  get_current_streamr-  r  r  r  r   r,  launch_exit_hook)r+  r   r#  r-  r0  r   s       r   runnerz*CompiledKernel.__getitem__.<locals>.runner  s    ~99;99&A2d224G$GODHHT!Wd1gtAwtG[G[]l#55~7V7V_Y]_r   )r%  )r   r0  r:  s   `` r   __getitem__zCompiledKernel.__getitem__  s    !% 	_ r   )r5   r6   r7   r,  r9  r_   r%  r(  r-  r;  __classcell__)r)  s   @r   r   r   I  s+     :B.
"r   r   )rI   r*   )r   BaseExceptionrp   )0
__future__r   r.   r   _C.libtritonr   r   r   backends.compilerr    r	   runtime.autotunerr
   runtime.cacher   r   r   runtime.driverr   dataclassesr   code_generatorr   pathlibr   r@   	functoolsr   r   mlir_prototype_patternptx_prototype_patternr{   mlir_arg_type_patternptx_arg_type_patternr}   rB   rM   rO   rv   	lru_cacher   r   r   r   r   r   r   r:   r   r   <module>rN     s    "   >  )  . U U # ! '  	  	 ? ? ?> ] X "#   < + !"  > 6 1 1D,$DL5^) ) S Sr   