
    sgi5              
       $   d dl Z d dlZd dlmZmZ d dlmZmZmZ  G d d      Z	dee
   fdZde
fdZ G d	 d
e      Z G d de      Z G d d      ZdgZde
de
de
de
ddf
dZedk(  r e j&                         Zej+                  dddd       ej+                  ddd       ej+                  ddd       ej+                  ddd d!       ej-                         Z eej0                  ej2                  ej4                  ej6                         yy)"    N)ABCabstractmethod)DictListOptionalc                       e Zd ZU eed<   eed<   eed<   ee   ed<   ee   ed<   dededed	ee   d
ee   ddfdZedefd       Zedefd       Z	edefd       Z
edee   fd       Zedee   fd       Zy)Symbol_name_op_name	_ret_type
_arg_names
_arg_typesnameop_nameret_type	arg_names	arg_typesreturnNc                 n    || _         || _        || _        t        |      | _        t        |      | _        y)a#  
        A symbol is a function declaration.
        :param name: name of the symbol
        :param op_name: name of the operation
        :param ret_type: return type of the operation
        :param arg_names: names of the arguments
        :param arg_types: types of the arguments
        N)r
   r   r   listr   r   )selfr   r   r   r   r   s         L/var/www/html/venv/lib/python3.12/site-packages/triton/tools/build_extern.py__init__zSymbol.__init__   s/      
!y/y/    c                     | j                   S Nr
   r   s    r   r   zSymbol.name$       zzr   c                     | j                   S r   )r   r   s    r   r   zSymbol.op_name(       }}r   c                     | j                   S r   )r   r   s    r   r   zSymbol.ret_type,       ~~r   c                     | j                   S r   )r   r   s    r   r   zSymbol.arg_names0       r   c                     | j                   S r   )r   r   s    r   r   zSymbol.arg_types4   r%   r   )__name__
__module____qualname__str__annotations__r   r   propertyr   r   r   r   r    r   r   r	   r	      s    JMNS	S	** * 	*
 9* 9* 
*, c      #   49   49  r   r	   r   c                 L    | dk(  ry| dk(  ry| dk(  ry| dk(  ry| d	k(  ry
| dk(  ryy )Ni32int32u32uint32i64int64u64uint64floatfp32doublefp64r-   type_strs    r   convert_typer=   9   sI    5	U		U		U		W		X	 r   c                     | dk(  ry| dk(  ry| S )Nr0   r2   r4   r6   r-   r;   s    r   to_unsignedr?   K   s    7	W	r   c                       e Zd ZU eed<   eed<   eeef   ed<   eed<   eed<   	 	 ddededed	ed
df
dZe	d
efd       Z
e	d
efd       Ze	d
eeef   fd       Ze	d
efd       Zedd       Zed
efd       ZddZy)ExternLibraryr
   _path_symbols_format	_groupingr   pathformatgroupingr   Nc                 J    || _         || _        i | _        || _        || _        y)z
        Abstract class for extern library.
        :param name: name of the library
        :param path: path of the library
        :param format: whether to format the generated stub file
        N)r
   rB   rC   rD   rE   )r   r   rF   rG   rH   s        r   r   zExternLibrary.__init__[   s'     

!r   c                     | j                   S r   r   r   s    r   r   zExternLibrary.namen   r   r   c                     | j                   S r   rB   r   s    r   rF   zExternLibrary.pathr   r   r   c                     | j                   S r   )rC   r   s    r   symbolszExternLibrary.symbolsv   r!   r   c                     | j                   S r   )rE   r   s    r   rH   zExternLibrary.groupingz   r#   r   c                      y r   r-   )r   
input_files     r   parse_symbolszExternLibrary.parse_symbols~       r   c                      y r   r-   r   s    r   _output_stubszExternLibrary._output_stubs   rS   r   c                    | j                         }|t        |      dk(  rt        d      | d| j                   d}t	        |d      5 }|j                  |       |j                          | j                  rmt        j                  dddd	|gt        j                  
      j                          t        j                  d|gt        j                  
      j                          d d d        y # 1 sw Y   y xY w)Nr   zfile_str is empty/z.pywautopep8z-az-rz-istdoutisort)rU   len	Exceptionr
   openwritecloserD   
