Coverage for cuda / core / _program.pyx: 81.76%

636 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-03-25 01:07 +0000

1# SPDX-FileCopyrightText: Copyright (c) 2024-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 

2# 

3# SPDX-License-Identifier: Apache-2.0 

4"""Compilation machinery for CUDA programs. 

5  

6This module provides :class:`Program` for compiling source code into 

7:class:`~cuda.core.ObjectCode`, with :class:`ProgramOptions` for configuration. 

8""" 

9  

10from __future__ import annotations 

11  

12from dataclasses import dataclass 

13import threading 

14from warnings import warn 

15  

16from cuda.bindings import driver, nvrtc 

17from cuda.pathfinder._optional_cuda_import import _optional_cuda_import 

18  

19from libcpp.vector cimport vector 

20  

21from ._resource_handles cimport ( 

22 as_cu, 

23 as_py, 

24 create_nvrtc_program_handle, 

25 create_nvvm_program_handle, 

26) 

27from cuda.bindings cimport cynvrtc, cynvvm 

28from cuda.core._utils.cuda_utils cimport HANDLE_RETURN_NVRTC, HANDLE_RETURN_NVVM 

29from cuda.core._device import Device 

30from cuda.core._linker import Linker, LinkerHandleT, LinkerOptions 

31from cuda.core._module import ObjectCode 

32from cuda.core._utils.clear_error_support import assert_type 

33from cuda.core._utils.cuda_utils import ( 

34 CUDAError, 

35 _handle_boolean_option, 

36 check_or_create_options, 

37 get_binding_version, 

38 handle_return, 

39 is_nested_sequence, 

40 is_sequence, 

41) 

42  

43__all__ = ["Program", "ProgramOptions"] 

44  

45ProgramHandleT = nvrtc.nvrtcProgram | int | LinkerHandleT 

46"""Type alias for program handle types across different backends. 

47  

48The ``int`` type covers NVVM handles, which don't have a wrapper class. 

49""" 

50  

51  

52# ============================================================================= 

53# Principal Class 

54# ============================================================================= 

55  

56  

57cdef class Program: 

58 """Represent a compilation machinery to process programs into 

59 :class:`~cuda.core.ObjectCode`. 

60  

61 This object provides a unified interface to multiple underlying 

62 compiler libraries. Compilation support is enabled for a wide 

63 range of code types and compilation types. 

64  

65 Parameters 

66 ---------- 

67 code : str | bytes | bytearray 

68 The source code to compile. For C++ and PTX, must be a string. 

69 For NVVM IR, can be str, bytes, or bytearray. 

70 code_type : str 

71 The type of source code. Must be one of ``"c++"``, ``"ptx"``, or ``"nvvm"``. 

72 options : :class:`ProgramOptions`, optional 

73 Options to customize the compilation process. 

74 """ 

75  

76 def __init__(self, code: str | bytes | bytearray, code_type: str, options: ProgramOptions | None = None): 

77 Program_init(self, code, code_type, options) 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fogjgQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+fqg2d,f3d-frgReSed 5dsgc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_f`f~fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b pglgkgPengugtgmgagbgcgdgegfggghgQeig

78  

79 def close(self): 

80 """Destroy this program.""" 

81 if self._linker: 2ReSed 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_f`f~f.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b lgagbgcgdgegfggghgig

82 self._linker.close() 2agbgcgdgegfggghgig

83 # Reset handles - the C++ shared_ptr destructor handles cleanup 

84 self._h_nvrtc.reset() 2ReSed 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_f`f~f.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b lgagbgcgdgegfggghgig

85 self._h_nvvm.reset() 2ReSed 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_f`f~f.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b lgagbgcgdgegfggghgig

86  

87 def compile( 

88 self, target_type: str, name_expressions: tuple | list = (), logs = None 

89 ) -> ObjectCode: 

90 """Compile the program to the specified target type. 

91  

92 Parameters 

93 ---------- 

94 target_type : str 

95 The compilation target. Must be one of ``"ptx"``, ``"cubin"``, or ``"ltoir"``. 

96 name_expressions : tuple | list, optional 

97 Sequence of name expressions to make accessible in the compiled code. 

98 Used for template instantiation and similar cases. 

99 logs : object, optional 

100 Object with a ``write`` method to receive compilation logs. 

101  

102 Returns 

103 ------- 

104 :class:`~cuda.core.ObjectCode` 

105 The compiled object code. 

106 """ 

