
    (Thi5              
          S SK r S SKrS SKJrJr  S SKJrJrJr   " S S5      r	S\\
   4S jrS\
4S jr " S	 S
\5      r " S S\5      r " S S5      rS/rS\
S\
S\
S\
SS4
S jr\S:X  a  \ R&                  " 5       r\R+                  SSSSS9  \R+                  SSSS9  \R+                  SSSS9  \R+                  SSS S!S9  \R-                  5       r\" \R0                  \R2                  \R4                  \R6                  5        gg)"    N)ABCabstractmethod)DictListOptionalc                      \ rS rSr% \\S'   \\S'   \\S'   \\   \S'   \\   \S'   S\S\S	\S
\\   S\\   SS4S jr\S\4S j5       r	\S\4S j5       r
\S\4S j5       r\S\\   4S j5       r\S\\   4S j5       rSrg)Symbol   _name_op_name	_ret_type
_arg_names
_arg_typesnameop_nameret_type	arg_names	arg_typesreturnNc                 h    Xl         X l        X0l        [        U5      U l        [        U5      U l        g)z
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         Q/var/www/auris/envauris/lib/python3.13/site-packages/triton/tools/build_extern.py__init__Symbol.__init__   s)      
!y/y/    c                     U R                   $ Nr   r   s    r   r   Symbol.name$       zzr   c                     U R                   $ r   )r   r    s    r   r   Symbol.op_name(       }}r   c                     U R                   $ r   )r   r    s    r   r   Symbol.ret_type,       ~~r   c                     U R                   $ r   )r   r    s    r   r   Symbol.arg_names0       r   c                     U R                   $ r   )r   r    s    r   r   Symbol.arg_types4   r+   r   )r   r   r   r   r   )__name__
__module____qualname____firstlineno__str__annotations__r   r   propertyr   r   r   r   r   __static_attributes__ r   r   r	   r	      s    JMNS	S	** * 	*
 9* 9* 