subprocessPopenPIPEcommunicate)r   
output_dirfile_stroutput_filefs        r   generate_stub_filez ExternLibrary.generate_stub_file   s    %%'s8}1/00#Adjj\5+s# 	_qGGHGGI||  *dD$!LU_UdUdeqqs  ';!7
P\\^	_ 	_ 	_s   
BC..C7)TTr   N)r'   r(   r)   r*   r+   r   r	   boolr   r,   r   rF   rN   rH   r   rR   rU   rj   r-   r   r   rA   rA   T   s   JJ3;MO "" " 	"
 " 
"& c   c   c6k*   $     s  _r   rA   c                   t     e Zd ZU eeee   f   ed<   d fdZe	de
e   fd       ZddZddZdefdZ xZS )		Libdevice_symbol_groupsr   c                 B    t         |   d|       i | _        d| _        y)z_
        Constructor for Libdevice.
        :param path: path of the libdevice library
        	libdeviceTN)superr   ro   is_pure)r   rF   	__class__s     r   r   zLibdevice.__init__   s#    
 	d+ r   c                    | j                  d      }|d   }|d   }|j                         }|d   dk(  ry t        |d         }|y |j                  d      }|d   j                  dd      }|j                  dd      }d|v ry |d   j                  d	      }	g }
g }t        |	      D ]U  \  }}t        |j                         d         }| y d
t	        |      z   }|
j                  |       |j                  |       W |dk(  rt        |
d         |
d<   n=|j                  d      r,t        |      }t        |
      D ]  \  }}t        |      |
|<    t        |||||
      S )N@r      internal( __nv_ieee,argsadu)	splitr=   replace	enumerater*   appendr?   
startswithr	   )lineentriesret_strfunc_strret_strsr   	func_strs	func_namer   arg_strsr   r   iarg_strarg_typearg_names                   r   _extract_symbolzLibdevice._extract_symbol   s    **S/!*1:==?A;*$,NN3'	aL((b1	##GR0WQ<%%c*		#H- 	'JAw#GMMOA$67Hs1v~HX&X&	' e'	"6IbM$ #8,H(3 58*84	!5i(IyIIr   c                 6   i }| j                   j                         D ]  }|j                  }|||<    i ddddddddd	dd
dddddddddddddddddddddddi dd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d2d4d5d6d5d7d8d9d8d:d;d<d;i d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOddPddQdRdSdTdUdVdWdXdYdZd[d\i d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdldndodpdodqdrdsdtdudvdwdxdydzd{d|i d}d~ddddddddddddddddddddddddddddddddi ddddddddddddddddddddddddddddddddddi ddddddddddddddddddddddddœddœddȓddʓdd̓ddΓi ddГddғddԓdd֓ddؓddړddܓddޓddޓddddddddddddddddi ddddddddddddddddddddddddd ddddddddd	d
dd}| j                   j                         D ][  }|j                  }||v r||   }||_        || j                  v r| j                  |   j                  |       L|g| j                  |<   ] y (  Nllabsabsacosfacosacoshfacoshdadd_rdadd_rdfadd_rddadd_rnadd_rnfadd_rndadd_ruadd_rufadd_rudadd_rzadd_rzfadd_rzasinfasinasinhfasinhatanfatanatan2fatan2atanhfatanhbrevllbrevcbrtfcbrtceilfceilclzllclz	copysignfcopysigncosfcoscoshfcoshcospifcospicyl_bessel_i0fcyl_bessel_i0cyl_bessel_i1fcyl_bessel_i1fdiv_rddiv_rdddiv_rdfdiv_rndiv_rnddiv_rnfdiv_rudiv_ruddiv_rufdiv_rzdiv_rzddiv_rzerfferferfcferfcerfcinvferfcinverfcxferfcxerfinvferfinvexpfexpexp10fexp10exp2fexp2expm1fexpm1fabsffabsfast_fdivideffast_divideffdimffdimffsllffsfloorffloorfmaffmafmaf_rdfma_rdfmaf_rnfma_rnfmaf_rufma_rufmaf_rzfma_rzfmodffmoduhaddhaddhypotfhypotilogbfilogbisinffisinfisinfdisnanfisnanisnandj0fj0j1fj1jnfjnldexpfldexplgammaflgammallrintfllrintllroundfllroundlogfloglog10flog10log1pflog1plog2flog2logbflogbumaxmaxllmaxullmaxfmaxffmaxuminminllminullminfminffmindmul_rdmul_rdfmul_rddmul_rnmul_rnfmul_rndmul_rumul_rufmul_rudmul_rzmul_rzfmul_rzumul24mul24umulhimulhimul64hiumul64hi
nearbyintf	nearbyint
nextafterf	nextafternorm3dfnorm3dnorm4dfnorm4dnormcdffnormcdfnormcdfinvf
normcdfinvpopcllpopcpowifpowpowipowfrcbrtfrcbrtfrcp_rdrcp_rddrcp_rdfrcp_rnrcp_rndrcp_rnfrcp_rurcp_rudrcp_rufrcp_rzrcp_rzdrcp_rz
remainderf	remainderurhaddrhaddrhypotfrhypotrintfrintrnorm3dfrnorm3drnorm4dfrnorm4droundfroundrsqrtfrsqrt	frsqrt_rnrsqrt_rnusadr   scalbnfscalbnsignbitfsignbitsignbitdsinfsinsinhfsinhsinpifsinpisqrtfsqrtfsqrt_rdsqrt_rddsqrt_rdfsqrt_rnsqrt_rndsqrt_rnfsqrt_rusqrt_rudsqrt_rufsqrt_rzsqrt_rzdsqrt_rzfsub_rdsub_rddsub_rdfsub_rnsub_rndsub_rnfsub_rusub_rudsub_rufsub_rzsub_rzdsub_rztanftantanhftanhtgammaftgammatruncftruncy0fy0y1yn)y1fynf)rC   valuesr   r   ro   r   )r   
symbol_setsymbolr   renamings        r   _group_symbolszLibdevice._group_symbols   s   
mm**, 	)FnnG"(Jw	)