107 return Program_compile(self, target_type, name_expressions, logs) 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fReSed 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_f`f~fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b kgPeagbgcgdgegfggghgQeig

108  

109 @property 

110 def pch_status(self) -> str | None: 

111 """PCH creation outcome from the most recent :meth:`compile` call. 

112  

113 Possible values: 

114  

115 * ``"created"`` — PCH file was written successfully. 

116 * ``"not_attempted"`` — PCH creation was not attempted (e.g. the 

117 compiler decided not to, or automatic PCH processing skipped it). 

118 * ``"failed"`` — an error prevented PCH creation. 

119 * ``None`` — PCH was not requested, the program has not been 

120 compiled yet, the backend is not NVRTC (e.g. PTX or NVVM), 

121 or the NVRTC bindings are too old to report status. 

122  

123 When ``create_pch`` is set in :class:`ProgramOptions` and the PCH 

124 heap is too small, :meth:`compile` automatically resizes the heap 

125 and retries, so ``"created"`` should be the common outcome. 

126  

127 .. note:: 

128  

129 PCH is only supported for ``code_type="c++"`` programs that 

130 use the NVRTC backend. For PTX and NVVM programs this property 

131 always returns ``None``. 

132 """ 

133 return self._pch_status 2Ted 5d

134  

135 @property 

136 def backend(self) -> str: 

137 """Return this Program instance's underlying backend.""" 

138 return self._backend 2ReSec 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+dMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b pgmgagbgcgdgegfggghgig

139  

140 @property 

141 def handle(self) -> ProgramHandleT: 

142 """Return the underlying handle object. 

143  

144 .. note:: 

145  

146 The type of the returned object depends on the backend. 

147  

148 .. caution:: 

149  

150 This handle is a Python object. To get the memory address of the underlying C 

151 handle, call ``int(Program.handle)``. 

152 """ 

153 if self._backend == "NVRTC": 2Mengmg

154 return as_py(self._h_nvrtc) 2ngmg

155 elif self._backend == "NVVM": 2Me

156 return as_py(self._h_nvvm) # returns int (NVVM uses raw integers) 2Me

157 else: 

158 return self._linker.handle 

159  

160 def __repr__(self) -> str: 

161 return f"<Program backend='{self._backend}'>" 2ogjgMe

162  

163  

164# ============================================================================= 

165# Other Public Classes 

166# ============================================================================= 

167  

168  

169@dataclass 

170class ProgramOptions: 

171 """Customizable options for configuring :class:`Program`. 

172  

173 Attributes 

174 ---------- 

175 name : str, optional 

176 Name of the program. If the compilation succeeds, the name is passed down to the generated `ObjectCode`. 

177 arch : str, optional 

178 Pass the SM architecture value, such as ``sm_<CC>`` (for generating CUBIN) or 

179 ``compute_<CC>`` (for generating PTX). If not provided, the current device's architecture 

180 will be used. 

181 relocatable_device_code : bool, optional 

182 Enable (disable) the generation of relocatable device code. 

183 Default: False 

184 extensible_whole_program : bool, optional 

185 Do extensible whole program compilation of device code. 

186 Default: False 

187 debug : bool, optional 

188 Generate debug information. If --dopt is not specified, then turns off all optimizations. 

189 Default: False 

190 lineinfo: bool, optional 

191 Generate line-number information. 

192 Default: False 

193 device_code_optimize : bool, optional 

194 Enable device code optimization. When specified along with '-G', enables limited debug information generation 

195 for optimized device code. 

196 Default: None 

197 ptxas_options : Union[str, list[str]], optional 

198 Specify one or more options directly to ptxas, the PTX optimizing assembler. Options should be strings. 

199 For example ["-v", "-O2"]. 

200 Default: None 

201 max_register_count : int, optional 

202 Specify the maximum amount of registers that GPU functions can use. 

203 Default: None 

204 ftz : bool, optional 

205 When performing single-precision floating-point operations, flush denormal values to zero or preserve denormal 

206 values. 

207 Default: False 

208 prec_sqrt : bool, optional 

209 For single-precision floating-point square root, use IEEE round-to-nearest mode or use a faster approximation. 

210 Default: True 

211 prec_div : bool, optional 

212 For single-precision floating-point division and reciprocals, use IEEE round-to-nearest mode or use a faster 

213 approximation. 

214 Default: True 

215 fma : bool, optional 

216 Enables (disables) the contraction of floating-point multiplies and adds/subtracts into floating-point 

217 multiply-add operations. 

218 Default: True 

219 use_fast_math : bool, optional 

220 Make use of fast math operations. 

221 Default: False 

222 extra_device_vectorization : bool, optional 

223 Enables more aggressive device code vectorization in the NVVM optimizer. 

224 Default: False 

225 link_time_optimization : bool, optional 

226 Generate intermediate code for later link-time optimization. 

227 Default: False 

228 gen_opt_lto : bool, optional 

229 Run the optimizer passes before generating the LTO IR. 

230 Default: False 

231 define_macro : Union[str, tuple[str, str], list[Union[str, tuple[str, str]]]], optional 

232 Predefine a macro. Can be either a string, in which case that macro will be set to 1, a 2 element tuple of 

233 strings, in which case the first element is defined as the second, or a list of strings or tuples. 

234 Default: None 

235 undefine_macro : Union[str, list[str]], optional 

236 Cancel any previous definition of a macro, or list of macros. 

237 Default: None 

238 include_path : Union[str, list[str]], optional 

239 Add the directory or directories to the list of directories to be searched for headers. 

240 Default: None 

241 pre_include : Union[str, list[str]], optional 

242 Preinclude one or more headers during preprocessing. Can be either a string or a list of strings. 

243 Default: None 

244 no_source_include : bool, optional 

245 Disable the default behavior of adding the directory of each input source to the include path. 

246 Default: False 

247 std : str, optional 

248 Set language dialect to C++03, C++11, C++14, C++17 or C++20. 

249 Default: c++17 

250 builtin_move_forward : bool, optional 

251 Provide builtin definitions of std::move and std::forward. 

252 Default: True 

253 builtin_initializer_list : bool, optional 

254 Provide builtin definitions of std::initializer_list class and member functions. 

255 Default: True 

256 disable_warnings : bool, optional 

257 Inhibit all warning messages. 

258 Default: False 

259 restrict : bool, optional 

260 Programmer assertion that all kernel pointer parameters are restrict pointers. 

261 Default: False 

262 device_as_default_execution_space : bool, optional 

263 Treat entities with no execution space annotation as __device__ entities. 

264 Default: False 

265 device_int128 : bool, optional 

266 Allow the __int128 type in device code. 

267 Default: False 

268 optimization_info : str, optional 

269 Provide optimization reports for the specified kind of optimization. 

270 Default: None 

271 no_display_error_number : bool, optional 

272 Disable the display of a diagnostic number for warning messages. 

273 Default: False 

274 diag_error : Union[int, list[int]], optional 

275 Emit error for a specified diagnostic message number or comma separated list of numbers. 

276 Default: None 

277 diag_suppress : Union[int, list[int]], optional 

278 Suppress a specified diagnostic message number or comma separated list of numbers. 

279 Default: None 

280 diag_warn : Union[int, list[int]], optional 

281 Emit warning for a specified diagnostic message number or comma separated lis of numbers. 

282 Default: None 

283 brief_diagnostics : bool, optional 

284 Disable or enable showing source line and column info in a diagnostic. 

285 Default: False 

286 time : str, optional 

287 Generate a CSV table with the time taken by each compilation phase. 

288 Default: None 

289 split_compile : int, optional 

290 Perform compiler optimizations in parallel. 

291 Default: 1 

292 fdevice_syntax_only : bool, optional 

293 Ends device compilation after front-end syntax checking. 

294 Default: False 

295 minimal : bool, optional 

296 Omit certain language features to reduce compile time for small programs. 

297 Default: False 

298 no_cache : bool, optional 

299 Disable compiler caching. 

300 Default: False 

301 fdevice_time_trace : str, optional 

302 Generate time trace JSON for profiling compilation (NVRTC only). 

303 Default: None 

304 device_float128 : bool, optional 

305 Allow __float128 type in device code (NVRTC only). 

306 Default: False 

307 frandom_seed : str, optional 

308 Set random seed for randomized optimizations (NVRTC only). 

309 Default: None 

310 ofast_compile : str, optional 

311 Fast compilation mode: "0", "min", "mid", or "max" (NVRTC only). 

312 Default: None 

313 pch : bool, optional 

314 Use default precompiled header (NVRTC only, CUDA 12.8+). 

315 Default: False 

316 create_pch : str, optional 

317 Create precompiled header file (NVRTC only, CUDA 12.8+). 

318 Default: None 

319 use_pch : str, optional 

320 Use specific precompiled header file (NVRTC only, CUDA 12.8+). 

321 Default: None 

322 pch_dir : str, optional 

323 PCH directory location (NVRTC only, CUDA 12.8+). 

324 Default: None 

325 pch_verbose : bool, optional 

326 Verbose PCH output (NVRTC only, CUDA 12.8+). 

327 Default: False 

328 pch_messages : bool, optional 

329 Control PCH diagnostic messages (NVRTC only, CUDA 12.8+). 

330 Default: False 

331 instantiate_templates_in_pch : bool, optional 

332 Control template instantiation in PCH (NVRTC only, CUDA 12.8+). 

333 Default: False 

334 extra_sources : list of 2-tuples or tuple of 2-tuples, optional 

335 Additional NVVM IR modules to compile together with the main program, specified as 

336 ``((name1, source1), (name2, source2), ...)``. Each name is a string identifier used 

337 in diagnostic messages. Each source can be a string (textual LLVM IR) or bytes/bytearray 

338 (LLVM bitcode). Only supported for the NVVM backend. 

339 Default: None 

340 use_libdevice : bool, optional 

341 Load NVIDIA's `libdevice <https://docs.nvidia.com/cuda/libdevice-users-guide/>`_ 

342 math builtins library. Only supported for the NVVM backend. 

343 Default: False 