*, c      #   49   49  r   r	   r   c                 X    U S:X  a  gU S:X  a  gU S:X  a  gU S:X  a  gU S	:X  a  g
U S:X  a  gg )Ni32int32u32uint32i64int64u64uint64floatfp32doublefp64r6   type_strs    r   convert_typerF   9   sI    5	U		U		U		W		X	 r   c                 "    U S:X  a  gU S:X  a  gU $ )Nr9   r;   r=   r?   r6   rD   s    r   to_unsignedrH   K   s    7	W	r   c                      \ rS rSr% \\S'   \\S'   \\\4   \S'   \\S'   \\S'     SS\S\S	\S
\SS4
S jjr	\
S\4S j5       r\
S\4S j5       r\
S\\\4   4S j5       r\
S\4S j5       r\SS j5       r\S\4S j5       rSS jrSrg)ExternLibraryT   r   _path_symbols_format	_groupingr   pathformatgroupingr   Nc                 B    Xl         X l        0 U l        X0l        X@l        g)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   rL   rM   rN   rO   )r   r   rP   rQ   rR   s        r   r   ExternLibrary.__init__[   s     

!r   c                     U R                   $ r   r   r    s    r   r   ExternLibrary.namen   r"   r   c                     U R                   $ r   rL   r    s    r   rP   ExternLibrary.pathr   r"   r   c                     U R                   $ r   )rM   r    s    r   symbolsExternLibrary.symbolsv   r%   r   c                     U R                   $ r   )rO   r    s    r   rR   ExternLibrary.groupingz   r(   r   c                     g r   r6   )r   
input_files     r   parse_symbolsExternLibrary.parse_symbols~       r   c                     g r   r6   r    s    r   _output_stubsExternLibrary._output_stubs   rc   r   c                    U R                  5       nUb  [        U5      S:X  a  [        S5      eU SU R                   S3n[	        US5       nUR                  U5        UR                  5         U R                  (       ai  [        R                  " SSSS	U/[        R                  S
9R                  5         [        R                  " SU/[        R                  S
9R                  5         S S S 5        g ! , (       d  f       g = f)Nr   zfile_str is empty/z.pywautopep8z-az-rz-istdoutisort)re   len	Exceptionr   openwritecloserN   
subprocessPopenPIPEcommunicate)r   
output_dirfile_stroutput_filefs        r   generate_stub_file 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C11
C?)rN   rO   r   rL   rM   )TTr   N)r.   r/   r0   r1   r2   r3   r   r	   boolr   r4   r   rP   r[   rR   r   ra   re   r{   r5   r6   r   r   rJ   rJ   T   s   JJ3;MO "" " 	"
 " 
"& c   c   c6k*   $     s  _r   rJ   c                      ^  \ rS rSr% \\\\   4   \S'   S
U 4S jjr	\
S\\   4S j5       rS
S jrS
S jrS\4S jrS	rU =r$ )	Libdevice   _symbol_groupsr   c                 B   > [         TU ]  SU5        0 U l        SU l        g)zG
Constructor for Libdevice.
:param path: path of the libdevice library
	libdeviceTN)superr   r   is_pure)r   rP   	__class__s     r   r   Libdevice.__init__   s#    
 	d+ r   c                    U R                  S5      nUS   nUS   nUR                  5       nUS   S:X  a  g [        US   5      nUc  g UR                  S5      nUS   R                  SS5      nUR                  SS5      nSU;   a  g US   R                  S	5      n	/ n
/ n[        U	5       HV  u  p[        UR                  5       S   5      nUc    g S
[	        U5      -   nU
R                  U5        UR                  U5        MX     US:X  a  [        U
S   5      U
S'   OBUR                  S5      (       a,  [        U5      n[        U
5       H  u  p[        U5      X'   M     [        XxX[U
5      $ )N@r      internal( __nv_ieee,argsadu)	splitrF   replace	enumerater2   appendrH   
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_symbolLibdevice._extract_symbol   sp    **S/!*1:==?A;*$,NN3'	aL((b1	##GR0WQ<%%c*		#H-JA#GMMOA$67Hs1v~HX&X& . e'	"6IbM$$ #8,H(3*84	  4i(yIIr   c                 >   0 nU R                   R                  5        H  nUR                  nX!U'   M     0 SS_SS_SS_SS_S	S_S
S_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_0 SS _S!S"_S#S$_S%S&_S'S(_S)S*_S+S,_S-S._S/S0_S1S2_S3S2_S4S5_S6S5_S7S8_S9S8_S:S;_S<S;_E0 S=S>_S?S@_SASB_SCSD_SESF_SGSH_SISJ_SKSL_SMSN_SOS_SPS_SQSR_SSST_SUSV_SWSX_SYSZ_S[S\_E0 S]S^_S_S`_SaSb_ScSd_SeSf_SgSh_SiSj_SkSl_SmSl_SnSo_SpSo_SqSr_SsSt_SuSv_SwSx_SySz_S{S|_E0 S}S~_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_E0 SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_E0 SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_E0 SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_E0 SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_GS GS_GSGS_GSGS_GSGS_GSGS	_EGS
GSGS.EnU R                   R                  5        H]  nUR                  nX4;   a
  XC   nX2l        X0R                  ;   a   U R                  U   R                  U5        MM  U/U R                  U'   M_     g (  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)rM   valuesr   r   r   r   )r   
symbol_setsymbolr   renamings        r   _group_symbolsLibdevice._group_symbols   s   
mm**,FnnG"(w -

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**,FnnG""+")---##G,33F;06x##G, -r   c                 0   [        U R                  5      S:  a  g [        R                  " SSU/5      R	                  5       R                  5       nU H1  nU R                  U5      nUc  M  X@R                  UR                  '   M3     U R                  5         g )Nr   grepdefine)
rn   r[   rs   check_outputdecode
splitlinesr   rM   r   r  )r   r`   outputr   r  s        r   ra   Libdevice.parse_symbols   s    t||q ((&(J)GHOOQ\\^D))$/F~)/MM&++&	  	r   c                 <   SnSnSnU R                   R                  5        H  nUS-  nSUS   R                   S3nUS   R                   H
  nXV S3-  nM     US-  nS	U R                   S
3nUS   R                   H
  nXv S3-  nM     US-  nSnU HO  n	US-  nU	R
                   H  n
USU
 S3-  nM     SU	R                   S3nUSU	R                  -   S-   U-   S-   -  nMQ     US-  nXx-  nUSU R                   3-  nUS-  nX5U-   S-   -  nM     X-   U-   nU$ )Nzfrom . import core
r   z@core.extern
zdef r   r   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)

)	r   r  r   r   r   r   r   r   r   )r   
import_str
header_strr   r[   func_name_strr   
return_strarg_type_symbol_dict_strr  r   r   rx   s                r   re   Libdevice._output_stubs  s    ,

**113G((H"71:#5#5"6a8M#AJ00:R0 100M>tzzlJabJ#AJ00
"o-
 1'!J'*$!(C/( & 0 0H,,xj0LL, !1)&//):"=(Hv{{,BV,Kh,VY_,__( " %+$2JJt||n55J22J
2T99H3 44 *X5r   )r   r   r}   )r.   r/   r0   r1   r   r2   r   r	   r3   r   staticmethodr   r   r  ra   re   r5   __classcell__)r   s   @r   r   r      s\    d6l*++ 'J&!1 'J 'JR08d
&s & &r   r   c                   v    \ rS rSr% \\S'   \\S'   SS jrS\SS4S jr\S\4S	 j5       r	\S\4S
 j5       r
Srg)LLVMDisassembleri1  rL   _ll_filer   Nc                     Xl         SU l        g)zN
Invoke llvm-dis to disassemble the given file.
:param path: path to llvm-dis
z/tmp/extern_lib.llN)rL   r  )r   rP   s     r   r   LLVMDisassembler.__init__5  s    
 
,r   lib_pathc                     [         R                  " U R                  USU R                  /[         R                  S9R                  5         g )Nz-ork   )rs   rt   rL   ll_fileru   rv   )r   r  s     r   disasmLLVMDisassembler.disasm=  s0    $**hdllCJOO\hhjr   c                     U R                   $ r   )r  r    s    r   r  LLVMDisassembler.ll_file@  r%   r   c                     U R                   $ r   rX   r    s    r   rP   LLVMDisassembler.pathD  r"   r   )r  rL   r}   )r.   r/   r0   r1   r2   r3   r   r  r4   r  rP   r5   r6   r   r   r  r  1  s]    JM-ks kt k    c  r   r  r   llvm_dis_pathr  lib_namerw   c                     US:X  a  [        U5      nO[        SU 35      e[        U 5      nUR                  U5        UR	                  UR
                  5        UR                  U5        g)z
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
r   zUnknown extern library: N)r   ro   r  r  ra   r  r{   )r  r  r  rw   
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/)argparsers   abcr   r   typingr   r   r   r	   r2   rF   rH   rJ   r   r  extern_libsr  r.   ArgumentParserparseradd_argument
parse_argsargsr  r  r  rw   r6   r   r   <module>r     sH     # ' '/ /dhsm $S =_C =_@Z Zz 0 m... . 	.
 
.2 z$$&F
?AS]gh
:<XY
:<XY

<NX_`D	$

dmmT]]DOOL r   