U
#V
-5w
@I8
U^`h
js

+4h
@I8
U^`h
js
 v
 (0
 ;B6
 LTU\
 _gho
 f	
 &v	
 07	
 AH	
 Q\]g	
 jpqv	

 V

 &w

 1A/

 Tdet
 x
 "+H
 7@
 LUV^
 ajks
 x
 "+H
 7@
 LRSX
 [bci
 lv
  
 +4X
 @Fu
 OWX_
 bijp
 g
  '
 06u
 ?N~
 `ghn
 qx
 W
 '-e
 6?
 KTU]
 `ijr
 x
 ")&
 3:6
 DLW
 W_`g
 jr
 w
 )1'
 <DW
 OTUY
 \abf
 inos
 g
  )(
 5>x
 JTU^
 aghm
 px
 w
 )0
 :A&
 KQRW
 Zabg
 jr
 E
 $*5
 39%
 BI%
 RZ[`
 cjkp
  E!
  %h!
  1:8!
  FOPX!
  [dem!
" x#
" "+H#
" 7@#
" LUV^#
" aijq#
$ g%
$  )'%
$ 4>w%
$ IUVa%
$ dp'
& #H'
& /8'
& DNy'
& [hiu'
( f)
( &u)
( /5e)
( >DU)
( MUV])
( `ijr)
* x+
* "+H+
* 7@+
* LUV^+
* ajks+
, x-
, "+H-
, 7CK-
, RZ[b-
, enow-
. V/
. (/
. 5?	/
. LTU\/
. _gho/
0 1
0 &,U1
0 5>x1
0 JTU^1
0 aklu1
2 E3
2 #F3
2 -5g3
2 @G3
2 Q[\e3
2 hr5
4 "95
4 /9)5
4 FPQZ5
4 ]ghq5
6 	7
6 $.y7
6 ;DX7
6 PYZb7
6 enow7
8 x9
8 "+H9
8 7@9
8 LUV^9
8 ajks9
: E;
: #F;
: -6x;
: BJ7;
: UZ[_;
: im=
B mm**, 	8FnnG(""7+")$---##G,33F;06x##G,	8r   c                 &   t        | j                        dkD  ry t        j                  dd|g      j	                         j                         }|D ]/  }| j                  |      }||| j                  |j                  <   1 | j                          y )Nr   grepdefine)
r]   rN   rb   check_outputdecode
splitlinesr   rC   r   r  )r   rQ   outputr   r  s        r   rR   zLibdevice.parse_symbols   s    t||q ((&(J)GHOOQ\\^ 	0D))$/F~)/DMM&++&		0 	r   c                 2   d}d}d}| j                   j                         D ]  }|dz  }d|d   j                   d}|d   j                  D ]
  }|| dz  } |dz  }d	| j                   d
}|d   j                  D ]
  }|| dz  } |dz  }d}|D ]L  }	|dz  }|	j
                  D ]  }
|d|
 dz  } d|	j                   d}|d|	j                  z   dz   |z   dz   z  }N |dz  }||z  }|d| j                   z  }|dz  }|||z   dz   z  } ||z   |z   }|S )Nzfrom . import core
rz   z@core.extern
zdef r   ry   z, z_builder=None):
z!	return core.extern_elementwise("z", libdevice_path(), [z], 
{zcore.dtype("z"),z")z): ("z", z),
}z
, is_pure=z, _builder=_builder)

)	ro   r  r   r   r
   r   r   r   rs   )r   
import_str
header_strr   rN   func_name_strr   
return_strarg_type_symbol_dict_strr  r   r   rg   s                r   rU   zLibdevice._output_stubs  s    ,

**113 	:G((H"71:#5#5"6a8M#AJ00 1H:R0100M>tzzlJabJ#AJ00 .
"o-
.'!J'*$! `(C/( & 0 0 MH,,xj0LL,M)&//):"=(Hv{{,BV,Kh,VY_,__(` %+$22JJt||n55J22J
2T99H3	:4 
*X5r   rk   )r'   r(   r)   r   r*   r   r	   r+   r   staticmethodr   r   r  rR   rU   __classcell__)rt   s   @r   rn   rn      sW    d6l*++ 'J&!1 'J 'JR08d
&s &r   rn   c                   f    e Zd ZU eed<   eed<   d
dZdeddfdZedefd       Zedefd	       Z	y)LLVMDisassemblerrB   _ll_filer   Nc                      || _         d| _        y)zf
        Invoke llvm-dis to disassemble the given file.
        :param path: path to llvm-dis
        z/tmp/extern_lib.llN)rB   r  )r   rF   s     r   r   zLLVMDisassembler.__init__5  s    
 