344 """ 

345  

346 name: str | None = "default_program" 

347 arch: str | None = None 

348 relocatable_device_code: bool | None = None 

349 extensible_whole_program: bool | None = None 

350 debug: bool | None = None 

351 lineinfo: bool | None = None 

352 device_code_optimize: bool | None = None 

353 ptxas_options: str | list[str] | tuple[str] | None = None 

354 max_register_count: int | None = None 

355 ftz: bool | None = None 

356 prec_sqrt: bool | None = None 

357 prec_div: bool | None = None 

358 fma: bool | None = None 

359 use_fast_math: bool | None = None 

360 extra_device_vectorization: bool | None = None 

361 link_time_optimization: bool | None = None 

362 gen_opt_lto: bool | None = None 

363 define_macro: str | tuple[str, str] | list[str | tuple[str, str]] | tuple[str | tuple[str, str], ...] | None = None 

364 undefine_macro: str | list[str] | tuple[str] | None = None 

365 include_path: str | list[str] | tuple[str] | None = None 

366 pre_include: str | list[str] | tuple[str] | None = None 

367 no_source_include: bool | None = None 

368 std: str | None = None 

369 builtin_move_forward: bool | None = None 

370 builtin_initializer_list: bool | None = None 

371 disable_warnings: bool | None = None 

372 restrict: bool | None = None 

373 device_as_default_execution_space: bool | None = None 

374 device_int128: bool | None = None 

375 optimization_info: str | None = None 

376 no_display_error_number: bool | None = None 

377 diag_error: int | list[int] | tuple[int] | None = None 

378 diag_suppress: int | list[int] | tuple[int] | None = None 

379 diag_warn: int | list[int] | tuple[int] | None = None 

380 brief_diagnostics: bool | None = None 

381 time: str | None = None 

382 split_compile: int | None = None 

383 fdevice_syntax_only: bool | None = None 

384 minimal: bool | None = None 

385 no_cache: bool | None = None 

386 fdevice_time_trace: str | None = None 

387 device_float128: bool | None = None 

388 frandom_seed: str | None = None 

389 ofast_compile: str | None = None 

390 pch: bool | None = None 

391 create_pch: str | None = None 

392 use_pch: str | None = None 

393 pch_dir: str | None = None 

394 pch_verbose: bool | None = None 

395 pch_messages: bool | None = None 

396 instantiate_templates_in_pch: bool | None = None 

397 extra_sources: list[tuple[str, str | bytes | bytearray]] | tuple[tuple[str, str | bytes | bytearray], ...] | None = None 

398 use_libdevice: bool | None = None # For libdevice execution 

399 numba_debug: bool | None = None # Custom option for Numba debugging 

400  

401 def __post_init__(self): 

402 self._name = self.name.encode() 2Te0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fogjgQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+fqg2d,f3d-frgReSed 5dsgc 4d_f`f~fMea b pglgkgPengugtgmgyg{f}f|fQe

403 # Set arch to default if not provided 

404 if self.arch is None: 2Te0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fogjgQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+fqg2d,f3d-frgReSed 5dsgc 4d_f`f~fMea b pglgkgPengugtgmgyg{f}f|fQe

405 self.arch = f"sm_{Device().arch}" 2TeWe,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcYeZe0e1e2e3e4e5e6e7e8e9e!e#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e?e@e[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgfhfifjfkflfmfnfofpfqfrfsftfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfIfJfKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZf0f1f2f3f4f5f6fogjg7f8f9f!f#f$f%f'f(f)f*f+fqg,f-frgd 5dsgc 4d_f`f~fMea b pglgkgPengugtgmgQe

406 if self.extra_sources is not None: 2Te0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fogjgQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+fqg2d,f3d-frgReSed 5dsgc 4d_f`f~fMea b pglgkgPengugtgmgyg{f}f|fQe

407 if not is_sequence(self.extra_sources): 2sga b

408 raise TypeError( 

409 "extra_sources must be a sequence of 2-tuples: ((name1, source1), (name2, source2), ...)" 

410 ) 

411 for i, module in enumerate(self.extra_sources): 2sga b

412 if not isinstance(module, tuple) or len(module) != 2: 2sga b

413 raise TypeError( 

414 f"Each extra module must be a 2-tuple (name, source)" 

415 f", got {type(module).__name__} at index {i}" 

416 ) 

417  

418 module_name, module_source = module 2sga b

419  

420 if not isinstance(module_name, str): 2sga b

421 raise TypeError(f"Module name at index {i} must be a string, got {type(module_name).__name__}") 

422  

423 if not isinstance(module_source, (str, bytes, bytearray)): 2sga b

424 raise TypeError( 

425 f"Module source at index {i} must be str (textual LLVM IR), bytes (textual LLVM IR or bitcode), " 

426 f"or bytearray, got {type(module_source).__name__}" 

427 ) 

428  

429 if len(module_source) == 0: 2sga b

430 raise ValueError(f"Module source for '{module_name}' (index {i}) cannot be empty") 

431  

432 def _prepare_nvrtc_options(self) -> list[bytes]: 

433 return _prepare_nvrtc_options_impl(self) 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

434  

435 def _prepare_nvvm_options(self, as_bytes: bool = True) -> list[bytes] | list[str]: 

436 return _prepare_nvvm_options_impl(self, as_bytes) 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

437  

438 def as_bytes(self, backend: str, target_type: str | None = None) -> list[bytes]: 

439 """Convert program options to bytes format for the specified backend. 

440  

441 This method transforms the program options into a format suitable for the 

442 specified compiler backend. Different backends may use different option names 

443 and formats even for the same conceptual options. 

444  

445 Parameters 

446 ---------- 

447 backend : str 

448 The compiler backend to prepare options for. Must be either "nvrtc" or "nvvm". 

449 target_type : str, optional 

450 The compilation target type (e.g., "ptx", "cubin", "ltoir"). Some backends 

451 require additional options based on the target type. 

452  

453 Returns 

454 ------- 

455 list[bytes] 

456 List of option strings encoded as bytes. 

457  

458 Raises 

459 ------ 

460 ValueError 

461 If an unknown backend is specified. 

462 CUDAError 

463 If an option incompatible with the specified backend is set. 

464  

465 Examples 

466 -------- 

467 >>> options = ProgramOptions(arch="sm_80", debug=True) 

468 >>> nvrtc_options = options.as_bytes("nvrtc") 

469 """ 

470 backend = backend.lower() 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fReSed 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_f`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b Peyg{f}f|fQe

471 if backend == "nvrtc": 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fReSed 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_f`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b Peyg{f}f|fQe

472 return self._prepare_nvrtc_options() 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

473 elif backend == "nvvm": 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b yg}f|f

474 options = self._prepare_nvvm_options(as_bytes=True) 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

475 if target_type == "ltoir" and b"-gen-lto" not in options: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b |f

476 options.append(b"-gen-lto") 2ReSe.f/f:fEe;fFe=fa

477 return options 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b |f

478 else: 

479 raise ValueError(f"Unknown backend '{backend}'. Must be one of: 'nvrtc', 'nvvm'") 2yg

480  

481 def __repr__(self): 

482 return f"ProgramOptions(name={self.name!r}, arch={self.arch!r})" 

483  

484 def _prepare_extra_sources_bytes(self) -> list[tuple[bytes, bytes]] | None: 

485 """Convert extra_sources to bytes format for NVVM.""" 

486 if self.extra_sources is None: 1ab

487 return None 

488  

489 result = [] 1ab

490 for module_name, module_source in self.extra_sources: 1ab

491 name_bytes = module_name.encode("utf-8") 1ab

492 if isinstance(module_source, str): 1ab

493 source_bytes = module_source.encode("utf-8") 1ab

494 elif isinstance(module_source, bytearray): 

495 source_bytes = bytes(module_source) 

496 else: 

497 source_bytes = module_source 

498 result.append((name_bytes, source_bytes)) 1ab

499 return result 1ab

500  

501  

502# ============================================================================= 

503# Private Classes and Helper Functions 

504# ============================================================================= 

505  

506# Module-level state for NVVM lazy loading 

507_nvvm_module = None 

508_nvvm_import_attempted = False 

509  

510  

511def _get_nvvm_module(): 

512 """Get the NVVM module, importing it lazily with availability checks.""" 

513 global _nvvm_module, _nvvm_import_attempted 

514  

515 if _nvvm_import_attempted: 2TejgvgwgxgReSe`f~fzgMe.fAg?f/f@f:f[fEeNe;f]fFeOe=f^fa b

516 if _nvvm_module is None: 2TejgReSe`f~fzgMe.fAg?f/f@f:f[fEeNe;f]fFeOe=f^fa b

517 raise RuntimeError("NVVM module is not available (previous import attempt failed)") 

518 return _nvvm_module 2TejgReSe`f~fzgMe.fAg?f/f@f:f[fEeNe;f]fFeOe=f^fa b

519  

520 _nvvm_import_attempted = True 2Tevgwgxg

521  

522 try: 2Tevgwgxg

523 version = get_binding_version() 2Tevgwgxg

524 if version < (12, 9): 2Tevgwgxg

525 raise RuntimeError( 

526 f"NVVM bindings require cuda-bindings >= 12.9.0, but found {version[0]}.{version[1]}.x. " 

527 "Please update cuda-bindings to use NVVM features." 

528 ) 

529  

530 nvvm = _optional_cuda_import( 2Tevgwgxg

531 "cuda.bindings.nvvm", 

532 probe_function=lambda module: module.version(), # probe triggers libnvvm load 2Tevgwgxg

533 ) 

534 if nvvm is None: 2Tevgwg

535 raise RuntimeError( 2vgwg

536 "NVVM support is unavailable: cuda.bindings.nvvm is missing or libnvvm cannot be loaded." 

537 ) 

538  

539 _nvvm_module = nvvm 

540 return _nvvm_module 

541  

542 except RuntimeError: 2vgwgxg

543 _nvvm_module = None 2vgwg

544 raise 2vgwg

545  

546def _find_libdevice_path(): 

547 """Find libdevice*.bc for NVVM compilation using cuda.pathfinder.""" 

548 from cuda.pathfinder import find_bitcode_lib 

549 return find_bitcode_lib("device") 

550  

551  

552  

553  

554cdef inline bint _process_define_macro_inner(list options, object macro) except? -1: 

555 """Process a single define macro, returning True if successful.""" 

556 if isinstance(macro, str): 1NLef

557 options.append(f"--define-macro={macro}") 1N

558 return True 1N

559 if isinstance(macro, tuple): 1Lef

560 if len(macro) != 2 or any(not isinstance(val, str) for val in macro): 1Lef

561 raise RuntimeError(f"Expected define_macro tuple[str, str], got {macro}") 

562 options.append(f"--define-macro={macro[0]}={macro[1]}") 1Lef

563 return True 1Lef

564 return False 1ef

565  

566  

567cdef inline void _process_define_macro(list options, object macro) except *: 

568 """Process define_macro option which can be str, tuple, or list thereof.""" 

569 union_type = "Union[str, tuple[str, str]]" 1NLef

570 if _process_define_macro_inner(options, macro): 1NLef

571 return 1NL

572 if is_nested_sequence(macro): 1ef

573 for seq_macro in macro: 1ef

574 if not _process_define_macro_inner(options, seq_macro): 1ef

575 raise RuntimeError(f"Expected define_macro {union_type}, got {seq_macro}") 

576 return 1ef

577 raise RuntimeError(f"Expected define_macro {union_type}, list[{union_type}], got {macro}") 

578  

579  

580cpdef bint _can_load_generated_ptx() except? -1: 

581 """Check if the driver can load PTX generated by the current NVRTC version.""" 

582 driver_ver = handle_return(driver.cuDriverGetVersion()) 2,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoeBgJ CgK DgEgd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPeQe

583 nvrtc_major, nvrtc_minor = handle_return(nvrtc.nvrtcVersion()) 2,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoeBgJ CgK DgEgd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPeQe

584 return nvrtc_major * 1000 + nvrtc_minor * 10 <= driver_ver 2,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoeBgJ CgK DgEgd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPeQe

585  

586  

587cdef inline object _translate_program_options(object options): 

588 """Translate ProgramOptions to LinkerOptions for PTX compilation.""" 

589 return LinkerOptions( 2agbgcgdgegfggghgig

590 name=options.name, 2agbgcgdgegfggghgig

591 arch=options.arch, 2agbgcgdgegfggghgig

592 max_register_count=options.max_register_count, 2agbgcgdgegfggghgig

593 time=options.time, 2agbgcgdgegfggghgig

594 link_time_optimization=options.link_time_optimization, 2agbgcgdgegfggghgig

595 debug=options.debug, 2agbgcgdgegfggghgig

596 lineinfo=options.lineinfo, 2agbgcgdgegfggghgig

597 ftz=options.ftz, 2agbgcgdgegfggghgig

598 prec_div=options.prec_div, 2agbgcgdgegfggghgig

599 prec_sqrt=options.prec_sqrt, 2agbgcgdgegfggghgig

600 fma=options.fma, 2agbgcgdgegfggghgig

601 split_compile=options.split_compile, 2agbgcgdgegfggghgig

602 ptxas_options=options.ptxas_options, 2agbgcgdgegfggghgig

603 no_cache=options.no_cache, 2agbgcgdgegfggghgig

604 ) 

605  

606  

607cdef inline int Program_init(Program self, object code, str code_type, object options) except -1: 

608 """Initialize a Program instance.""" 

609 cdef cynvrtc.nvrtcProgram nvrtc_prog 

610 cdef cynvvm.nvvmProgram nvvm_prog 

611 cdef bytes code_bytes 

612 cdef const char* code_ptr 

613 cdef const char* name_ptr 

614 cdef size_t code_len 

615 cdef bytes module_bytes 

616 cdef const char* module_ptr 

617 cdef size_t module_len 

618  

619 self._options = options = check_or_create_options(ProgramOptions, options, "Program options") 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fogjgQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+fqg2d,f3d-frgReSed 5dsgc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_f`f~fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b pglgkgPengugtgmgagbgcgdgegfggghgQeig

620 code_type = code_type.lower() 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fogjgQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+fqg2d,f3d-frgReSed 5dsgc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_f`f~fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b pglgkgPengugtgmgagbgcgdgegfggghgQeig

621 self._compile_lock = threading.Lock() 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fogjgQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+fqg2d,f3d-frgReSed 5dsgc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_f`f~fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b pglgkgPengugtgmgagbgcgdgegfggghgQeig

622 self._use_libdevice = False 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fogjgQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+fqg2d,f3d-frgReSed 5dsgc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_f`f~fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b pglgkgPengugtgmgagbgcgdgegfggghgQeig

623 self._libdevice_added = False 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fogjgQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+fqg2d,f3d-frgReSed 5dsgc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_f`f~fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b pglgkgPengugtgmgagbgcgdgegfggghgQeig

624  

625 self._pch_status = None 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fogjgQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+fqg2d,f3d-frgReSed 5dsgc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_f`f~fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b pglgkgPengugtgmgagbgcgdgegfggghgQeig

626  

627 if code_type == "c++": 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fogjgQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+fqg2d,f3d-frgReSed 5dsgc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_f`f~fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b pglgkgPengugtgmgagbgcgdgegfggghgQeig

628 assert_type(code, str) 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fogQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+fqg2d,f3d-frgd 5dsgc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fpglgkgPengugmgQe

629 if options.extra_sources is not None: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fogQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+fqg2d,f3d-frgd 5dsgc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fpglgkgPengmgQe

630 raise ValueError("extra_sources is not supported by the NVRTC backend (C++ code_type)") 2sg

631  

632 # TODO: support pre-loaded headers & include names 

633 code_bytes = code.encode() 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fogQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+fqg2d,f3d-frgd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fpglgkgPengmgQe

634 code_ptr = <const char*>code_bytes 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fogQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+fqg2d,f3d-frgd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fpglgkgPengmgQe

635 name_ptr = <const char*>options._name 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fogQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+fqg2d,f3d-frgd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fpglgkgPengmgQe

636  

637 with nogil: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fogQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+fqg2d,f3d-frgd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fpglgkgPengmgQe

638 HANDLE_RETURN_NVRTC(NULL, cynvrtc.nvrtcCreateProgram( 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fogQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+fqg2d,f3d-frgd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fpglgkgPengmgQe

639 &nvrtc_prog, code_ptr, name_ptr, 0, NULL, NULL)) 

640 self._h_nvrtc = create_nvrtc_program_handle(nvrtc_prog) 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fogQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+fqg2d,f3d-frgd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fpglgkgPengmgQe

641 self._nvrtc_code = code_bytes 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fogQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+fqg2d,f3d-frgd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fpglgkgPengmgQe

642 self._backend = "NVRTC" 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fogQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+fqg2d,f3d-frgd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fpglgkgPengmgQe

643 self._linker = None 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fogQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+fqg2d,f3d-frgd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fpglgkgPengmgQe

644  

645 elif code_type == "ptx": 2jgReSe`f~fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b tgagbgcgdgegfggghgig

646 assert_type(code, str) 2agbgcgdgegfggghgig

647 if options.extra_sources is not None: 2agbgcgdgegfggghgig

648 raise ValueError("extra_sources is not supported by the PTX backend.") 

649 self._linker = Linker( 2agbgcgdgegfggghgig

650 ObjectCode._init(code.encode(), code_type), options=_translate_program_options(options) 2agbgcgdgegfggghgig

651 ) 

652 self._backend = self._linker.backend 2agbgcgdgegfggghgig

653  

654 elif code_type == "nvvm": 2jgReSe`f~fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b tg

655 _get_nvvm_module() # Validate NVVM availability 2jgReSe`f~fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b

656 if isinstance(code, str): 2jgReSe`f~fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b

657 code = code.encode("utf-8") 2jg`f~fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b

658 elif not isinstance(code, (bytes, bytearray)): 2ReSe

659 raise TypeError("NVVM IR code must be provided as str, bytes, or bytearray") 

660  

661 code_ptr = <const char*>(<bytes>code) 2jgReSe`f~fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b

662 name_ptr = <const char*>options._name 2jgReSe`f~fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b

663 code_len = len(code) 2jgReSe`f~fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b

664  

665 with nogil: 2jgReSe`f~fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b

666 HANDLE_RETURN_NVVM(NULL, cynvvm.nvvmCreateProgram(&nvvm_prog)) 2jgReSe`f~fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b

667 self._h_nvvm = create_nvvm_program_handle(nvvm_prog) # RAII from here 2jgReSe`f~fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b

668 with nogil: 2jgReSe`f~fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b

669 HANDLE_RETURN_NVVM(nvvm_prog, cynvvm.nvvmAddModuleToProgram(nvvm_prog, code_ptr, code_len, name_ptr)) 2jgReSe`f~fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b

670  

671 # Add extra modules if provided 

672 if options.extra_sources is not None: 2jgReSe`f~fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b

673 extra_sources_bytes = options._prepare_extra_sources_bytes() 1ab

674 for module_name_bytes, module_bytes in extra_sources_bytes: 1ab

675 module_ptr = <const char*>module_bytes 1ab

676 module_len = len(module_bytes) 1ab

677 module_name_ptr = <const char*>module_name_bytes 1ab

678 with nogil: 1ab

679 HANDLE_RETURN_NVVM(nvvm_prog, cynvvm.nvvmAddModuleToProgram( 1ab

680 nvvm_prog, module_ptr, module_len, module_name_ptr)) 

681  

682 # Store use_libdevice flag 

683 if options.use_libdevice: 2jgReSe`f~fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b

684 self._use_libdevice = True 

685  

686 self._backend = "NVVM" 2jgReSe`f~fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b

687 self._linker = None 2jgReSe`f~fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b

688  

689 else: 

690 supported_code_types = ("c++", "ptx", "nvvm") 2tg

691 assert code_type not in supported_code_types, f"{code_type=}" 2tg

692 if options.use_libdevice: 2tg

693 raise ValueError("use_libdevice is only supported by the NVVM backend") 

694 raise RuntimeError(f"Unsupported {code_type=} ({supported_code_types=})") 2tg

695  

696 return 0 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fogjgQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+fqg2d,f3d-frgReSed 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_f`f~fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b pglgkgPengmgagbgcgdgegfggghgQeig

697  

698  

699cdef object _nvrtc_compile_and_extract( 

700 cynvrtc.nvrtcProgram prog, str target_type, object name_expressions, 

701 object logs, list options_list, str name, 

702): 

703 """Run nvrtcCompileProgram on *prog* and extract the output. 