,r   lib_pathc                     t        j                  | j                  |d| j                  gt         j                        j                          y )Nz-orZ   )rb   rc   rB   ll_filerd   re   )r   r  s     r   disasmzLLVMDisassembler.disasm=  s0    $**hdllCJOO\hhjr   c                     | j                   S r   )r  r   s    r   r  zLLVMDisassembler.ll_file@  r!   r   c                     | j                   S r   rL   r   s    r   rF   zLLVMDisassembler.pathD  r   r   rk   )
r'   r(   r)   r*   r+   r   r  r,   r  rF   r-   r   r   r  r  1  s]    JM-ks kt k    c  r   r  rq   llvm_dis_pathr  lib_namerf   c                     |dk(  rt        |      }nt        d|       t        |       }|j                  |       |j	                  |j
                         |j                  |       y)a  
      Interface function to build the library file.
      :param llvm_dis_path: path to the llvm-dis binary
      :param lib_path: path to the external library file
      :param lib_name: name of the library
      :param output_dir: path to the output directory
    rq   zUnknown extern library: N)rn   r^   r  r  rR   r  rj   )r  r  r  rf   
extern_libllvm_disassemblers         r   buildr  L  se     ;x(
28*=>>(7X&.667!!*-r   __main__z
--llvm-diszPath to llvm-diszllvm-dis)desthelpdefaultz
--lib-pathzPath to the extern library)r  r  z
--lib-namezName of the extern libraryz--outputzOutput file pathz/tmp/)argparserb   abcr   r   typingr   r   r   r	   r*   r=   r?   rA   rn   r  extern_libsr  r'   ArgumentParserparseradd_argument
parse_argsargsr  r  r  rf   r-   r   r   <module>r     sJ     # ' '/ /dhsm $S =_C =_@Z Zz 0 m... . 	.
 
.2 z$X$$&F
?AS]gh
:<XY
:<XY

<NX_`D	$

dmmT]]DOOL r   