704  

705 This is the inner compile+extract loop, factored out so the PCH 

706 auto-retry path can call it on a fresh program handle. 

707 """ 

708 cdef size_t output_size = 0 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPeQe

709 cdef size_t logsize = 0 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPeQe

710 cdef vector[const char*] options_vec 

711 cdef char* data_ptr = NULL 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPeQe

712 cdef bytes name_bytes 

713 cdef const char* name_ptr = NULL 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPeQe

714 cdef const char* lowered_name = NULL 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPeQe

715 cdef dict symbol_mapping = {} 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPeQe

716  

717 # Add name expressions before compilation 

718 if name_expressions: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPeQe

719 for n in name_expressions: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbh i j k l m n o p q r s t u v w x y z A B C D E F G H I ObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$cQ R %c'c(c)c*c+c,c-c.c/c:c;c=c?c@cS T [c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudU V vdwdxdydzdAdBdCdDdEdFdGdHdIdJdW X KdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d

720 name_bytes = n.encode() if isinstance(n, str) else n 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbh i j k l m n o p q r s t u v w x y z A B C D E F G H I ObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$cQ R %c'c(c)c*c+c,c-c.c/c:c;c=c?c@cS T [c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudU V vdwdxdydzdAdBdCdDdEdFdGdHdIdJdW X KdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d

721 name_ptr = <const char*>name_bytes 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbh i j k l m n o p q r s t u v w x y z A B C D E F G H I ObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$cQ R %c'c(c)c*c+c,c-c.c/c:c;c=c?c@cS T [c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudU V vdwdxdydzdAdBdCdDdEdFdGdHdIdJdW X KdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d

722 HANDLE_RETURN_NVRTC(prog, cynvrtc.nvrtcAddNameExpression(prog, name_ptr)) 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbh i j k l m n o p q r s t u v w x y z A B C D E F G H I ObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$cQ R %c'c(c)c*c+c,c-c.c/c:c;c=c?c@cS T [c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudU V vdwdxdydzdAdBdCdDdEdFdGdHdIdJdW X KdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d

723  

724 # Build options array 

725 options_vec.resize(len(options_list)) 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPeQe

726 for i in range(len(options_list)): 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPeQe

727 options_vec[i] = <const char*>(<bytes>options_list[i]) 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPeQe

728  

729 # Compile 

730 with nogil: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPeQe

731 HANDLE_RETURN_NVRTC(prog, cynvrtc.nvrtcCompileProgram(prog, <int>options_vec.size(), options_vec.data())) 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPeQe

732  

733 # Get compiled output based on target type 

734 if target_type == "ptx": 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+dPeQe

735 HANDLE_RETURN_NVRTC(prog, cynvrtc.nvrtcGetPTXSize(prog, &output_size)) 2,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoeJ K d 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+dPeQe

736 data = bytearray(output_size) 2,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoeJ K d 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+dPeQe

737 data_ptr = <char*>(<bytearray>data) 2,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoeJ K d 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+dPeQe

738 with nogil: 2,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoeJ K d 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+dPeQe

739 HANDLE_RETURN_NVRTC(prog, cynvrtc.nvrtcGetPTX(prog, data_ptr)) 2,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoeJ K d 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+dPeQe

740 elif target_type == "cubin": 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I UeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-f

741 HANDLE_RETURN_NVRTC(prog, cynvrtc.nvrtcGetCUBINSize(prog, &output_size)) 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-f

742 data = bytearray(output_size) 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-f

743 data_ptr = <char*>(<bytearray>data) 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-f

744 with nogil: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-f

745 HANDLE_RETURN_NVRTC(prog, cynvrtc.nvrtcGetCUBIN(prog, data_ptr)) 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-f

746 else: # ltoir 

747 HANDLE_RETURN_NVRTC(prog, cynvrtc.nvrtcGetLTOIRSize(prog, &output_size)) 2UeO P 6f

748 data = bytearray(output_size) 2UeO P 6f

749 data_ptr = <char*>(<bytearray>data) 2UeO P 6f

750 with nogil: 2UeO P 6f

751 HANDLE_RETURN_NVRTC(prog, cynvrtc.nvrtcGetLTOIR(prog, data_ptr)) 2UeO P 6f

752  

753 # Get lowered names after compilation 

754 if name_expressions: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+dPeQe

755 for n in name_expressions: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbh i j k l m n o p q r s t u v w x y z A B C D E F G H I ObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$cQ R %c'c(c)c*c+c,c-c.c/c:c;c=c?c@cS T [c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudU V vdwdxdydzdAdBdCdDdEdFdGdHdIdJdW X KdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d

756 name_bytes = n.encode() if isinstance(n, str) else n 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbh i j k l m n o p q r s t u v w x y z A B C D E F G H I ObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$cQ R %c'c(c)c*c+c,c-c.c/c:c;c=c?c@cS T [c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudU V vdwdxdydzdAdBdCdDdEdFdGdHdIdJdW X KdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d

757 name_ptr = <const char*>name_bytes 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbh i j k l m n o p q r s t u v w x y z A B C D E F G H I ObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$cQ R %c'c(c)c*c+c,c-c.c/c:c;c=c?c@cS T [c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudU V vdwdxdydzdAdBdCdDdEdFdGdHdIdJdW X KdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d

758 HANDLE_RETURN_NVRTC(prog, cynvrtc.nvrtcGetLoweredName(prog, name_ptr, &lowered_name)) 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbh i j k l m n o p q r s t u v w x y z A B C D E F G H I ObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$cQ R %c'c(c)c*c+c,c-c.c/c:c;c=c?c@cS T [c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudU V vdwdxdydzdAdBdCdDdEdFdGdHdIdJdW X KdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d

759 symbol_mapping[n] = lowered_name if lowered_name != NULL else None 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbh i j k l m n o p q r s t u v w x y z A B C D E F G H I ObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$cQ R %c'c(c)c*c+c,c-c.c/c:c;c=c?c@cS T [c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudU V vdwdxdydzdAdBdCdDdEdFdGdHdIdJdW X KdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d

760  

761 # Get compilation log if requested 

762 if logs is not None: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+dPeQe

763 HANDLE_RETURN_NVRTC(prog, cynvrtc.nvrtcGetProgramLogSize(prog, &logsize)) 

764 if logsize > 1: 

765 log = bytearray(logsize) 

766 data_ptr = <char*>(<bytearray>log) 

767 with nogil: 

768 HANDLE_RETURN_NVRTC(prog, cynvrtc.nvrtcGetProgramLog(prog, data_ptr)) 

769 logs.write(log.decode("utf-8", errors="backslashreplace")) 

770  

771 return ObjectCode._init(bytes(data), target_type, symbol_mapping=symbol_mapping, name=name) 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+dPeQe

772  

773  

774cdef int _nvrtc_pch_apis_cached = -1 # -1 = unchecked 

775  

776cdef bint _has_nvrtc_pch_apis(): 

777 global _nvrtc_pch_apis_cached 

778 if _nvrtc_pch_apis_cached < 0: 1dcg

779 _nvrtc_pch_apis_cached = hasattr(nvrtc, "nvrtcGetPCHCreateStatus") 1c

780 return _nvrtc_pch_apis_cached 1dcg

781  

782  

783cdef str _PCH_STATUS_CREATED = "created" 

784cdef str _PCH_STATUS_NOT_ATTEMPTED = "not_attempted" 

785cdef str _PCH_STATUS_FAILED = "failed" 

786  

787  

788cdef str _read_pch_status(cynvrtc.nvrtcProgram prog): 

789 """Query nvrtcGetPCHCreateStatus and translate to a high-level string.""" 

790 cdef cynvrtc.nvrtcResult err 

791 with nogil: 1dcg

792 err = cynvrtc.nvrtcGetPCHCreateStatus(prog) 1dcg

793 if err == cynvrtc.nvrtcResult.NVRTC_SUCCESS: 1dcg

794 return _PCH_STATUS_CREATED 1dcg

795 if err == cynvrtc.nvrtcResult.NVRTC_ERROR_PCH_CREATE_HEAP_EXHAUSTED: 

796 return None # sentinel: caller should auto-retry 

797 if err == cynvrtc.nvrtcResult.NVRTC_ERROR_NO_PCH_CREATE_ATTEMPTED: 

798 return _PCH_STATUS_NOT_ATTEMPTED 

799 return _PCH_STATUS_FAILED 

800  

801  

802cdef object Program_compile_nvrtc(Program self, str target_type, object name_expressions, object logs): 

803 """Compile using NVRTC backend and return ObjectCode.""" 

804 cdef cynvrtc.nvrtcProgram prog = as_cu(self._h_nvrtc) 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPeQe

805 cdef list options_list = self._options.as_bytes("nvrtc", target_type) 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPeQe

806  

807 result = _nvrtc_compile_and_extract( 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPeQe

808 prog, target_type, name_expressions, logs, options_list, self._options.name, 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPeQe

809 ) 

810  

811 cdef bint pch_creation_possible = self._options.create_pch or self._options.pch 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+dPeQe

812 if not pch_creation_possible or not _has_nvrtc_pch_apis(): 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+dPeQe

813 self._pch_status = None 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-f5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeCeDe+dPeQe

814 return result 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-f5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeCeDe+dPeQe

815  

816 try: 1dcg

817 status = _read_pch_status(prog) 1dcg

818 except RuntimeError as e: 

819 raise RuntimeError( 

820 "PCH was requested but the runtime libnvrtc does not support " 

821 "PCH APIs. Update to CUDA toolkit 12.8 or newer." 

822 ) from e 

823  

824 if status is not None: 1dcg

825 self._pch_status = status 1dcg

826 return result 1dcg

827  

828 # Heap exhausted — auto-resize and retry with a fresh program 

829 cdef size_t required = 0 

830 with nogil: 

831 HANDLE_RETURN_NVRTC(prog, cynvrtc.nvrtcGetPCHHeapSizeRequired(prog, &required)) 

832 HANDLE_RETURN_NVRTC(NULL, cynvrtc.nvrtcSetPCHHeapSize(required)) 

833  

834 cdef cynvrtc.nvrtcProgram retry_prog 

835 cdef const char* code_ptr = <const char*>self._nvrtc_code 

836 cdef const char* name_ptr = <const char*>self._options._name 

837 with nogil: 

838 HANDLE_RETURN_NVRTC(NULL, cynvrtc.nvrtcCreateProgram( 

839 &retry_prog, code_ptr, name_ptr, 0, NULL, NULL)) 

840 self._h_nvrtc = create_nvrtc_program_handle(retry_prog) 

841  

842 result = _nvrtc_compile_and_extract( 

843 retry_prog, target_type, name_expressions, logs, options_list, self._options.name, 

844 ) 

845  

846 status = _read_pch_status(retry_prog) 

847 self._pch_status = status if status is not None else _PCH_STATUS_FAILED 

848 return result 

849  

850  

851cdef object Program_compile_nvvm(Program self, str target_type, object logs): 

852 """Compile using NVVM backend and return ObjectCode.""" 

853 cdef cynvvm.nvvmProgram prog = as_cu(self._h_nvvm) 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b

854 cdef size_t output_size = 0 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b

855 cdef size_t logsize = 0 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b

856 cdef vector[const char*] options_vec 

857 cdef char* data_ptr = NULL 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b

858 cdef bytes libdevice_bytes 

859 cdef const char* libdevice_ptr 

860 cdef size_t libdevice_len 

861 # Build options array 

862 options_list = self._options.as_bytes("nvvm", target_type) 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b

863 options_vec.resize(len(options_list)) 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b

864 for i in range(len(options_list)): 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b

865 options_vec[i] = <const char*>(<bytes>options_list[i]) 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b

866  

867 # Serialize NVVM program mutation/use per Program instance. 

868 with self._compile_lock: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b

869 with nogil: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b

870 HANDLE_RETURN_NVVM(prog, cynvvm.nvvmVerifyProgram(prog, <int>options_vec.size(), options_vec.data())) 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b

871  

872 # Load libdevice if requested - following numba-cuda. 

873 if self._use_libdevice and not self._libdevice_added: 2ReSeMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b

874 libdevice_path = _find_libdevice_path() 

875 with open(libdevice_path, "rb") as f: 

876 libdevice_bytes = f.read() 

877 libdevice_ptr = <const char*>libdevice_bytes 

878 libdevice_len = len(libdevice_bytes) 

879 with nogil: 

880 HANDLE_RETURN_NVVM(prog, cynvvm.nvvmLazyAddModuleToProgram( 

881 prog, libdevice_ptr, libdevice_len, NULL)) 

882 self._libdevice_added = True 

883  

884 with nogil: 2ReSeMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b

885 HANDLE_RETURN_NVVM(prog, cynvvm.nvvmCompileProgram(prog, <int>options_vec.size(), options_vec.data())) 2ReSeMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b

886  

887 HANDLE_RETURN_NVVM(prog, cynvvm.nvvmGetCompiledResultSize(prog, &output_size)) 2ReSeMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b

888 data = bytearray(output_size) 2ReSeMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b

889 data_ptr = <char*>(<bytearray>data) 2ReSeMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b

890 with nogil: 2ReSeMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b

891 HANDLE_RETURN_NVVM(prog, cynvvm.nvvmGetCompiledResult(prog, data_ptr)) 2ReSeMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b

892  

893 # Get compilation log if requested 

894 if logs is not None: 2ReSeMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b

895 HANDLE_RETURN_NVVM(prog, cynvvm.nvvmGetProgramLogSize(prog, &logsize)) 

896 if logsize > 1: 

897 log = bytearray(logsize) 

898 data_ptr = <char*>(<bytearray>log) 

899 with nogil: 

900 HANDLE_RETURN_NVVM(prog, cynvvm.nvvmGetProgramLog(prog, data_ptr)) 

901 logs.write(log.decode("utf-8", errors="backslashreplace")) 

902  

903 return ObjectCode._init(bytes(data), target_type, name=self._options.name) 2ReSeMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b

904  

905# Supported target types per backend 

906cdef dict SUPPORTED_TARGETS = { 

907 "NVRTC": ("ptx", "cubin", "ltoir"), 

908 "NVVM": ("ptx", "ltoir"), 

909 "nvJitLink": ("cubin", "ptx"), 

910 "driver": ("cubin", "ptx"), 

911} 

912  

913  

914cdef object Program_compile(Program self, str target_type, object name_expressions, object logs): 

915 """Compile the program to the specified target type.""" 

916 # Validate target_type for this backend 

917 supported = SUPPORTED_TARGETS.get(self._backend) 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fReSed 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_f`f~fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b kgPeagbgcgdgegfggghgQeig

918 if supported is None: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fReSed 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_f`f~fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b kgPeagbgcgdgegfggghgQeig

919 raise ValueError(f'Unknown backend="{self._backend}"') 

920 if target_type not in supported: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fReSed 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_f`f~fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b kgPeagbgcgdgegfggghgQeig

921 raise ValueError( 2~fkg

922 f'Unsupported target_type="{target_type}" for {self._backend} ' 2~fkg

923 f'(supported: {", ".join(repr(t) for t in supported)})' 2~fkg

924 ) 

925  

926 if self._backend == "NVRTC": 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fReSed 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_f`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b PeagbgcgdgegfggghgQeig

927 if target_type == "ptx" and not _can_load_generated_ptx(): 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPeQe

928 warn( 2,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoeJ K d 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPeQe

929 "The CUDA driver version is older than the backend version. " 

930 "The generated ptx will not be loadable by the current driver.", 

931 stacklevel=2, 

932 category=RuntimeWarning, 2,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoeJ K d 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPeQe

933 ) 

934 return Program_compile_nvrtc(self, target_type, name_expressions, logs) 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPeQe

935  

936 elif self._backend == "NVVM": 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b agbgcgdgegfggghgig

937 return Program_compile_nvvm(self, target_type, logs) 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b

938  

939 else: 

940 return self._linker.link(target_type) 2agbgcgdgegfggghgig

941  

942  

943cdef inline list _prepare_nvrtc_options_impl(object opts): 

944 """Build NVRTC-specific compiler options.""" 

945 options = [f"-arch={opts.arch}"] 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

946 if opts.relocatable_device_code is not None: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

947 options.append(f"--relocatable-device-code={_handle_boolean_option(opts.relocatable_device_code)}") 2,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoe$d

948 if opts.extensible_whole_program is not None and opts.extensible_whole_program: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

949 options.append("--extensible-whole-program") 2ue

950 if opts.debug is not None and opts.debug: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

951 options.append("--device-debug") 2!d#d{f

952 if opts.lineinfo is not None and opts.lineinfo: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

953 options.append("--generate-line-info") 2{f

954 if opts.device_code_optimize is not None and opts.device_code_optimize: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

955 options.append("--dopt=on") 2!d

956 if opts.ptxas_options is not None: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

957 opt_name = "--ptxas-options" 1YZ

958 if isinstance(opts.ptxas_options, str): 1YZ

959 options.append(f"{opt_name}={opts.ptxas_options}") 

960 elif is_sequence(opts.ptxas_options): 1YZ

961 for opt_value in opts.ptxas_options: 1YZ

962 options.append(f"{opt_name}={opt_value}") 1YZ

963 if opts.max_register_count is not None: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

964 options.append(f"--maxrregcount={opts.max_register_count}") 2$d

965 if opts.ftz is not None: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

966 options.append(f"--ftz={_handle_boolean_option(opts.ftz)}") 29d{f

967 if opts.prec_sqrt is not None: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

968 options.append(f"--prec-sqrt={_handle_boolean_option(opts.prec_sqrt)}") 29d

969 if opts.prec_div is not None: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

970 options.append(f"--prec-div={_handle_boolean_option(opts.prec_div)}") 29d

971 if opts.fma is not None: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

972 options.append(f"--fmad={_handle_boolean_option(opts.fma)}") 2%d

973 if opts.use_fast_math is not None and opts.use_fast_math: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

974 options.append("--use_fast_math") 2%d

975 if opts.extra_device_vectorization is not None and opts.extra_device_vectorization: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

976 options.append("--extra-device-vectorization") 2pe

977 if opts.link_time_optimization is not None and opts.link_time_optimization: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

978 options.append("--dlink-time-opt") 2UeO P qe

979 if opts.gen_opt_lto is not None and opts.gen_opt_lto: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

980 options.append("--gen-opt-lto") 2we

981 if opts.define_macro is not None: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

982 _process_define_macro(options, opts.define_macro) 1NLef

983 if opts.undefine_macro is not None: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

984 if isinstance(opts.undefine_macro, str): 26d7d

985 options.append(f"--undefine-macro={opts.undefine_macro}") 27d

986 elif is_sequence(opts.undefine_macro): 26d

987 for macro in opts.undefine_macro: 26d

988 options.append(f"--undefine-macro={macro}") 26d

989 if opts.include_path is not None: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

990 if isinstance(opts.include_path, str): 2GeHeIeJeKeh i j k l m n o p q r s t u v w x y z A B C D E F G H I 7d

991 options.append(f"--include-path={opts.include_path}") 27d

992 elif is_sequence(opts.include_path): 2GeHeIeJeKeh i j k l m n o p q r s t u v w x y z A B C D E F G H I

993 for path in opts.include_path: 2GeHeIeJeKeh i j k l m n o p q r s t u v w x y z A B C D E F G H I

994 options.append(f"--include-path={path}") 2GeHeIeJeKeh i j k l m n o p q r s t u v w x y z A B C D E F G H I

995 if opts.pre_include is not None: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

996 if isinstance(opts.pre_include, str): 

997 options.append(f"--pre-include={opts.pre_include}") 

998 elif is_sequence(opts.pre_include): 

999 for header in opts.pre_include: 

1000 options.append(f"--pre-include={header}") 

1001 if opts.no_source_include is not None and opts.no_source_include: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

1002 options.append("--no-source-include") 2ye

1003 if opts.std is not None: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

1004 options.append(f"--std={opts.std}") 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeh i j k l m n o p q r s t u v w x y z A B C D E F G H I LcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$cQ R %c'c(c)c*c+c,c-c.c/c:c;c=c?c@cS T [c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudU V vdwdxdydzdAdBdCdDdEdFdGdHdIdJdW X KdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3dY Z

1005 if opts.builtin_move_forward is not None: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

1006 options.append(f"--builtin-move-forward={_handle_boolean_option(opts.builtin_move_forward)}") 2te

1007 if opts.builtin_initializer_list is not None: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

1008 options.append(f"--builtin-initializer-list={_handle_boolean_option(opts.builtin_initializer_list)}") 2'd

1009 if opts.disable_warnings is not None and opts.disable_warnings: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

1010 options.append("--disable-warnings") 2'd

1011 if opts.restrict is not None and opts.restrict: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

1012 options.append("--restrict") 2(d

1013 if opts.device_as_default_execution_space is not None and opts.device_as_default_execution_space: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

1014 options.append("--device-as-default-execution-space") 2(d

1015 if opts.device_int128 is not None and opts.device_int128: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

1016 options.append("--device-int128") 2)d

1017 if opts.device_float128 is not None and opts.device_float128: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

1018 options.append("--device-float128") 

1019 if opts.optimization_info is not None: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

1020 options.append(f"--optimization-info={opts.optimization_info}") 2)d

1021 if opts.no_display_error_number is not None and opts.no_display_error_number: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

1022 options.append("--no-display-error-number") 2re

1023 if opts.diag_error is not None: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

1024 if isinstance(opts.diag_error, int): 28dM

1025 options.append(f"--diag-error={opts.diag_error}") 28d

1026 elif is_sequence(opts.diag_error): 1M

1027 for error in opts.diag_error: 1M

1028 options.append(f"--diag-error={error}") 1M

1029 if opts.diag_suppress is not None: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

1030 if isinstance(opts.diag_suppress, int): 28dM

1031 options.append(f"--diag-suppress={opts.diag_suppress}") 28d

1032 elif is_sequence(opts.diag_suppress): 1M

1033 for suppress in opts.diag_suppress: 1M

1034 options.append(f"--diag-suppress={suppress}") 1M

1035 if opts.diag_warn is not None: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

1036 if isinstance(opts.diag_warn, int): 2*d

1037 options.append(f"--diag-warn={opts.diag_warn}") 2*d

1038 elif is_sequence(opts.diag_warn): 

1039 for w in opts.diag_warn: 

1040 options.append(f"--diag-warn={w}") 

1041 if opts.brief_diagnostics is not None: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

1042 options.append(f"--brief-diagnostics={_handle_boolean_option(opts.brief_diagnostics)}") 2se

1043 if opts.time is not None: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

1044 options.append(f"--time={opts.time}") 

1045 if opts.split_compile is not None: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

1046 options.append(f"--split-compile={opts.split_compile}") 

1047 if opts.fdevice_syntax_only is not None and opts.fdevice_syntax_only: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

1048 options.append("--fdevice-syntax-only") 2ve

1049 if opts.minimal is not None and opts.minimal: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

1050 options.append("--minimal") 2xe

1051 if opts.no_cache is not None and opts.no_cache: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

1052 options.append("--no-cache") 2ze

1053 if opts.fdevice_time_trace is not None: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

1054 options.append(f"--fdevice-time-trace={opts.fdevice_time_trace}") 24d

1055 if opts.frandom_seed is not None: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

1056 options.append(f"--frandom-seed={opts.frandom_seed}") 2Ae

1057 if opts.ofast_compile is not None: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

1058 options.append(f"--Ofast-compile={opts.ofast_compile}") 2Be

1059 # PCH options (CUDA 12.8+) 

1060 if opts.pch is not None and opts.pch: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

1061 options.append("--pch") 1g

1062 if opts.create_pch is not None: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

1063 options.append(f"--create-pch={opts.create_pch}") 1dc

1064 if opts.use_pch is not None: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

1065 options.append(f"--use-pch={opts.use_pch}") 1c

1066 if opts.pch_dir is not None: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

1067 options.append(f"--pch-dir={opts.pch_dir}") 

1068 if opts.pch_verbose is not None: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

1069 options.append(f"--pch-verbose={_handle_boolean_option(opts.pch_verbose)}") 2Ce

1070 if opts.pch_messages is not None: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

1071 options.append(f"--pch-messages={_handle_boolean_option(opts.pch_messages)}") 2De

1072 if opts.instantiate_templates_in_pch is not None: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

1073 options.append( 2+d

1074 f"--instantiate-templates-in-pch={_handle_boolean_option(opts.instantiate_templates_in_pch)}" 2+d

1075 ) 

1076 if opts.numba_debug: 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

1077 options.append("--numba-debug") 2#d

1078 return [o.encode() for o in options] 20 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbGeHeIeVeJeKeWeh i j k l m n o p q r s t u v w x y z A B C D E F G H I ,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeUeneoeObPbQbRbSbTbXeUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bO P J K 9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcYeMcZe0eNc1eOc2ePcQcRc3eSc4eTcUcVcWcXcYcZc0c1c2c5e3c6e4c7e5c8e6c7c8c9e9c!e!c#c$c#eQ $e%e'e(e)e*e+e,e-eR .e/e:e;e=e%c'c(c)c*c+c,c-c.c/c:c;c?e=c@e?c@c[eS ]e^e_e`e{e|e}e~eafbfT cfdfefffgf[c]c^chf_cif`cjf{ckf|c}c~clfadmfbdcdddedfdgdhdidjdkdnfldofmdpfndqfodpdqdrfrdsfsdtdudtfU ufvfwfxfyfzfAfBfCfV DfEfFfGfHfvdwdxdydzdAdBdCdDdEdFdGdIfHdJfIdJdKfW LfMfNfOfPfQfRfSfTfUfX VfWfXfYfZfKdLdMd0fNd1f2f3fOd4fPd5f6fQd7fRd8fSd9fTd!fUd#fVd$fWd%fXd'fYd(fZd)f0d*f1d+f2d,f3d-fd 5dc 4dLe!d#d$d9d%dpeqeN L e f 6d7d'd(d)dre8dM *dY Z seteuevewexeyezeAeBeg CeDe+d_fPe{fQe

1079  

1080  

1081cdef inline object _prepare_nvvm_options_impl(object opts, bint as_bytes): 

1082 """Build NVVM-specific compiler options.""" 

1083 options = [] 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1084  

1085 # Options supported by NVVM 

1086 assert opts.arch is not None 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1087 arch = opts.arch 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1088 if arch.startswith("sm_"): 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1089 arch = f"compute_{arch[3:]}" 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1090 options.append(f"-arch={arch}") 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1091 if opts.debug is not None and opts.debug: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1092 options.append("-g") 2|f

1093 if opts.device_code_optimize is False: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1094 options.append("-opt=0") 2.f?f/f@f;f]f

1095 elif opts.device_code_optimize is True: 2ReSe`fMe:f[fEeNeFeOe=f^fa b }f|f

1096 options.append("-opt=3") 2EeNeFeOe|f

1097 # NVVM uses 0/1 instead of true/false for boolean options 

1098 if opts.ftz is not None: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1099 options.append(f"-ftz={'1' if opts.ftz else '0'}") 2EeNeFeOe|f

1100 if opts.prec_sqrt is not None: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1101 options.append(f"-prec-sqrt={'1' if opts.prec_sqrt else '0'}") 2EeNeFeOe

1102 if opts.prec_div is not None: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1103 options.append(f"-prec-div={'1' if opts.prec_div else '0'}") 2EeNeFeOe

1104 if opts.fma is not None: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1105 options.append(f"-fma={'1' if opts.fma else '0'}") 2EeNeFeOe

1106  

1107 # Check for unsupported options and raise error if they are set 

1108 unsupported = [] 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1109 if opts.relocatable_device_code is not None: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1110 unsupported.append("relocatable_device_code") 

1111 if opts.extensible_whole_program is not None and opts.extensible_whole_program: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1112 unsupported.append("extensible_whole_program") 

1113 if opts.lineinfo is not None and opts.lineinfo: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1114 unsupported.append("lineinfo") 2}f

1115 if opts.ptxas_options is not None: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1116 unsupported.append("ptxas_options") 

1117 if opts.max_register_count is not None: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1118 unsupported.append("max_register_count") 

1119 if opts.use_fast_math is not None and opts.use_fast_math: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1120 unsupported.append("use_fast_math") 

1121 if opts.extra_device_vectorization is not None and opts.extra_device_vectorization: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1122 unsupported.append("extra_device_vectorization") 

1123 if opts.gen_opt_lto is not None and opts.gen_opt_lto: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1124 unsupported.append("gen_opt_lto") 

1125 if opts.define_macro is not None: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1126 unsupported.append("define_macro") 

1127 if opts.undefine_macro is not None: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1128 unsupported.append("undefine_macro") 

1129 if opts.include_path is not None: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1130 unsupported.append("include_path") 

1131 if opts.pre_include is not None: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1132 unsupported.append("pre_include") 

1133 if opts.no_source_include is not None and opts.no_source_include: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1134 unsupported.append("no_source_include") 

1135 if opts.std is not None: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1136 unsupported.append("std") 

1137 if opts.builtin_move_forward is not None: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1138 unsupported.append("builtin_move_forward") 

1139 if opts.builtin_initializer_list is not None: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1140 unsupported.append("builtin_initializer_list") 

1141 if opts.disable_warnings is not None and opts.disable_warnings: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1142 unsupported.append("disable_warnings") 

1143 if opts.restrict is not None and opts.restrict: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1144 unsupported.append("restrict") 

1145 if opts.device_as_default_execution_space is not None and opts.device_as_default_execution_space: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1146 unsupported.append("device_as_default_execution_space") 

1147 if opts.device_int128 is not None and opts.device_int128: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1148 unsupported.append("device_int128") 

1149 if opts.optimization_info is not None: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1150 unsupported.append("optimization_info") 

1151 if opts.no_display_error_number is not None and opts.no_display_error_number: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1152 unsupported.append("no_display_error_number") 

1153 if opts.diag_error is not None: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1154 unsupported.append("diag_error") 

1155 if opts.diag_suppress is not None: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1156 unsupported.append("diag_suppress") 

1157 if opts.diag_warn is not None: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1158 unsupported.append("diag_warn") 

1159 if opts.brief_diagnostics is not None: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1160 unsupported.append("brief_diagnostics") 

1161 if opts.time is not None: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1162 unsupported.append("time") 

1163 if opts.split_compile is not None: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1164 unsupported.append("split_compile") 

1165 if opts.fdevice_syntax_only is not None and opts.fdevice_syntax_only: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1166 unsupported.append("fdevice_syntax_only") 

1167 if opts.minimal is not None and opts.minimal: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1168 unsupported.append("minimal") 

1169 if opts.numba_debug is not None and opts.numba_debug: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1170 unsupported.append("numba_debug") 

1171 if unsupported: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b }f|f

1172 raise CUDAError(f"The following options are not supported by NVVM backend: {', '.join(unsupported)}") 2}f

1173  

1174 if as_bytes: 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b |f

1175 return [o.encode() for o in options] 2ReSe`fMe.f?f/f@f:f[fEeNe;f]fFeOe=f^fa b |f

1176 else: 

1177 return options