Coverage for cuda/core/_program.pyx: 79.76%
741 statements
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-16 01:23 +0000
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-16 01:23 +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.
6This module provides :class:`Program` for compiling source code into
7:class:`~cuda.core.ObjectCode`, with :class:`ProgramOptions` for configuration.
8"""
10from __future__ import annotations
12from dataclasses import dataclass
13import os
14import re
15import sys
16import tempfile
17import threading
18from typing import TYPE_CHECKING
19from warnings import warn
21if TYPE_CHECKING:
22 from cuda.core.utils._program_cache import ProgramCacheResource # no-cython-lint
24from cuda.bindings import nvrtc
25from cuda.pathfinder._optional_cuda_import import _optional_cuda_import
27from libcpp.vector cimport vector
29from ._rt cimport (
30 as_cu,
31 as_py,
32 create_nvrtc_program_handle,
33 create_nvvm_program_handle,
34)
35from cuda.bindings cimport cynvrtc, cynvvm
36from cuda.core._utils.cuda_utils cimport HANDLE_RETURN_NVRTC, HANDLE_RETURN_NVVM
37from cuda.core._device import Device
38from cuda.core._linker import Linker, LinkerHandleT, LinkerOptions
39from cuda.core._module import ObjectCode
40from cuda.core._utils.clear_error_support import assert_type
41from cuda.core._utils.cuda_utils import (
42 CUDAError,
43 _handle_boolean_option,
44 check_or_create_options,
45 handle_return,
46 is_nested_sequence,
47 is_sequence,
48)
49from cuda.core._utils.version import driver_version
50from cuda.core.utils._cache_dir import _default_cache_dir
51from cuda.core.typing import ObjectCodeFormatType, CompilerBackendType, PCHStatusType, SourceCodeType
53__all__ = ["Program", "ProgramOptions"]
55ProgramHandleT = nvrtc.nvrtcProgram | int | LinkerHandleT
56"""Type alias for program handle types across different backends.
58The ``int`` type covers NVVM handles, which don't have a wrapper class.
59"""
62# =============================================================================
63# Principal Class
64# =============================================================================
67cdef inline int Program_check_open(Program self) except -1:
68 if self.is_closed: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfPdQdJgk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c Mdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e DgYe-fGe.fNf/f:f;f=fHe?f@f[f]f^fD Iegfefffhfx jfifHgEgFgGglfIgkfy Kg
69 raise RuntimeError("Program has been closed") 2Jg
70 return 0 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfPdQdk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c Mdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e DgYe-fGe.fNf/f:f;f=fHe?f@f[f]f^fD Iegfefffhfx jfifHgEgFgGglfIgkfy Kg
73cdef class Program:
74 """Represent a compilation machinery to process programs into
75 :class:`~cuda.core.ObjectCode`.
77 This object provides a unified interface to multiple underlying
78 compiler libraries. Compilation support is enabled for a wide
79 range of code types and compilation types.
81 Parameters
82 ----------
83 code : str | bytes | bytearray
84 The source code to compile. For C++ and PTX, must be a string.
85 For NVVM IR, can be str, bytes, or bytearray.
86 code_type : SourceCodeType | str
87 The type of source code. Must be one of ``"c++"``, ``"ptx"``, or ``"nvvm"``.
88 options : :class:`ProgramOptions`, optional
89 Options to customize the compilation process.
90 """
91 def __init__(self, code: str | bytes | bytearray, code_type: SourceCodeType | str, options: ProgramOptions | None = None):
92 Program_init(self, code, str(code_type), options) 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdWgnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;eXgMgvd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eYgHdafIdbfZgPdQdJgk I 0gj J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c CgMdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e 1gRgNgzgAgDgYeQg3g2gPgVgBg-fGe.fNf/f:f;f=fHe?f@f[f]f^fD Iegfefffhfx jfifHgEgFgGglfIgkfy Kg
94 def close(self) -> None:
95 """Destroy this program."""
96 if self._linker is not None: 2$gPdQdJgk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c CgMdcf,fq NdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e NgBg/f:f;f=f?f@f[f]f^fD Ie
97 self._linker.close() 2Bg/f:f;f=f?f@f[f]f^f
98 # Reset handles - the C++ shared_ptr destructor handles cleanup
99 self._h_nvrtc.reset() 2$gPdQdJgk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c CgMdcf,fq NdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e NgBg/f:f;f=f?f@f[f]f^fD Ie
100 self._h_nvvm.reset() 2$gPdQdJgk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c CgMdcf,fq NdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e NgBg/f:f;f=f?f@f[f]f^fD Ie
101 self._cleanup_debug_source() 2$gPdQdJgk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c CgMdcf,fq NdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e NgBg/f:f;f=f?f@f[f]f^fD Ie
103 def __dealloc__(self):
104 self._cleanup_debug_source() 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmd,hnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;e-h.hvd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~e/hHdafIdbf:hPdQdJgk I 0gj J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c CgMdcf,fq NdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e 1gRgNgzgAgDgQg3g2gPgVgBg-fGe.fNf/f:f;f=fHe?f@f[f]f^fD Iegfefffhfx jfifHgEgFgGgIgy Kg
106 def _cleanup_debug_source(self):
107 # Only a temp file this Program wrote may be removed, so its path is kept
108 # in a dedicated attribute rather than derived from _nvrtc_name and
109 # _options. When a Program dies inside a reference cycle, the cyclic
110 # collector clears the object attributes of everything in the cycle
111 # before __dealloc__ runs: _options may already be None, or the
112 # ProgramOptions may already have lost its fields (#2876). A bytes
113 # attribute is left alone by that clearing.
114 path = self._debug_source 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmd$g,hnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;e-h.hvd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~e/hHdafIdbf:hPdQdJgk I 0gj J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c CgMdcf,fq NdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e 1gRgNgzgAgDgQg3g2gPgVgBg-fGe.fNf/f:f;f=fHe?f@f[f]f^fD Iegfefffhfx jfifHgEgFgGgIgy Kg
115 if path is not None: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmd$g,hnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;e-h.hvd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~e/hHdafIdbf:hPdQdJgk I 0gj J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c CgMdcf,fq NdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e 1gRgNgzgAgDgQg3g2gPgVgBg-fGe.fNf/f:f;f=fHe?f@f[f]f^fD Iegfefffhfx jfifHgEgFgGgIgy Kg
116 self._debug_source = None 2f g a b c zgAg
117 self._unlink_debug_source(path.decode()) 2f g a b c zgAg
119 def _unlink_debug_source(self, path: str) -> None:
120 try: 2f g a h b c zgAg
121 os.unlink(path) 2f g a h b c zgAg
122 except OSError:
123 pass
125 def _try_materialize_nvrtc_debug_source(self, code: str) -> str | None:
126 """Write *code* to a ``{caller}_{kernel}_XXXXXXXX.cu`` temp file for cuda-gdb.
128 ``caller`` is the Python file stem (no ``.py``). ``kernel`` is the first
129 ``__global__`` function name, or ``kernel`` if none is found.
131 Returns None if the filesystem is not writable, so the caller can fall back
132 to the label-only behavior instead of failing the compile.
133 """
134 frame = sys._getframe() 2f g a h i b c zgAg
135 while frame and frame.f_globals.get("__name__", "").startswith("cuda.core"): 2f g a h i b c zgAg
136 frame = frame.f_back
137 caller = "program" 2f g a h i b c zgAg
138 if frame: 2f g a h i b c zgAg
139 caller = os.path.splitext(os.path.basename(frame.f_code.co_filename))[0] 2f g a h i b c zgAg
140 match = re.search(r"__global__.*?(\w+)\s*\(", code, re.DOTALL) 2f g a h i b c zgAg
141 prefix = re.sub(r"\W", "_", f"{caller}_{match.group(1) if match else 'kernel'}_") 2f g a h i b c zgAg
142 try: 2f g a h i b c zgAg
143 fd, path = tempfile.mkstemp(prefix=prefix, suffix=".cu") 2f g a h i b c zgAg
144 except OSError: 1i
145 return None 1i
146 try: 2f g a h b c zgAg
147 with os.fdopen(fd, "w", encoding="utf-8") as f: 2f g a h b c zgAg
148 f.write(code) 2f g a h b c zgAg
149 return path 2f g a b c zgAg
150 except OSError: 1h
151 self._unlink_debug_source(path) 1h
152 return None 1h
154 @property
155 def is_closed(self) -> bool:
156 """Whether this program has been closed."""
157 if self._backend == "NVRTC": 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmd$gnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfPdQdJgk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c Mdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e DgYe-fGe.fNf/f:f;f=fHe?f@f[f]f^fD Iegfefffhfx jfifHgEgFgGglfIgkfy Kg
158 return self._h_nvrtc.get() == NULL 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmd$gnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfJgk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c DgYeGeHeD Iegfefffhfx jfifHgEgFgGglfIgkfy Kg
159 if self._backend == "NVVM": 2PdQdMdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e -f.fNf/f:f;f=f?f@f[f]f^f
160 return self._h_nvvm.get() == NULL 2PdQdMdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e
161 return self._linker is None or self._linker.is_closed 2-f.fNf/f:f;f=f?f@f[f]f^f
163 def compile(
164 self,
165 target_type: ObjectCodeFormatType | str,
166 name_expressions: tuple[str, ...] | list[str] = (),
167 logs: object = None,
168 *,
169 cache: ProgramCacheResource | None = None,
170 ) -> ObjectCode:
171 """Compile the program to the specified target type.
173 Parameters
174 ----------
175 target_type : ObjectCodeFormatType | str
176 The compilation target. Must be one of ``"ptx"``, ``"cubin"``, or ``"ltoir"``.
177 name_expressions : tuple | list, optional
178 Sequence of name expressions to make accessible in the compiled code.
179 Used for template instantiation and similar cases.
180 logs : object, optional
181 Object with a ``write`` method to receive compilation logs.
182 On a cache hit no compilation runs and ``logs`` receives
183 nothing -- callers that rely on log output to confirm a
184 compile happened should compile without ``cache=``.
185 cache : :class:`~cuda.core.utils.ProgramCacheResource`, optional
186 If provided, the compiled binary is looked up in ``cache`` via a
187 key derived from the program's code, options, and ``target_type``.
188 On a hit the cached bytes are wrapped in a fresh
189 :class:`~cuda.core.ObjectCode` (with the same ``target_type``
190 and ``ProgramOptions.name``) and returned without re-compiling;
191 on a miss the compile output is stored as raw bytes (the cache
192 extracts ``bytes(object_code.code)``). Passing a non-empty
193 ``name_expressions`` together with ``cache=`` raises
194 ``ValueError``: NVRTC populates
195 ``ObjectCode.symbol_mapping`` at compile time and that mapping
196 is not carried in the binary the cache stores, so cache hits
197 would silently miss ``get_kernel(name_expression)`` lookups.
198 Options that require an ``extra_digest`` (``include_path``,
199 ``pre_include``, ``pch``, ``use_pch``, ``pch_dir``, NVVM
200 ``use_libdevice=True``, or NVRTC ``options.name`` with a
201 directory component) raise ``ValueError`` via
202 :func:`~cuda.core.utils.make_program_cache_key`; for those
203 compiles, use the manual ``make_program_cache_key(...)``
204 pattern directly.
206 ``cache=`` is independent of ``ProgramOptions.no_cache``: the
207 former controls this program-level cache (compiled-output
208 reuse across calls), while ``no_cache`` is forwarded to the
209 Linker to disable its in-process JIT cache for cuLink/nvJitLink.
210 Setting ``options.no_cache=True`` does not bypass ``cache=``,
211 and vice-versa.
213 Returns
214 -------
215 :class:`~cuda.core.ObjectCode`
216 The compiled object code.
217 """
218 Program_check_open(self) 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfPdQdJgk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c Mdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e DgYe-fGe.fNf/f:f;f=fHe?f@f[f]f^fD Iegfefffhfx jfifHgEgFgGglfIgkfy Kg
219 # Mirror Program_init's code_type normalization so callers can pass
220 # ``ObjectCodeFormatType.PTX`` or ``"PTX"`` and get the same routing
221 # / cache key as the lowercase string. ``Program_compile_nvrtc``
222 # keys on lowercase ``target_type`` and ``make_program_cache_key``
223 # lowercases too.
224 target_type = str(target_type).lower() 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfPdQdk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c Mdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e DgYe-fGe.fNf/f:f;f=fHe?f@f[f]f^fD Iegfefffhfx jfifHgEgFgGglfIgkfy Kg
226 if cache is None: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfPdQdk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c Mdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e DgYe-fGe.fNf/f:f;f=fHe?f@f[f]f^fD Iegfefffhfx jfifHgEgFgGglfIgkfy Kg
227 return _program_compile_uncached(self, target_type, name_expressions, logs) 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfPdQdk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c Mdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e DgYe-fGe.fNf/f:f;f=fHe?f@f[f]f^fD IeKg
229 # Deferred import to avoid a circular import between _program and
230 # cuda.core.utils._program_cache (the cache module already imports
231 # ProgramOptions from this module). Import from the leaf module so
232 # tests that monkeypatch make_program_cache_key via that path
233 # intercept reliably.
234 from cuda.core.utils._program_cache import ( 2gfefffhfx jfifHgEgFgGglfIgkfy
235 ProgramCacheResource,
236 make_program_cache_key,
237 )
239 if not isinstance(cache, ProgramCacheResource): 2gfefffhfx jfifHgEgFgGglfIgkfy
240 raise TypeError( 2Hg
241 "cache must be an instance of " 2Hg
242 "cuda.core.utils.ProgramCacheResource; got "
243 f"{type(cache).__name__}" 2Hg
244 )
246 # ``name_expressions`` is incompatible with the cache: NVRTC
247 # populates ``ObjectCode.symbol_mapping`` from name-expression
248 # mangling at compile time, and that mapping isn't carried in
249 # the binary bytes the cache stores. Without this guard the
250 # first call (cache miss) would return an ObjectCode with
251 # symbol_mapping populated, while every subsequent call (hit)
252 # would return one without -- silently breaking later
253 # ``get_kernel(name_expression)`` lookups that work on the
254 # uncached path. Fail loud here instead.
255 if name_expressions: 2gfefffhfx jfifEgFgGglfIgkfy
256 raise ValueError( 2Ig
257 "Program.compile(cache=...) does not support name_expressions: "
258 "ObjectCode.symbol_mapping is populated by NVRTC at compile "
259 "time and is not preserved across a cache round-trip, so cache "
260 "hits would silently break get_kernel(name_expression) lookups "
261 "that the uncached path supports. Compile without cache= when "
262 "name_expressions are needed, or look up mangled symbols by "
263 "hand from the cached ObjectCode."
264 )
266 # ``self._code`` is always stored as bytes (see ``Program_init``),
267 # but ``make_program_cache_key`` only accepts bytes when
268 # ``code_type == "nvvm"`` -- c++/ptx must be ``str``. The bytes
269 # came from ``code.encode()`` on a ``str`` Program_init validated
270 # via ``assert_type(code, str)``, so this round-trip is always
271 # safe; no try/except needed.
272 code_for_key = self._code if self._code_type == "nvvm" else self._code.decode("utf-8") 2gfefffhfx jfifEgFgGglfkfy
274 key = make_program_cache_key( 2gfefffhfx jfifEgFgGglfkfy
275 code=code_for_key,
276 code_type=self._code_type,
277 options=self._options,
278 target_type=target_type, 2gfefffhfx jfifEgFgGglfkfy
279 )
280 hit_bytes = cache.get(key) 2gfefffhfx jfiflfkfy
281 if hit_bytes is not None: 2gfefffhfx jfifkfy
282 # The uncached NVRTC path warns when the active driver can't
283 # load freshly-generated PTX; that loadability is a property
284 # of the driver, not of how the bytes were produced, so the
285 # warning applies equally to cached PTX. Mirror it here so a
286 # cache hit doesn't silently hide an incompatibility that the
287 # uncached call would have surfaced.
288 if ( 2gfefffhfx y
289 self._backend == "NVRTC" 2gfefffhfx y
290 and target_type == "ptx" 2gfefffhfx y
291 and not _can_load_generated_ptx() 2efff
292 ):
293 warn( 2ef
294 "The CUDA driver version is older than the backend version. "
295 "The generated ptx will not be loadable by the current driver.",
296 stacklevel=2,
297 category=RuntimeWarning, 2ef
298 )
299 return ObjectCode._init(hit_bytes, target_type, name=self._nvrtc_name.decode()) 2gfefffhfx y
300 compiled = _program_compile_uncached(self, target_type, name_expressions, logs) 2gfx jfifkfy
301 cache[key] = compiled 2gfx ifkfy
302 return compiled 2gfx ify
304 @property
305 def pch_status(self) -> PCHStatusType | None:
306 """PCH creation outcome from the most recent :meth:`compile` call.
308 Possible values:
310 * ``"created"`` — PCH file was written successfully.
311 * ``"not_attempted"`` — PCH creation was not attempted (e.g. the
312 compiler decided not to, or automatic PCH processing skipped it).
313 * ``"failed"`` — an error prevented PCH creation.
314 * ``None`` — PCH was not requested, the program has not been
315 compiled yet, the backend is not NVRTC (e.g. PTX or NVVM),
316 or the NVRTC bindings are too old to report status.
318 When ``create_pch`` is set in :class:`ProgramOptions` and the PCH
319 heap is too small, :meth:`compile` automatically resizes the heap
320 and retries, so ``"created"`` should be the common outcome.
322 .. note::
324 PCH is only supported for ``code_type="c++"`` programs that
325 use the NVRTC backend. For PTX and NVVM programs this property
326 always returns ``None``.
327 """
328 if self._pch_status is None: 1kI
329 return None 1kI
330 return PCHStatusType(self._pch_status) 1k
332 @property
333 def backend(self) -> CompilerBackendType:
334 """Return this Program instance's underlying :class:`CompilerBackendType`."""
335 return CompilerBackendType(self._backend) 2PdQdj J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeieCgFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e RgPg/f:f;f=f?f@f[f]f^f
337 @property
338 def handle(self) -> ProgramHandleT:
339 """Return the underlying handle object.
341 .. note::
343 The type of the returned object depends on the backend.
345 .. caution::
347 This handle is a Python object. To get the memory address of the underlying C
348 handle, call ``int(Program.handle)``.
349 """
350 if self._backend == "NVRTC": 2$gCgFeQgPgBg
351 return as_py(self._h_nvrtc) 2$gQgPg
352 elif self._backend == "NVVM": 2CgFeBg
353 return as_py(self._h_nvvm) # returns int (NVVM uses raw integers) 2CgFe
354 else:
355 return self._linker.handle 2Bg
357 def __repr__(self) -> str:
358 return f"<Program backend='{self._backend}'>" 2$g{h|hFe
361# =============================================================================
362# Other Public Classes
363# =============================================================================
366@dataclass
367class ProgramOptions:
368 """Customizable options for configuring :class:`Program`.
370 Attributes
371 ----------
372 name : str, optional
373 Name of the program. If the compilation succeeds, the name is passed down to the generated :class:`ObjectCode`.
374 When set to `None`, ``"default_program"`` is used.
375 arch : str, optional
376 Pass the SM architecture value, such as ``sm_<CC>`` (for generating CUBIN) or
377 ``compute_<CC>`` (for generating PTX). If not provided, the current device's architecture
378 will be used.
379 relocatable_device_code : bool, optional
380 Enable (disable) the generation of relocatable device code.
381 Default: False
382 extensible_whole_program : bool, optional
383 Do extensible whole program compilation of device code.
384 Default: False
385 debug : bool, optional
386 Generate debug information. If --dopt is not specified, then turns off all optimizations.
387 Default: False
388 lineinfo: bool, optional
389 Generate line-number information.
390 Default: False
391 device_code_optimize : bool, optional
392 Enable device code optimization. When specified along with '-G', enables limited debug information generation
393 for optimized device code.
394 Default: None
395 ptxas_options : str | list[str], optional
396 Specify one or more options directly to ptxas, the PTX optimizing assembler. Options should be strings.
397 For example ["-v", "-O2"].
398 Default: None
399 max_register_count : int, optional
400 Specify the maximum amount of registers that GPU functions can use.
401 Default: None
402 ftz : bool, optional
403 When performing single-precision floating-point operations, flush denormal values to zero or preserve denormal
404 values.
405 Default: False
406 prec_sqrt : bool, optional
407 For single-precision floating-point square root, use IEEE round-to-nearest mode or use a faster approximation.
408 Default: True
409 prec_div : bool, optional
410 For single-precision floating-point division and reciprocals, use IEEE round-to-nearest mode or use a faster
411 approximation.
412 Default: True
413 fma : bool, optional
414 Enables (disables) the contraction of floating-point multiplies and adds/subtracts into floating-point
415 multiply-add operations.
416 Default: True
417 use_fast_math : bool, optional
418 Make use of fast math operations.
419 Default: False
420 extra_device_vectorization : bool, optional
421 Enables more aggressive device code vectorization in the NVVM optimizer.
422 Default: False
423 link_time_optimization : bool, optional
424 Generate intermediate code for later link-time optimization.
425 Default: False
426 gen_opt_lto : bool, optional
427 Run the optimizer passes before generating the LTO IR.
428 Default: False
429 define_macro : str | tuple[str, str] | list[str | tuple[str, str]], optional
430 Predefine a macro. Can be either a string, in which case that macro will be set to 1, a 2 element tuple of
431 strings, in which case the first element is defined as the second, or a list of strings or tuples.
432 Default: None
433 undefine_macro : str | list[str], optional
434 Cancel any previous definition of a macro, or list of macros.
435 Default: None
436 include_path : str | list[str], optional
437 Add the directory or directories to the list of directories to be searched for headers.
438 Default: None
439 use_bundled_headers : bool, optional
440 Use the CUDA and CCCL headers bundled with NVRTC, installed into a per-user cache
441 directory, instead of requiring a full CUDA Toolkit installation. Implemented via NVRTC's
442 ``--use-bundled-headers=<dir>`` compiler option, which installs the headers into the cache
443 directory (skipping installation if already present and up to date) and adds that
444 directory to the include search path. NVRTC only.
445 Default: False
446 pre_include : str | list[str], optional
447 Preinclude one or more headers during preprocessing. Can be either a string or a list of strings.
448 Default: None
449 no_source_include : bool, optional
450 Disable the default behavior of adding the directory of each input source to the include path.
451 Default: False
452 std : str, optional
453 Set language dialect to C++03, C++11, C++14, C++17 or C++20.
454 Default: c++17
455 builtin_move_forward : bool, optional
456 Provide builtin definitions of std::move and std::forward.
457 Default: True
458 builtin_initializer_list : bool, optional
459 Provide builtin definitions of std::initializer_list class and member functions.
460 Default: True
461 disable_warnings : bool, optional
462 Inhibit all warning messages.
463 Default: False
464 restrict : bool, optional
465 Programmer assertion that all kernel pointer parameters are restrict pointers.
466 Default: False
467 device_as_default_execution_space : bool, optional
468 Treat entities with no execution space annotation as __device__ entities.
469 Default: False
470 device_int128 : bool, optional
471 Allow the __int128 type in device code.
472 Default: False
473 optimization_info : str, optional
474 Provide optimization reports for the specified kind of optimization.
475 Default: None
476 no_display_error_number : bool, optional
477 Disable the display of a diagnostic number for warning messages.
478 Default: False
479 diag_error : int | list[int], optional
480 Emit error for a specified diagnostic message number or comma-separated list of numbers.
481 Default: None
482 diag_suppress : int | list[int], optional
483 Suppress a specified diagnostic message number or comma-separated list of numbers.
484 Default: None
485 diag_warn : int | list[int], optional
486 Emit warning for a specified diagnostic message number or comma-separated list of numbers.
487 Default: None
488 brief_diagnostics : bool, optional
489 Disable or enable showing source line and column info in a diagnostic.
490 Default: False
491 time : str, optional
492 Generate a CSV table with the time taken by each compilation phase.
493 Default: None
494 split_compile : int, optional
495 Perform compiler optimizations in parallel.
496 Default: 1
497 fdevice_syntax_only : bool, optional
498 Ends device compilation after front-end syntax checking.
499 Default: False
500 minimal : bool, optional
501 Omit certain language features to reduce compile time for small programs.
502 Default: False
503 no_cache : bool, optional
504 Disable compiler caching.
505 Default: False
506 fdevice_time_trace : str, optional
507 Generate time trace JSON for profiling compilation (NVRTC only).
508 Default: None
509 device_float128 : bool, optional
510 Allow __float128 type in device code (NVRTC only).
511 Default: False
512 frandom_seed : str, optional
513 Set random seed for randomized optimizations (NVRTC only).
514 Default: None
515 ofast_compile : str, optional
516 Fast compilation mode: "0", "min", "mid", or "max" (NVRTC only).
517 Default: None
518 pch : bool, optional
519 Use default precompiled header (NVRTC only, CUDA 12.8+).
520 Default: False
521 create_pch : str, optional
522 Create precompiled header file (NVRTC only, CUDA 12.8+).
523 Default: None
524 use_pch : str, optional
525 Use specific precompiled header file (NVRTC only, CUDA 12.8+).
526 Default: None
527 pch_dir : str, optional
528 PCH directory location (NVRTC only, CUDA 12.8+).
529 Default: None
530 pch_verbose : bool, optional
531 Verbose PCH output (NVRTC only, CUDA 12.8+).
532 Default: False
533 pch_messages : bool, optional
534 Control PCH diagnostic messages (NVRTC only, CUDA 12.8+).
535 Default: False
536 instantiate_templates_in_pch : bool, optional
537 Control template instantiation in PCH (NVRTC only, CUDA 12.8+).
538 Default: False
539 extra_sources : list of 2-tuples or tuple of 2-tuples, optional
540 Additional NVVM IR modules to compile together with the main program, specified as
541 ``((name1, source1), (name2, source2), ...)``. Each name is a string identifier used
542 in diagnostic messages. Each source can be a string (textual LLVM IR) or bytes/bytearray
543 (LLVM bitcode). Only supported for the NVVM backend.
544 Default: None
545 use_libdevice : bool, optional
546 Load NVIDIA's `libdevice <https://docs.nvidia.com/cuda/libdevice-users-guide/>`_
547 math builtins library. Only supported for the NVVM backend.
548 Default: False
549 numba_debug : bool, optional
550 Emit the debug information layout expected by Numba. Recognized only by
551 newer toolkits; compilers that do not support it reject the option with
552 an error. Applies only to the NVVM and NVRTC compilation backends --
553 ``code_type="ptx"`` is processed by the linker, which cannot honor it,
554 so enabling this option there emits a :class:`UserWarning` and the
555 option is ignored.
556 Default: None
557 """
559 name: str | None = "default_program"
560 arch: str | None = None
561 relocatable_device_code: bool | None = None
562 extensible_whole_program: bool | None = None
563 debug: bool | None = None
564 lineinfo: bool | None = None
565 device_code_optimize: bool | None = None
566 ptxas_options: str | list[str] | tuple[str] | None = None
567 max_register_count: int | None = None
568 ftz: bool | None = None
569 prec_sqrt: bool | None = None
570 prec_div: bool | None = None
571 fma: bool | None = None
572 use_fast_math: bool | None = None
573 extra_device_vectorization: bool | None = None
574 link_time_optimization: bool | None = None
575 gen_opt_lto: bool | None = None
576 define_macro: str | tuple[str, str] | list[str | tuple[str, str]] | tuple[str | tuple[str, str], ...] | None = None
577 undefine_macro: str | list[str] | tuple[str] | None = None
578 include_path: str | list[str] | tuple[str] | None = None
579 use_bundled_headers: bool | None = None
580 pre_include: str | list[str] | tuple[str] | None = None
581 no_source_include: bool | None = None
582 std: str | None = None
583 builtin_move_forward: bool | None = None
584 builtin_initializer_list: bool | None = None
585 disable_warnings: bool | None = None
586 restrict: bool | None = None
587 device_as_default_execution_space: bool | None = None
588 device_int128: bool | None = None
589 optimization_info: str | None = None
590 no_display_error_number: bool | None = None
591 diag_error: int | list[int] | tuple[int] | None = None
592 diag_suppress: int | list[int] | tuple[int] | None = None
593 diag_warn: int | list[int] | tuple[int] | None = None
594 brief_diagnostics: bool | None = None
595 time: str | None = None
596 split_compile: int | None = None
597 fdevice_syntax_only: bool | None = None
598 minimal: bool | None = None
599 no_cache: bool | None = None
600 fdevice_time_trace: str | None = None
601 device_float128: bool | None = None
602 frandom_seed: str | None = None
603 ofast_compile: str | None = None
604 pch: bool | None = None
605 create_pch: str | None = None
606 use_pch: str | None = None
607 pch_dir: str | None = None
608 pch_verbose: bool | None = None
609 pch_messages: bool | None = None
610 instantiate_templates_in_pch: bool | None = None
611 extra_sources: list[tuple[str, str | bytes | bytearray]] | tuple[tuple[str, str | bytes | bytearray], ...] | None = None
612 use_libdevice: bool | None = None # For libdevice execution
613 numba_debug: bool | None = None # Custom option for Numba debugging
615 def __post_init__(self) -> None:
616 # Set name to default if not provided
617 if self.name is None: 27gL M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdWgnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;eXgMgvd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eYgHdafIdbfZgPdQdJgk I 0gj J %g'g8g9g,gmfdfr a h i UdLdb c CgMdcf,fq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdofrfd e 1g4g5g-g6gRgNgzgAgDgYeQg3g2gPg*gBfqfOgSgLgTgUg/g=g:gVgBg-fGe.fNfHeD +g.gIesfCfDfEfGfFfHf?g@g[g]g^gIfPfQfRfSf_g`gTf{gUfVfWfXfOfYfZf0ftf|g}g~g1fufahvfbhchdh2fehfh3f4f5fwfghhh6f7f8f9f!fxfnfpfJfKfLfMfihyfzfjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRh#fShThUhVhWhXhYhZh0h1h2h3h!g#g$f%f'f(f4h5h6h7h8h9h!h#h$h%h'h(h)f)h*fAf+f*hgfefffhfx jfifHgEgFgGglfIgkfy Kg
618 self.name = "default_program" 2/g
619 self._name = self.name.encode() 27gL M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdWgnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;eXgMgvd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eYgHdafIdbfZgPdQdJgk I 0gj J %g'g8g9g,gmfdfr a h i UdLdb c CgMdcf,fq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdofrfd e 1g4g5g-g6gRgNgzgAgDgYeQg3g2gPg*gBfqfOgSgLgTgUg/g=g:gVgBg-fGe.fNfHeD +g.gIesfCfDfEfGfFfHf?g@g[g]g^gIfPfQfRfSf_g`gTf{gUfVfWfXfOfYfZf0ftf|g}g~g1fufahvfbhchdh2fehfh3f4f5fwfghhh6f7f8f9f!fxfnfpfJfKfLfMfihyfzfjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRh#fShThUhVhWhXhYhZh0h1h2h3h!g#g$f%f'f(f4h5h6h7h8h9h!h#h$h%h'h(h)f)h*fAf+f*hgfefffhfx jfifHgEgFgGglfIgkfy Kg
620 # Set arch to default if not provided
621 if self.arch is None: 27gL M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdWgnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;eXgMgvd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eYgHdafIdbfZgPdQdJgk I 0gj J %g'g8g9g,gmfdfr a h i UdLdb c CgMdcf,fq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdofrfd e 1g4g5g-g6gRgNgzgAgDgYeQg3g2gPg*gBfqfOgSgLgTgUg/g=g:gVgBg-fGe.fNfHeD +g.gIesfCfDfEfGfFfHf?g@g[g]g^gIfPfQfRfSf_g`gTf{gUfVfWfXfOfYfZf0ftf|g}g~g1fufahvfbhchdh2fehfh3f4f5fwfghhh6f7f8f9f!fxfnfpfJfKfLfMfihyfzfjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRh#fShThUhVhWhXhYhZh0h1h2h3h!g#g$f%f'f(f4h5h6h7h8h9h!h#h$h%h'h(h)f)h*fAf+f*hgfefffhfx jfifHgEgFgGglfIgkfy Kg
622 self.arch = f"sm_{Device().arch}" 27g3e4e5e0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz aebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcE F G u v w LcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdWg%e'e(e)e*e+e,eH -e.e/e:e;eXgMg=e?e@e[e]e^e_e`e{e|e}e~eYgafbfZgJgk I 0gj J dfr CgMdcf,fFed e 1gRgNgDgYeQg3g2gPgVgBg-fGe.fNfHeD Ie
623 if self.use_bundled_headers: 27gL M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdWgnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;eXgMgvd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eYgHdafIdbfZgPdQdJgk I 0gj J %g'g8g9g,gmfdfr a h i UdLdb c CgMdcf,fq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdofrfd e 1g4g5g-g6gRgNgzgAgDgYeQg3g2gPg*gBfqfOgSgLgTgUg/g=g:gVgBg-fGe.fNfHeD +g.gIesfCfDfEfGfFfHf?g@g[g]g^gIfPfQfRfSf_g`gTf{gUfVfWfXfOfYfZf0ftf|g}g~g1fufahvfbhchdh2fehfh3f4f5fwfghhh6f7f8f9f!fxfnfpfJfKfLfMfihyfzfjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRh#fShThUhVhWhXhYhZh0h1h2h3h!g#g$f%f'f(f4h5h6h7h8h9h!h#h$h%h'h(h)f)h*fAf+f*hgfefffhfx jfifHgEgFgGglfIgkfy Kg
624 # --use-bundled-headers (and the bundled CUDA/CCCL headers themselves) were
625 # introduced in NVRTC 13.3.
626 nvrtc_major, nvrtc_minor = handle_return(nvrtc.nvrtcVersion()) 2_fD +g.g
627 if (nvrtc_major, nvrtc_minor) < (13, 3): 2_fD +g.g
628 raise RuntimeError( 2+g
629 "use_bundled_headers requires NVRTC >= 13.3, but found " 2+g
630 f"{nvrtc_major}.{nvrtc_minor}. Upgrade the CUDA Toolkit / driver providing " 2+g
631 "libnvrtc, or set use_bundled_headers=False and supply include_path manually."
632 )
633 if self.extra_sources is not None: 27gL M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdWgnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;eXgMgvd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eYgHdafIdbfZgPdQdJgk I 0gj J %g'g8g9g,gmfdfr a h i UdLdb c CgMdcf,fq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdofrfd e 1g4g5g-g6gRgNgzgAgDgYeQg3g2gPg*gBfqfOgSgLgTgUg/g=g:gVgBg-fGe.fNfHeD .gIesfCfDfEfGfFfHf?g@g[g]g^gIfPfQfRfSf_g`gTf{gUfVfWfXfOfYfZf0ftf|g}g~g1fufahvfbhchdh2fehfh3f4f5fwfghhh6f7f8f9f!fxfnfpfJfKfLfMfihyfzfjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRh#fShThUhVhWhXhYhZh0h1h2h3h!g#g$f%f'f(f4h5h6h7h8h9h!h#h$h%h'h(h)f)h*fAf+f*hgfefffhfx jfifHgEgFgGglfIgkfy Kg
634 if not is_sequence(self.extra_sources): 20g%g'g8g9g,gd e 4g5g6gVgnfpf!g#g
635 raise TypeError( 2,g
636 "extra_sources must be a sequence of 2-tuples: ((name1, source1), (name2, source2), ...)"
637 )
638 for i, module in enumerate(self.extra_sources): 20g%g'g8g9gd e 4g5g6gVgnfpf!g#g
639 if not isinstance(module, tuple) or len(module) != 2: 20g%g'g8g9gd e 4g5g6gVgnfpf!g#g
640 raise TypeError( 2'g
641 f"Each extra module must be a 2-tuple (name, source)" 2'g
642 f", got {type(module).__name__} at index {i}" 2'g
643 )
645 module_name, module_source = module 20g%g8g9gd e 4g5g6gVgnfpf!g#g
647 if not isinstance(module_name, str): 20g%g8g9gd e 4g5g6gVgnfpf!g#g
648 raise TypeError(f"Module name at index {i} must be a string, got {type(module_name).__name__}") 2%g
650 if not isinstance(module_source, (str, bytes, bytearray)): 20g8g9gd e 4g5g6gVgnfpf!g#g
651 raise TypeError( 28g
652 f"Module source at index {i} must be str (textual LLVM IR), bytes (textual LLVM IR or bitcode), " 28g
653 f"or bytearray, got {type(module_source).__name__}" 28g
654 )
656 if len(module_source) == 0: 20g9gd e 4g5g6gVgnfpf!g#g
657 raise ValueError(f"Module source for '{module_name}' (index {i}) cannot be empty") 29g
659 def _prepare_nvrtc_options(self) -> list[bytes]:
660 return _prepare_nvrtc_options_impl(self) 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfOgSgLgTgUgGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
662 def _prepare_nvvm_options(self, as_bytes: bool = True) -> list[bytes] | list[str]:
663 return _prepare_nvvm_options_impl(self, as_bytes) 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
665 def as_bytes(self, backend: CompilerBackendType | str, target_type: ObjectCodeFormatType | str | None = None) -> list[bytes]:
666 """Convert program options to bytes format for the specified backend.
668 This method transforms the program options into a format suitable for the
669 specified compiler backend. Different backends may use different option names
670 and formats even for the same conceptual options.
672 Parameters
673 ----------
674 backend : CompilerBackendType | str
675 The compiler backend to prepare options for. Must be either "nvrtc" or "nvvm".
676 target_type : ObjectCodeFormatType | str, optional
677 The compilation target type (e.g., "ptx", "cubin", "ltoir"). Some backends
678 require additional options based on the target type.
680 Returns
681 -------
682 list[bytes]
683 List of option strings encoded as bytes.
685 Raises
686 ------
687 ValueError
688 If an unknown backend is specified.
689 CUDAError
690 If an option incompatible with the specified backend is set.
692 Examples
693 --------
694 >>> options = ProgramOptions(arch="sm_80", debug=True)
695 >>> nvrtc_options = options.as_bytes("nvrtc")
696 """
697 backend = str(backend).lower() 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfPdQdk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c Mdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e Ye*gBfqfOgSgLgTgUgGeHeD IesfCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0ftf1fufvf2f3f4f5fwf6f7f8f9f!fxfnfpfJfKfLfMfyfzf#f$f%f'f(f)f*fAf+fgfefffhfx jfiflfkfy
698 if backend == "nvrtc": 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfPdQdk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c Mdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e Ye*gBfqfOgSgLgTgUgGeHeD IesfCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0ftf1fufvf2f3f4f5fwf6f7f8f9f!fxfnfpfJfKfLfMfyfzf#f$f%f'f(f)f*fAf+fgfefffhfx jfiflfkfy
699 return self._prepare_nvrtc_options() 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfOgSgLgTgUgGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
700 elif backend == "nvvm": 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e *gqfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
701 options = self._prepare_nvvm_options(as_bytes=True) 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
702 if target_type == "ltoir" and b"-gen-lto" not in options: 2PdQdMdcfq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
703 options.append(b"-gen-lto") 2PdQdKeLeMeVdNeWdOed
704 return options 2PdQdMdcfq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
705 else:
706 raise ValueError(f"Unknown backend '{backend}'. Must be one of: 'nvrtc', 'nvvm'") 2*g
708 def __repr__(self) -> str:
709 return f"ProgramOptions(name={self.name!r}, arch={self.arch!r})" 2:g
711 def _prepare_extra_sources_bytes(self) -> list[tuple[bytes, bytes]] | None:
712 """Convert extra_sources to bytes format for NVVM."""
713 if self.extra_sources is None: 2d e 4g5g-g6g
714 return None 2-g
716 result = [] 2d e 4g5g6g
717 for module_name, module_source in self.extra_sources: 2d e 4g5g6g
718 name_bytes = module_name.encode("utf-8") 2d e 4g5g6g
719 if isinstance(module_source, str): 2d e 4g5g6g
720 source_bytes = module_source.encode("utf-8") 2d e 6g
721 elif isinstance(module_source, bytearray): 24g5g
722 source_bytes = bytes(module_source) 24g
723 else:
724 source_bytes = module_source 25g
725 result.append((name_bytes, source_bytes)) 2d e 4g5g6g
726 return result 2d e 4g5g6g
729# =============================================================================
730# Private Classes and Helper Functions
731# =============================================================================
734def _program_compile_uncached(program, target_type, name_expressions, logs):
735 """Run ``Program_compile`` without the cache wrapper.
737 Module-level Python function so tests can monkeypatch it from
738 ``cuda.core._program`` to avoid invoking NVRTC when exercising the cache
739 wrapper in :meth:`Program.compile`. ``Program`` itself is a ``cdef class``
740 and its methods cannot be reassigned from Python, so the seam must live
741 outside the class.
742 """
743 return Program_compile(program, target_type, name_expressions, logs) 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfPdQdk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c Mdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e DgYe-fGe.fNf/f:f;f=fHe?f@f[f]f^fD Iex y
746# Module-level state for NVVM lazy loading
747_nvvm_module = None
748_nvvm_import_attempted = False
751def _get_nvvm_module() -> object:
752 """Get the NVVM module, importing it lazily with availability checks."""
753 global _nvvm_module, _nvvm_import_attempted
755 if _nvvm_module is not None: 27gMg(g)g;gPdQdCg]hMdcf,fq ^hFeNdKeTeLeUeMeVeVdYdNeWe_hWdZdOeXed e 1gsftfufvfwfxfnfyfzfAf
756 return _nvvm_module 2MgPdQdCg]hMdcf,fq ^hFeNdKeTeLeUeMeVeVdYdNeWe_hWdZdOeXed e 1gsftfufvfwfxfnfyfzfAf
757 if _nvvm_import_attempted: 27g(g)g;g
758 raise RuntimeError("NVVM module is not available (previous import attempt failed)")
760 try: 27g(g)g;g
761 # Every cuda-bindings that cuda.core accepts provides cuda.bindings.nvvm.
762 # The probe checks that libnvvm itself loads.
763 nvvm = _optional_cuda_import( 27g(g)g;g
764 "cuda.bindings.nvvm",
765 probe_function=lambda module: module.version(), # probe triggers libnvvm load 27g(g)g;g
766 )
767 if nvvm is None: 27g(g)g
768 raise RuntimeError( 2(g)g
769 "NVVM support is unavailable: cuda.bindings.nvvm is missing or libnvvm cannot be loaded."
770 )
772 _nvvm_module = nvvm
773 return _nvvm_module
775 except RuntimeError: 2(g)g;g
776 _nvvm_module = None 2(g)g
777 _nvvm_import_attempted = True 2(g)g
778 raise 2(g)g
781def _find_libdevice_path() -> object:
782 """Find libdevice*.bc for NVVM compilation using cuda.pathfinder."""
783 from cuda.pathfinder import find_bitcode_lib 2`hq
784 return find_bitcode_lib("device") 2`hq
787cdef inline bint _process_define_macro_inner(list options, object macro) except? -1:
788 """Process a single define macro, returning True if successful."""
789 if isinstance(macro, str): 2K A o p OgSgLgTgUg
790 options.append(f"--define-macro={macro}") 1K
791 return True 1K
792 if isinstance(macro, tuple): 2A o p OgSgLgTgUg
793 if len(macro) != 2 or any(not isinstance(val, str) for val in macro): 2A o p OgLgTgUg
794 raise RuntimeError(f"Expected define_macro tuple[str, str], got {macro}") 2OgTgUg
795 options.append(f"--define-macro={macro[0]}={macro[1]}") 2A o p Lg
796 return True 2A o p Lg
797 return False 2o p OgSgLg
800cdef inline void _process_define_macro(list options, object macro) except *:
801 """Process define_macro option which can be str, tuple, or list thereof."""
802 union_type = "Union[str, tuple[str, str]]" 2K A o p OgSgLgTgUg
803 if _process_define_macro_inner(options, macro): 2K A o p OgSgLgTgUg
804 return 1KA
805 if is_nested_sequence(macro): 2o p OgSgLg
806 for seq_macro in macro: 2o p OgLg
807 if not _process_define_macro_inner(options, seq_macro): 2o p OgLg
808 raise RuntimeError(f"Expected define_macro {union_type}, got {seq_macro}") 2Lg
809 return 1op
810 raise RuntimeError(f"Expected define_macro {union_type}, list[{union_type}], got {macro}") 2Sg
813cpdef bint _can_load_generated_ptx() except? -1:
814 """Check if the driver can load PTX generated by the current NVRTC version."""
815 drv = driver_version() 20d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~dz aebel m n ;hu =hv ?hw @h[hk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c YeGeHeD efff
816 nvrtc_major, nvrtc_minor = handle_return(nvrtc.nvrtcVersion()) 20d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~dz aebel m n ;hu =hv ?hw @h[hk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c YeGeHeD efff
817 return (nvrtc_major, nvrtc_minor, 0) <= drv 20d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~dz aebel m n ;hu =hv ?hw @h[hk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c YeGeHeD efff
820cdef inline object _translate_program_options(object options):
821 """Translate ProgramOptions to LinkerOptions for PTX compilation."""
822 # ``numba_debug`` is an NVVM/NVRTC compiler option that no linking backend can
823 # honor. It used to be forwarded into ``LinkerOptions`` and dropped without a
824 # word; warn instead, and do not forward -- forwarding would only trigger the
825 # deprecation warning on a field the user never touched. ``UserWarning``, not
826 # ``DeprecationWarning``: ``ProgramOptions.numba_debug`` is not deprecated, it
827 # is fully supported on NVVM and NVRTC and merely inapplicable here. The gate
828 # is truthiness, matching ``_prepare_nvvm_options_impl``: only an enabled
829 # ``numba_debug`` asks for something this path cannot deliver.
830 if options.numba_debug: 2Bg-f.fNf/f:f;f=f?f@f[f]f^f
831 warn( 2Nf
832 "numba_debug is ignored for code_type='ptx', which is processed by the linker; "
833 "it applies only to the NVVM and NVRTC compilation backends.",
834 UserWarning, 2Nf
835 stacklevel=4,
836 )
837 return LinkerOptions( 2Bg-f.fNf/f:f;f=f?f@f[f]f^f
838 name=options.name, 2Bg-f.fNf/f:f;f=f?f@f[f]f^f
839 arch=options.arch, 2Bg-f.fNf/f:f;f=f?f@f[f]f^f
840 max_register_count=options.max_register_count, 2Bg-f.fNf/f:f;f=f?f@f[f]f^f
841 time=options.time, 2Bg-f.fNf/f:f;f=f?f@f[f]f^f
842 link_time_optimization=options.link_time_optimization, 2Bg-f.fNf/f:f;f=f?f@f[f]f^f
843 debug=options.debug, 2Bg-f.fNf/f:f;f=f?f@f[f]f^f
844 lineinfo=options.lineinfo, 2Bg-f.fNf/f:f;f=f?f@f[f]f^f
845 ftz=options.ftz, 2Bg-f.fNf/f:f;f=f?f@f[f]f^f
846 prec_div=options.prec_div, 2Bg-f.fNf/f:f;f=f?f@f[f]f^f
847 prec_sqrt=options.prec_sqrt, 2Bg-f.fNf/f:f;f=f?f@f[f]f^f
848 fma=options.fma, 2Bg-f.fNf/f:f;f=f?f@f[f]f^f
849 split_compile=options.split_compile, 2Bg-f.fNf/f:f;f=f?f@f[f]f^f
850 ptxas_options=options.ptxas_options, 2Bg-f.fNf/f:f;f=f?f@f[f]f^f
851 no_cache=options.no_cache, 2Bg-f.fNf/f:f;f=f?f@f[f]f^f
852 )
855cdef inline int Program_init(Program self, object code, str code_type, object options) except -1:
856 """Initialize a Program instance."""
857 cdef cynvrtc.nvrtcProgram nvrtc_prog
858 cdef cynvvm.nvvmProgram nvvm_prog
859 cdef bytes code_bytes
860 cdef const char* code_ptr
861 cdef const char* name_ptr
862 cdef size_t code_len
863 cdef bytes module_bytes
864 cdef const char* module_ptr
865 cdef size_t module_len
867 self._options = options = check_or_create_options(ProgramOptions, options, "Program options") 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdWgnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;eXgMgvd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eYgHdafIdbfZgPdQdJgk I 0gj J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c CgMdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e 1gRgNgzgAgDgYeQg3g2gPgVgBg-fGe.fNf/f:f;f=fHe?f@f[f]f^fD Iegfefffhfx jfifHgEgFgGglfIgkfy Kg
868 code_type = code_type.lower() 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdWgnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;eXgMgvd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eYgHdafIdbfZgPdQdJgk I 0gj J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c CgMdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e 1gRgNgzgAgDgYeQg3g2gPgVgBg-fGe.fNf/f:f;f=fHe?f@f[f]f^fD Iegfefffhfx jfifHgEgFgGglfIgkfy Kg
869 self._code_type = code_type 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdWgnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;eXgMgvd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eYgHdafIdbfZgPdQdJgk I 0gj J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c CgMdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e 1gRgNgzgAgDgYeQg3g2gPgVgBg-fGe.fNf/f:f;f=fHe?f@f[f]f^fD Iegfefffhfx jfifHgEgFgGglfIgkfy Kg
870 self._compile_lock = threading.Lock() 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdWgnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;eXgMgvd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eYgHdafIdbfZgPdQdJgk I 0gj J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c CgMdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e 1gRgNgzgAgDgYeQg3g2gPgVgBg-fGe.fNf/f:f;f=fHe?f@f[f]f^fD Iegfefffhfx jfifHgEgFgGglfIgkfy Kg
871 self._use_libdevice = False 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdWgnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;eXgMgvd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eYgHdafIdbfZgPdQdJgk I 0gj J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c CgMdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e 1gRgNgzgAgDgYeQg3g2gPgVgBg-fGe.fNf/f:f;f=fHe?f@f[f]f^fD Iegfefffhfx jfifHgEgFgGglfIgkfy Kg
872 self._libdevice_added = False 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdWgnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;eXgMgvd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eYgHdafIdbfZgPdQdJgk I 0gj J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c CgMdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e 1gRgNgzgAgDgYeQg3g2gPgVgBg-fGe.fNf/f:f;f=fHe?f@f[f]f^fD Iegfefffhfx jfifHgEgFgGglfIgkfy Kg
874 self._pch_status = None 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdWgnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;eXgMgvd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eYgHdafIdbfZgPdQdJgk I 0gj J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c CgMdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e 1gRgNgzgAgDgYeQg3g2gPgVgBg-fGe.fNf/f:f;f=fHe?f@f[f]f^fD Iegfefffhfx jfifHgEgFgGglfIgkfy Kg
875 self._nvrtc_name = options._name 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdWgnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;eXgMgvd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eYgHdafIdbfZgPdQdJgk I 0gj J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c CgMdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e 1gRgNgzgAgDgYeQg3g2gPgVgBg-fGe.fNf/f:f;f=fHe?f@f[f]f^fD Iegfefffhfx jfifHgEgFgGglfIgkfy Kg
876 self._extra_options = [] 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdWgnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;eXgMgvd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eYgHdafIdbfZgPdQdJgk I 0gj J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c CgMdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e 1gRgNgzgAgDgYeQg3g2gPgVgBg-fGe.fNf/f:f;f=fHe?f@f[f]f^fD Iegfefffhfx jfifHgEgFgGglfIgkfy Kg
878 if code_type == "c++": 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdWgnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;eXgMgvd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eYgHdafIdbfZgPdQdJgk I 0gj J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c CgMdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e 1gRgNgzgAgDgYeQg3g2gPgVgBg-fGe.fNf/f:f;f=fHe?f@f[f]f^fD Iegfefffhfx jfifHgEgFgGglfIgkfy Kg
879 assert_type(code, str) 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdWgnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;eXgvd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eYgHdafIdbfZgJgk I 0gj J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c RgNgzgAgDgYeQg3gPgGeHeD Iegfefffhfx jfifHgEgFgGglfIgkfy Kg
880 if options.extra_sources is not None: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdWgnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;eXgvd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eYgHdafIdbfZgJgk I 0gj J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c RgNgzgAgDgYeQgPgGeHeD Iegfefffhfx jfifHgEgFgGglfIgkfy Kg
881 raise ValueError("extra_sources is not supported by the NVRTC backend (C++ code_type)") 20g
883 if (options.debug or options.lineinfo) and options.name == "default_program": 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdWgnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;eXgvd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eYgHdafIdbfZgJgk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c RgNgzgAgDgYeQgPgGeHeD Iegfefffhfx jfifHgEgFgGglfIgkfy Kg
884 debug_path = self._try_materialize_nvrtc_debug_source(code) 2f g a h i b c zgAg
885 if debug_path is not None: 2f g a h i b c zgAg
886 self._nvrtc_name = self._debug_source = debug_path.encode() 2f g a b c zgAg
887 # NVRTC resolves #include "..." against the directory of the name it
888 # is given, so moving the name into the temp dir would otherwise stop
889 # every quoted include from resolving where it did before.
890 try: 2f g a b c zgAg
891 include_dir = os.path.dirname(os.path.abspath(options.name)) 2f g a b c zgAg
892 except OSError:
893 # abspath needs a cwd; with none there is no directory to restore.
894 pass
895 else:
896 self._extra_options = [b"--include-path=" + include_dir.encode()] 2f g a b c zgAg
898 # TODO: support pre-loaded headers & include names
899 code_bytes = code.encode() 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdWgnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;eXgvd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eYgHdafIdbfZgJgk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c RgNgzgAgDgYeQgPgGeHeD Iegfefffhfx jfifHgEgFgGglfIgkfy Kg
900 code_ptr = <const char*>code_bytes 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdWgnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;eXgvd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eYgHdafIdbfZgJgk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c RgNgzgAgDgYeQgPgGeHeD Iegfefffhfx jfifHgEgFgGglfIgkfy Kg
901 name_ptr = <const char*>self._nvrtc_name 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdWgnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;eXgvd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eYgHdafIdbfZgJgk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c RgNgzgAgDgYeQgPgGeHeD Iegfefffhfx jfifHgEgFgGglfIgkfy Kg
903 with nogil: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdWgnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;eXgvd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eYgHdafIdbfZgJgk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c RgNgzgAgDgYeQgPgGeHeD Iegfefffhfx jfifHgEgFgGglfIgkfy Kg
904 HANDLE_RETURN_NVRTC(NULL, cynvrtc.nvrtcCreateProgram( 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdWgnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;eXgvd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eYgHdafIdbfZgJgk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c RgNgzgAgDgYeQgPgGeHeD Iegfefffhfx jfifHgEgFgGglfIgkfy Kg
905 &nvrtc_prog, code_ptr, name_ptr, 0, NULL, NULL))
906 self._h_nvrtc = create_nvrtc_program_handle(nvrtc_prog) 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdWgnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;eXgvd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eYgHdafIdbfZgJgk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c RgNgzgAgDgYeQgPgGeHeD Iegfefffhfx jfifHgEgFgGglfIgkfy Kg
907 self._code = code_bytes 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdWgnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;eXgvd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eYgHdafIdbfZgJgk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c RgNgzgAgDgYeQgPgGeHeD Iegfefffhfx jfifHgEgFgGglfIgkfy Kg
908 self._backend = str(CompilerBackendType.NVRTC) 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdWgnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;eXgvd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eYgHdafIdbfZgJgk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c RgNgzgAgDgYeQgPgGeHeD Iegfefffhfx jfifHgEgFgGglfIgkfy Kg
909 self._linker = None 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdWgnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;eXgvd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eYgHdafIdbfZgJgk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c RgNgzgAgDgYeQgPgGeHeD Iegfefffhfx jfifHgEgFgGglfIgkfy Kg
911 elif code_type == "ptx": 2MgPdQdCgMdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e 1g2gVgBg-f.fNf/f:f;f=f?f@f[f]f^f
912 assert_type(code, str) 2VgBg-f.fNf/f:f;f=f?f@f[f]f^f
913 if options.extra_sources is not None: 2VgBg-f.fNf/f:f;f=f?f@f[f]f^f
914 raise ValueError("extra_sources is not supported by the PTX backend.") 2Vg
915 code_bytes = code.encode() 2Bg-f.fNf/f:f;f=f?f@f[f]f^f
916 self._code = code_bytes 2Bg-f.fNf/f:f;f=f?f@f[f]f^f
917 self._linker = Linker( 2Bg-f.fNf/f:f;f=f?f@f[f]f^f
918 ObjectCode._init(code_bytes, code_type), options=_translate_program_options(options) 2Bg-f.fNf/f:f;f=f?f@f[f]f^f
919 )
920 self._backend = str(Linker.which_backend()) 2Bg-f.fNf/f:f;f=f?f@f[f]f^f
922 elif code_type == "nvvm": 2MgPdQdCgMdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e 1g2g
923 _get_nvvm_module() # Validate NVVM availability 2MgPdQdCgMdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e 1g
924 if isinstance(code, str): 2MgPdQdCgMdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e 1g
925 code = code.encode("utf-8") 2MgMdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e
926 elif not isinstance(code, (bytes, bytearray)): 2PdQdCg1g
927 raise TypeError("NVVM IR code must be provided as str, bytes, or bytearray") 21g
928 self._code = bytes(code) # Coerce bytearray -> bytes so retention type is stable 2MgPdQdCgMdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e
930 # Use self._code (strictly bytes) for the C pointer so a bytearray
931 # input doesn't trip the `<bytes>code` cast at runtime.
932 code_ptr = <const char*>self._code 2MgPdQdCgMdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e
933 name_ptr = <const char*>options._name 2MgPdQdCgMdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e
934 code_len = len(self._code) 2MgPdQdCgMdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e
936 with nogil: 2MgPdQdCgMdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e
937 HANDLE_RETURN_NVVM(NULL, cynvvm.nvvmCreateProgram(&nvvm_prog)) 2MgPdQdCgMdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e
938 self._h_nvvm = create_nvvm_program_handle(nvvm_prog) # RAII from here 2MgPdQdCgMdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e
939 with nogil: 2MgPdQdCgMdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e
940 HANDLE_RETURN_NVVM(nvvm_prog, cynvvm.nvvmAddModuleToProgram(nvvm_prog, code_ptr, code_len, name_ptr)) 2MgPdQdCgMdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e
942 # Add extra modules if provided
943 if options.extra_sources is not None: 2MgPdQdCgMdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e
944 extra_sources_bytes = options._prepare_extra_sources_bytes() 1de
945 for module_name_bytes, module_bytes in extra_sources_bytes: 1de
946 module_ptr = <const char*>module_bytes 1de
947 module_len = len(module_bytes) 1de
948 module_name_ptr = <const char*>module_name_bytes 1de
949 with nogil: 1de
950 HANDLE_RETURN_NVVM(nvvm_prog, cynvvm.nvvmAddModuleToProgram( 1de
951 nvvm_prog, module_ptr, module_len, module_name_ptr))
953 # Store use_libdevice flag
954 if options.use_libdevice: 2MgPdQdCgMdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e
955 self._use_libdevice = True 1q
957 self._backend = str(CompilerBackendType.NVVM) 2MgPdQdCgMdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e
958 self._linker = None 2MgPdQdCgMdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e
960 else:
961 supported_code_types = tuple(x.value for x in SourceCodeType) 22g
962 if options.use_libdevice: 22g
963 raise ValueError("use_libdevice is only supported by the NVVM backend")
964 raise RuntimeError(f"Unsupported {code_type=} ({supported_code_types=})") 22g
966 return 0 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdWgnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;eXgMgvd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eYgHdafIdbfZgPdQdJgk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c CgMdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e RgNgzgAgDgYeQgPgBg-fGe.fNf/f:f;f=fHe?f@f[f]f^fD Iegfefffhfx jfifHgEgFgGglfIgkfy Kg
969cdef object _nvrtc_compile_and_extract(
970 cynvrtc.nvrtcProgram prog, str target_type, object name_expressions,
971 object logs, list options_list, str name,
972):
973 """Run nvrtcCompileProgram on *prog* and extract the output.
975 This is the inner compile+extract loop, factored out so the PCH
976 auto-retry path can call it on a fresh program handle.
977 """
978 cdef size_t output_size = 0 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c YeGeHeD Iex y
979 cdef size_t logsize = 0 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c YeGeHeD Iex y
980 cdef vector[const char*] options_vec
981 cdef char* data_ptr = NULL 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c YeGeHeD Iex y
982 cdef bytes name_bytes
983 cdef const char* name_ptr = NULL 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c YeGeHeD Iex y
984 cdef const char* lowered_name = NULL 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c YeGeHeD Iex y
985 cdef dict symbol_mapping = {} 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c YeGeHeD Iex y
987 # Add name expressions before compilation
988 if name_expressions: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c YeGeHeD Iex y
989 for n in name_expressions: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!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~bs t acbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcl m n E F G u v w LcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdH tdudvdwdxdydzdAdBdCdDdEdFdGdHdId
990 name_bytes = n.encode() if isinstance(n, str) else n 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!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~bs t acbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcl m n E F G u v w LcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdH tdudvdwdxdydzdAdBdCdDdEdFdGdHdId
991 name_ptr = <const char*>name_bytes 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!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~bs t acbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcl m n E F G u v w LcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdH tdudvdwdxdydzdAdBdCdDdEdFdGdHdId
992 HANDLE_RETURN_NVRTC(prog, cynvrtc.nvrtcAddNameExpression(prog, name_ptr)) 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!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~bs t acbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcl m n E F G u v w LcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdH tdudvdwdxdydzdAdBdCdDdEdFdGdHdId
994 # Build options array
995 options_vec.resize(len(options_list)) 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c YeGeHeD Iex y
996 for i in range(len(options_list)): 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c YeGeHeD Iex y
997 options_vec[i] = <const char*>(<bytes>options_list[i]) 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c YeGeHeD Iex y
999 # Compile
1000 with nogil: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c YeGeHeD Iex y
1001 HANDLE_RETURN_NVRTC(prog, cynvrtc.nvrtcCompileProgram(prog, <int>options_vec.size(), options_vec.data())) 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c YeGeHeD Iex y
1003 # Get compiled output based on target type
1004 if target_type == "ptx": 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeier a h i UdLdb c YeGeHeD Iex y
1005 HANDLE_RETURN_NVRTC(prog, cynvrtc.nvrtcGetPTXSize(prog, &output_size)) 20d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~dz aebel m n u v w k I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeier a h i UdLdb c YeGeHeD
1006 data = bytearray(output_size) 20d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~dz aebel m n u v w k I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeier a h i UdLdb c YeGeHeD
1007 data_ptr = <char*>(<bytearray>data) 20d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~dz aebel m n u v w k I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeier a h i UdLdb c YeGeHeD
1008 with nogil: 20d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~dz aebel m n u v w k I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeier a h i UdLdb c YeGeHeD
1009 HANDLE_RETURN_NVRTC(prog, cynvrtc.nvrtcGetPTX(prog, data_ptr)) 20d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~dz aebel m n u v w k I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeier a h i UdLdb c YeGeHeD
1010 elif target_type == "cubin": 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclcPeQeReSeOdz 6e7e8emcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfIex y
1011 HANDLE_RETURN_NVRTC(prog, cynvrtc.nvrtcGetCUBINSize(prog, &output_size)) 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclcOd6e7e8emcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfIex y
1012 data = bytearray(output_size) 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclcOd6e7e8emcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfIex y
1013 data_ptr = <char*>(<bytearray>data) 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclcOd6e7e8emcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfIex y
1014 with nogil: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclcOd6e7e8emcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfIex y
1015 HANDLE_RETURN_NVRTC(prog, cynvrtc.nvrtcGetCUBIN(prog, data_ptr)) 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclcOd6e7e8emcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfIex y
1016 else: # ltoir
1017 HANDLE_RETURN_NVRTC(prog, cynvrtc.nvrtcGetLTOIRSize(prog, &output_size)) 2PeQeReSeOdz E F G ;e
1018 data = bytearray(output_size) 2PeQeReSeOdz E F G ;e
1019 data_ptr = <char*>(<bytearray>data) 2PeQeReSeOdz E F G ;e
1020 with nogil: 2PeQeReSeOdz E F G ;e
1021 HANDLE_RETURN_NVRTC(prog, cynvrtc.nvrtcGetLTOIR(prog, data_ptr)) 2PeQeReSeOdz E F G ;e
1023 # Get lowered names after compilation
1024 if name_expressions: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeier a h i UdLdb c YeGeHeD Iex y
1025 for n in name_expressions: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!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~bs t acbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcl m n E F G u v w LcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdH tdudvdwdxdydzdAdBdCdDdEdFdGdHdId
1026 name_bytes = n.encode() if isinstance(n, str) else n 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!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~bs t acbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcl m n E F G u v w LcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdH tdudvdwdxdydzdAdBdCdDdEdFdGdHdId
1027 name_ptr = <const char*>name_bytes 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!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~bs t acbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcl m n E F G u v w LcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdH tdudvdwdxdydzdAdBdCdDdEdFdGdHdId
1028 HANDLE_RETURN_NVRTC(prog, cynvrtc.nvrtcGetLoweredName(prog, name_ptr, &lowered_name)) 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!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~bs t acbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcl m n E F G u v w LcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdH tdudvdwdxdydzdAdBdCdDdEdFdGdHdId
1029 symbol_mapping[n] = lowered_name if lowered_name != NULL else None 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!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~bs t acbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcl m n E F G u v w LcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdH tdudvdwdxdydzdAdBdCdDdEdFdGdHdId
1031 # Get compilation log if requested
1032 if logs is not None: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeier a h i UdLdb c YeGeHeD Iex y
1033 HANDLE_RETURN_NVRTC(prog, cynvrtc.nvrtcGetProgramLogSize(prog, &logsize)) 1r
1034 if logsize > 1: 1r
1035 log = bytearray(logsize) 1r
1036 data_ptr = <char*>(<bytearray>log) 1r
1037 with nogil: 1r
1038 HANDLE_RETURN_NVRTC(prog, cynvrtc.nvrtcGetProgramLog(prog, data_ptr)) 1r
1039 logs.write(log.decode("utf-8", errors="backslashreplace")) 1r
1041 return ObjectCode._init(bytes(data), target_type, symbol_mapping=symbol_mapping, name=name) 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeier a h i UdLdb c YeGeHeD Iex y
1044cdef object _read_pch_status(cynvrtc.nvrtcProgram prog):
1045 """Query nvrtcGetPCHCreateStatus and translate to a high-level string."""
1046 cdef cynvrtc.nvrtcResult err
1047 with nogil: 1kjC
1048 err = cynvrtc.nvrtcGetPCHCreateStatus(prog) 1kjC
1049 if err == cynvrtc.nvrtcResult.NVRTC_SUCCESS: 1kjC
1050 return PCHStatusType.CREATED 1kjC
1051 if err == cynvrtc.nvrtcResult.NVRTC_ERROR_PCH_CREATE_HEAP_EXHAUSTED:
1052 return None # sentinel: caller should auto-retry
1053 if err == cynvrtc.nvrtcResult.NVRTC_ERROR_NO_PCH_CREATE_ATTEMPTED:
1054 return PCHStatusType.NOT_ATTEMPTED
1055 return PCHStatusType.FAILED
1058cdef object Program_compile_nvrtc(Program self, str target_type, object name_expressions, object logs):
1059 """Compile using NVRTC backend and return ObjectCode."""
1060 cdef cynvrtc.nvrtcProgram prog = as_cu(self._h_nvrtc) 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c YeGeHeD Iex y
1061 cdef list options_list = self._options.as_bytes("nvrtc", target_type) + self._extra_options 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c YeGeHeD Iex y
1063 result = _nvrtc_compile_and_extract( 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c YeGeHeD Iex y
1064 prog, target_type, name_expressions, logs, options_list, self._nvrtc_name.decode(), 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c YeGeHeD Iex y
1065 )
1067 cdef bint pch_creation_possible = self._options.create_pch or self._options.pch 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeier a h i UdLdb c YeGeHeD Iex y
1068 if not pch_creation_possible: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeier a h i UdLdb c YeGeHeD Iex y
1069 self._pch_status = None 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfI j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeDeEeier a h i UdLdb c YeGeHeD Iex y
1070 return result 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfI j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeDeEeier a h i UdLdb c YeGeHeD Iex y
1072 try: 1kjC
1073 status = _read_pch_status(prog) 1kjC
1074 except RuntimeError as e:
1075 raise RuntimeError(
1076 "PCH was requested but the runtime libnvrtc does not support "
1077 "PCH APIs. Update to CUDA toolkit 12.8 or newer."
1078 ) from e
1080 if status is not None: 1kjC
1081 self._pch_status = str(status) 1kjC
1082 return result 1kjC
1084 # Heap exhausted — auto-resize and retry with a fresh program
1085 cdef size_t required = 0
1086 with nogil:
1087 HANDLE_RETURN_NVRTC(prog, cynvrtc.nvrtcGetPCHHeapSizeRequired(prog, &required))
1088 HANDLE_RETURN_NVRTC(NULL, cynvrtc.nvrtcSetPCHHeapSize(required))
1090 cdef cynvrtc.nvrtcProgram retry_prog
1091 cdef const char* code_ptr = <const char*>self._code
1092 cdef const char* name_ptr = <const char*>self._nvrtc_name
1093 with nogil:
1094 HANDLE_RETURN_NVRTC(NULL, cynvrtc.nvrtcCreateProgram(
1095 &retry_prog, code_ptr, name_ptr, 0, NULL, NULL))
1096 self._h_nvrtc = create_nvrtc_program_handle(retry_prog)
1098 result = _nvrtc_compile_and_extract(
1099 retry_prog, target_type, name_expressions, logs, options_list, self._nvrtc_name.decode(),
1100 )
1102 status = _read_pch_status(retry_prog)
1103 self._pch_status = status if status is not None else str(PCHStatusType.FAILED)
1104 return result
1107cdef object Program_compile_nvvm(Program self, str target_type, object logs):
1108 """Compile using NVVM backend and return ObjectCode."""
1109 cdef cynvvm.nvvmProgram prog = as_cu(self._h_nvvm) 2PdQdMdcfq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e
1110 cdef size_t output_size = 0 2PdQdMdcfq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e
1111 cdef size_t logsize = 0 2PdQdMdcfq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e
1112 cdef vector[const char*] options_vec
1113 cdef char* data_ptr = NULL 2PdQdMdcfq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e
1114 cdef bytes libdevice_bytes
1115 cdef const char* libdevice_ptr
1116 cdef size_t libdevice_len
1117 # Build options array
1118 options_list = self._options.as_bytes("nvvm", target_type) 2PdQdMdcfq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e
1119 options_vec.resize(len(options_list)) 2PdQdMdcfq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e
1120 for i in range(len(options_list)): 2PdQdMdcfq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e
1121 options_vec[i] = <const char*>(<bytes>options_list[i]) 2PdQdMdcfq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e
1123 # Serialize NVVM program mutation/use per Program instance.
1124 with self._compile_lock: 2PdQdMdcfq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e
1125 with nogil: 2PdQdMdcfq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e
1126 HANDLE_RETURN_NVVM(prog, cynvvm.nvvmVerifyProgram(prog, <int>options_vec.size(), options_vec.data())) 2PdQdMdcfq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e
1128 # Load libdevice if requested - following numba-cuda.
1129 if self._use_libdevice and not self._libdevice_added: 2PdQdMdq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e
1130 libdevice_path = _find_libdevice_path() 1q
1131 with open(libdevice_path, "rb") as f: 1q
1132 libdevice_bytes = f.read() 1q
1133 libdevice_ptr = <const char*>libdevice_bytes 1q
1134 libdevice_len = len(libdevice_bytes) 1q
1135 with nogil: 1q
1136 HANDLE_RETURN_NVVM(prog, cynvvm.nvvmLazyAddModuleToProgram( 1q
1137 prog, libdevice_ptr, libdevice_len, NULL))
1138 self._libdevice_added = True 1q
1140 with nogil: 2PdQdMdq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e
1141 HANDLE_RETURN_NVVM(prog, cynvvm.nvvmCompileProgram(prog, <int>options_vec.size(), options_vec.data())) 2PdQdMdq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e
1143 HANDLE_RETURN_NVVM(prog, cynvvm.nvvmGetCompiledResultSize(prog, &output_size)) 2PdQdMdq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e
1144 data = bytearray(output_size) 2PdQdMdq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e
1145 data_ptr = <char*>(<bytearray>data) 2PdQdMdq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e
1146 with nogil: 2PdQdMdq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e
1147 HANDLE_RETURN_NVVM(prog, cynvvm.nvvmGetCompiledResult(prog, data_ptr)) 2PdQdMdq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e
1149 # Get compilation log if requested
1150 if logs is not None: 2PdQdMdq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e
1151 HANDLE_RETURN_NVVM(prog, cynvvm.nvvmGetProgramLogSize(prog, &logsize)) 2Md
1152 if logsize > 1: 2Md
1153 log = bytearray(logsize)
1154 data_ptr = <char*>(<bytearray>log)
1155 with nogil:
1156 HANDLE_RETURN_NVVM(prog, cynvvm.nvvmGetProgramLog(prog, data_ptr))
1157 logs.write(log.decode("utf-8", errors="backslashreplace"))
1159 return ObjectCode._init(bytes(data), target_type, name=self._options.name) 2PdQdMdq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e
1161# Supported target types per backend
1162cdef dict SUPPORTED_TARGETS = {
1163 CompilerBackendType.NVRTC: (ObjectCodeFormatType.PTX, ObjectCodeFormatType.CUBIN, ObjectCodeFormatType.LTOIR),
1164 CompilerBackendType.NVVM: (ObjectCodeFormatType.PTX, ObjectCodeFormatType.LTOIR),
1165 CompilerBackendType.NVJITLINK: (ObjectCodeFormatType.CUBIN, ObjectCodeFormatType.PTX),
1166 CompilerBackendType.DRIVER: (ObjectCodeFormatType.CUBIN, ObjectCodeFormatType.PTX),
1167}
1170cdef object Program_compile(Program self, str target_type, object name_expressions, object logs):
1171 """Compile the program to the specified target type."""
1172 # Validate target_type for this backend
1173 supported = SUPPORTED_TARGETS.get(self._backend) 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfPdQdk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c Mdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e DgYe-fGe.fNf/f:f;f=fHe?f@f[f]f^fD Iex y
1174 if supported is None: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfPdQdk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c Mdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e DgYe-fGe.fNf/f:f;f=fHe?f@f[f]f^fD Iex y
1175 raise ValueError(f'Unknown backend="{self._backend}"')
1176 if target_type not in supported: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfPdQdk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c Mdcf,fq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e DgYe-fGe.fNf/f:f;f=fHe?f@f[f]f^fD Iex y
1177 raise ValueError( 2,fDg
1178 f'Unsupported target_type="{target_type}" for {self._backend} ' 2,fDg
1179 f'(supported: {", ".join(repr(t) for t in supported)})' 2,fDg
1180 )
1182 if self._backend == "NVRTC": 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfPdQdk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c Mdcfq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e Ye-fGe.fNf/f:f;f=fHe?f@f[f]f^fD Iex y
1183 if target_type == "ptx" and not _can_load_generated_ptx(): 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c YeGeHeD Iex y
1184 warn( 20d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~dz aebel m n u v w k I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c YeGeHeD
1185 "The CUDA driver version is older than the backend version. "
1186 "The generated ptx will not be loadable by the current driver.",
1187 stacklevel=2,
1188 category=RuntimeWarning, 20d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~dz aebel m n u v w k I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c YeGeHeD
1189 )
1190 return Program_compile_nvrtc(self, target_type, name_expressions, logs) 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiedfr a h i UdLdb c YeGeHeD Iex y
1192 elif self._backend == "NVVM": 2PdQdMdcfq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e -f.fNf/f:f;f=f?f@f[f]f^f
1193 return Program_compile_nvvm(self, target_type, logs) 2PdQdMdcfq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXed e
1195 else:
1196 return self._linker.link(target_type) 2-f.fNf/f:f;f=f?f@f[f]f^f
1199cdef inline list _prepare_nvrtc_options_impl(object opts):
1200 """Build NVRTC-specific compiler options."""
1201 options = [f"-arch={opts.arch}"] 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfOgSgLgTgUgGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1202 if opts.relocatable_device_code is not None: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfOgSgLgTgUgGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1203 options.append(f"--relocatable-device-code={_handle_boolean_option(opts.relocatable_device_code)}") 20d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~dOdz aebe#e$ece
1204 if opts.extensible_whole_program is not None and opts.extensible_whole_program: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfOgSgLgTgUgGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1205 options.append("--extensible-whole-program") 2ve
1206 if opts.debug is not None and opts.debug: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfOgSgLgTgUgGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1207 options.append("--device-debug") 2f g a h i Ldb c Bf
1208 if opts.lineinfo is not None and opts.lineinfo: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfOgSgLgTgUgGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1209 options.append("--generate-line-info") 2Bf
1210 if opts.device_code_optimize is not None and opts.device_code_optimize: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfOgSgLgTgUgGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1211 options.append("--dopt=on") 1f
1212 if opts.ptxas_options is not None: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfOgSgLgTgUgGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1213 opt_name = "--ptxas-options" 2JdKdmf
1214 if isinstance(opts.ptxas_options, str): 2JdKdmf
1215 options.append(f"{opt_name}={opts.ptxas_options}") 2mf
1216 elif is_sequence(opts.ptxas_options): 2JdKd
1217 for opt_value in opts.ptxas_options: 2JdKd
1218 options.append(f"{opt_name}={opt_value}") 2JdKd
1219 if opts.max_register_count is not None: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfOgSgLgTgUgGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1220 options.append(f"--maxrregcount={opts.max_register_count}") 2ce
1221 if opts.ftz is not None: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfOgSgLgTgUgGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1222 options.append(f"--ftz={_handle_boolean_option(opts.ftz)}") 2XdBf
1223 if opts.prec_sqrt is not None: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfOgSgLgTgUgGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1224 options.append(f"--prec-sqrt={_handle_boolean_option(opts.prec_sqrt)}") 2Xd
1225 if opts.prec_div is not None: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfOgSgLgTgUgGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1226 options.append(f"--prec-div={_handle_boolean_option(opts.prec_div)}") 2Xd
1227 if opts.fma is not None: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfOgSgLgTgUgGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1228 options.append(f"--fmad={_handle_boolean_option(opts.fma)}") 2de
1229 if opts.use_fast_math is not None and opts.use_fast_math: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfOgSgLgTgUgGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1230 options.append("--use_fast_math") 2deOf
1231 if opts.extra_device_vectorization is not None and opts.extra_device_vectorization: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfOgSgLgTgUgGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1232 options.append("--extra-device-vectorization") 2qe
1233 if opts.link_time_optimization is not None and opts.link_time_optimization: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfOgSgLgTgUgGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1234 options.append("--dlink-time-opt") 2PeQeReSeOdz E F G re
1235 if opts.gen_opt_lto is not None and opts.gen_opt_lto: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfOgSgLgTgUgGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1236 options.append("--gen-opt-lto") 2xe
1237 if opts.define_macro is not None: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfOgSgLgTgUgGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1238 _process_define_macro(options, opts.define_macro) 2K A o p OgSgLgTgUg
1239 if opts.undefine_macro is not None: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1240 if isinstance(opts.undefine_macro, str): 2RdSd
1241 options.append(f"--undefine-macro={opts.undefine_macro}") 2Sd
1242 elif is_sequence(opts.undefine_macro): 2Rd
1243 for macro in opts.undefine_macro: 2Rd
1244 options.append(f"--undefine-macro={macro}") 2Rd
1245 if opts.use_bundled_headers: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1246 options.append(f"--use-bundled-headers={_default_cache_dir() / 'nvrtc-bundled-headers'}") 1D
1247 if opts.include_path is not None: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1248 if isinstance(opts.include_path, str): 2jekelemeneoepes t SdCfDfEfGfIf
1249 options.append(f"--include-path={opts.include_path}") 2SdIf
1250 elif is_sequence(opts.include_path): 2jekelemeneoepes t CfDfEfGf
1251 for path in opts.include_path: 2jekelemeneoepes t CfDfEf
1252 options.append(f"--include-path={path}") 2jekelemeneoepes t
1253 if opts.pre_include is not None: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1254 if isinstance(opts.pre_include, str): 2mfFfHf
1255 options.append(f"--pre-include={opts.pre_include}") 2mf
1256 elif is_sequence(opts.pre_include): 2mfFfHf
1257 for header in opts.pre_include: 2mfFf
1258 options.append(f"--pre-include={header}") 2mf
1259 if opts.no_source_include is not None and opts.no_source_include: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1260 options.append("--no-source-include") 2ze
1261 if opts.std is not None: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1262 options.append(f"--std={opts.std}") 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~bs t acbcccdcecfcgchcicjckclc6e7e8endodpdqdrdsdH tdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKd
1263 if opts.builtin_move_forward is not None: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1264 options.append(f"--builtin-move-forward={_handle_boolean_option(opts.builtin_move_forward)}") 2ue
1265 if opts.builtin_initializer_list is not None: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1266 options.append(f"--builtin-initializer-list={_handle_boolean_option(opts.builtin_initializer_list)}") 2ee
1267 if opts.disable_warnings is not None and opts.disable_warnings: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1268 options.append("--disable-warnings") 2ee
1269 if opts.restrict is not None and opts.restrict: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1270 options.append("--restrict") 2fe
1271 if opts.device_as_default_execution_space is not None and opts.device_as_default_execution_space: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1272 options.append("--device-as-default-execution-space") 2fe
1273 if opts.device_int128 is not None and opts.device_int128: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1274 options.append("--device-int128") 2ge
1275 if opts.device_float128 is not None and opts.device_float128: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1276 options.append("--device-float128") 2mf
1277 if opts.optimization_info is not None: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1278 options.append(f"--optimization-info={opts.optimization_info}") 2ge
1279 if opts.no_display_error_number is not None and opts.no_display_error_number: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1280 options.append("--no-display-error-number") 2se
1281 if opts.diag_error is not None: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1282 if isinstance(opts.diag_error, int): 2TdB
1283 options.append(f"--diag-error={opts.diag_error}") 2Td
1284 elif is_sequence(opts.diag_error): 1B
1285 for error in opts.diag_error: 1B
1286 options.append(f"--diag-error={error}") 1B
1287 if opts.diag_suppress is not None: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1288 if isinstance(opts.diag_suppress, int): 2TdB
1289 options.append(f"--diag-suppress={opts.diag_suppress}") 2Td
1290 elif is_sequence(opts.diag_suppress): 1B
1291 for suppress in opts.diag_suppress: 1B
1292 options.append(f"--diag-suppress={suppress}") 1B
1293 if opts.diag_warn is not None: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1294 if isinstance(opts.diag_warn, int): 2hemf
1295 options.append(f"--diag-warn={opts.diag_warn}") 2he
1296 elif is_sequence(opts.diag_warn): 2mf
1297 for w in opts.diag_warn: 2mf
1298 options.append(f"--diag-warn={w}") 2mf
1299 if opts.brief_diagnostics is not None: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1300 options.append(f"--brief-diagnostics={_handle_boolean_option(opts.brief_diagnostics)}") 2te
1301 if opts.time is not None: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1302 options.append(f"--time={opts.time}") 2mf
1303 if opts.split_compile is not None: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1304 options.append(f"--split-compile={opts.split_compile}") 2mf
1305 if opts.fdevice_syntax_only is not None and opts.fdevice_syntax_only: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1306 options.append("--fdevice-syntax-only") 2we
1307 if opts.minimal is not None and opts.minimal: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1308 options.append("--minimal") 2ye
1309 if opts.no_cache is not None and opts.no_cache: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1310 options.append("--no-cache") 2Ae
1311 if opts.fdevice_time_trace is not None: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1312 options.append(f"--fdevice-time-trace={opts.fdevice_time_trace}") 1J
1313 if opts.frandom_seed is not None: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1314 options.append(f"--frandom-seed={opts.frandom_seed}") 2Be
1315 if opts.ofast_compile is not None: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1316 options.append(f"--Ofast-compile={opts.ofast_compile}") 2Ce
1317 # PCH options (CUDA 12.8+)
1318 if opts.pch is not None and opts.pch: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1319 options.append("--pch") 1C
1320 if opts.create_pch is not None: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1321 options.append(f"--create-pch={opts.create_pch}") 1kj
1322 if opts.use_pch is not None: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1323 options.append(f"--use-pch={opts.use_pch}") 1j
1324 if opts.pch_dir is not None: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1325 options.append(f"--pch-dir={opts.pch_dir}") 2mf
1326 if opts.pch_verbose is not None: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1327 options.append(f"--pch-verbose={_handle_boolean_option(opts.pch_verbose)}") 2De
1328 if opts.pch_messages is not None: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1329 options.append(f"--pch-messages={_handle_boolean_option(opts.pch_messages)}") 2Ee
1330 if opts.instantiate_templates_in_pch is not None: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1331 options.append( 2ie
1332 f"--instantiate-templates-in-pch={_handle_boolean_option(opts.instantiate_templates_in_pch)}" 2ie
1333 )
1334 if opts.numba_debug: 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1335 options.append("--numba-debug") 1g
1336 return [o.encode() for o in options] 2L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bjekelemeneZe0e1e2eoepe}b~b3e4e5es t acbcccdcecfcgchcicjckclc0dPe1d2d3dQeRe4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}dSe~dOdz ae6e7e8ebemcncocpcqcrcsctcuc9evcwcxcyczcAcBcCcDcEcFcGc!eHcIcJcKcl m n E F G u v w #e$eLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdnd%eod'e(epd)eqd*erd+esd,eH -e.etd/eud:e;evd=ewd?exd@eyd[ezd]eAd^eBd_eCd`eDd{eEd|eFd}eGd~eHdafIdbfk I j J Jef g ceXddeqereK A o p RdSdeefegeseTdB heJdKdteuevewexeyezeAeBeCeC DeEeiemfdfr a h i UdLdb c YeBfGeHeD IeCfDfEfGfFfHfIfPfQfRfSfTfUfVfWfXfOfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+fgfefffhfx jfiflfkfy
1339cpdef void _assert_single_dashed_nvvm_options(options: list[str]) except *:
1340 """Guard against emitting a double-dashed option to libNVVM.
1342 libNVVM's parser accepts only single-dashed options and rejects the
1343 double-dashed spelling of every option with NVVM_ERROR_INVALID_OPTION
1344 (see #2570). Every option on this path is generated from typed fields, so
1345 a double dash can only mean a bug in ``cuda.core`` rather than bad user
1346 input. Fail here, naming the option, instead of leaving the user with
1347 libNVVM's opaque error.
1348 """
1349 for option in options: 2PdQdMdcfq +hFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1350 if option.startswith("--"): 2PdQdMdcfq +hFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1351 raise RuntimeError( 2+h
1352 f"Internal error: NVVM option {option!r} is double-dashed. libNVVM accepts " 2+h
1353 f"only single-dashed options; emit {option[1:]!r} instead." 2+h
1354 )
1357cdef inline object _prepare_nvvm_options_impl(object opts, bint as_bytes):
1358 """Build NVVM-specific compiler options."""
1359 options = [] 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1361 # Options supported by NVVM
1362 assert opts.arch is not None 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1363 arch = opts.arch 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1364 if arch.startswith("sm_"): 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1365 arch = f"compute_{arch[3:]}" 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1366 options.append(f"-arch={arch}") 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1367 if opts.debug is not None and opts.debug: 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1368 options.append("-g") 2Ndofrfqf
1369 # libNVVM only accepts single-dashed options; the double-dashed spelling
1370 # accepted by NVRTC is rejected with NVVM_ERROR_INVALID_OPTION.
1371 if opts.numba_debug: 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1372 options.append("-numba-debug") 2Ndofrf
1373 if opts.device_code_optimize is False: 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1374 options.append("-opt=0") 2KeTeLeUeNeWe
1375 elif opts.device_code_optimize is True: 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdMeVeVdYdWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1376 options.append("-opt=3") 2VdYdWdZdofqf
1377 # NVVM uses 0/1 instead of true/false for boolean options
1378 if opts.ftz is not None: 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1379 options.append(f"-ftz={'1' if opts.ftz else '0'}") 2VdYdWdZdofqf
1380 if opts.prec_sqrt is not None: 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1381 options.append(f"-prec-sqrt={'1' if opts.prec_sqrt else '0'}") 2VdYdWdZdof
1382 if opts.prec_div is not None: 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1383 options.append(f"-prec-div={'1' if opts.prec_div else '0'}") 2VdYdWdZdof
1384 if opts.fma is not None: 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1385 options.append(f"-fma={'1' if opts.fma else '0'}") 2VdYdWdZdof
1387 # Check for unsupported options and raise error if they are set
1388 unsupported = [] 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1389 if opts.relocatable_device_code is not None: 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1390 unsupported.append("relocatable_device_code") 2sg
1391 if opts.extensible_whole_program is not None and opts.extensible_whole_program: 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1392 unsupported.append("extensible_whole_program") 2fg
1393 if opts.lineinfo is not None and opts.lineinfo: 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1394 unsupported.append("lineinfo") 2kg
1395 if opts.ptxas_options is not None: 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1396 unsupported.append("ptxas_options") 2rg
1397 if opts.max_register_count is not None: 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1398 unsupported.append("max_register_count") 2lg
1399 if opts.use_fast_math is not None and opts.use_fast_math: 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1400 unsupported.append("use_fast_math") 2yg
1401 if opts.extra_device_vectorization is not None and opts.extra_device_vectorization: 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1402 unsupported.append("extra_device_vectorization") 2gg
1403 if opts.gen_opt_lto is not None and opts.gen_opt_lto: 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1404 unsupported.append("gen_opt_lto") 2ig
1405 if opts.define_macro is not None: 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1406 unsupported.append("define_macro") 2}f
1407 if opts.undefine_macro is not None: 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1408 unsupported.append("undefine_macro") 2xg
1409 if opts.include_path is not None: 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1410 unsupported.append("include_path") 2jg
1411 if opts.use_bundled_headers: 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1412 unsupported.append("use_bundled_headers") 2_f
1413 if opts.pre_include is not None: 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1414 unsupported.append("pre_include") 2qg
1415 if opts.no_source_include is not None and opts.no_source_include: 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1416 unsupported.append("no_source_include") 2og
1417 if opts.std is not None: 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1418 unsupported.append("std") 2vg
1419 if opts.builtin_move_forward is not None: 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1420 unsupported.append("builtin_move_forward") 2|f
1421 if opts.builtin_initializer_list is not None: 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1422 unsupported.append("builtin_initializer_list") 2{f
1423 if opts.disable_warnings is not None and opts.disable_warnings: 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1424 unsupported.append("disable_warnings") 2eg
1425 if opts.restrict is not None and opts.restrict: 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1426 unsupported.append("restrict") 2tg
1427 if opts.device_as_default_execution_space is not None and opts.device_as_default_execution_space: 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1428 unsupported.append("device_as_default_execution_space") 2~f
1429 if opts.device_int128 is not None and opts.device_int128: 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1430 unsupported.append("device_int128") 2ag
1431 if opts.optimization_info is not None: 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1432 unsupported.append("optimization_info") 2pg
1433 if opts.no_display_error_number is not None and opts.no_display_error_number: 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1434 unsupported.append("no_display_error_number") 2ng
1435 if opts.diag_error is not None: 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1436 unsupported.append("diag_error") 2bg
1437 if opts.diag_suppress is not None: 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1438 unsupported.append("diag_suppress") 2cg
1439 if opts.diag_warn is not None: 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1440 unsupported.append("diag_warn") 2dg
1441 if opts.brief_diagnostics is not None: 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1442 unsupported.append("brief_diagnostics") 2`f
1443 if opts.time is not None: 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1444 unsupported.append("time") 2wg
1445 if opts.split_compile is not None: 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1446 unsupported.append("split_compile") 2ug
1447 if opts.fdevice_syntax_only is not None and opts.fdevice_syntax_only: 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1448 unsupported.append("fdevice_syntax_only") 2hg
1449 if opts.minimal is not None and opts.minimal: 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1450 unsupported.append("minimal") 2mg
1451 if unsupported: 2PdQdMdcfq `f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fygFeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1452 raise CUDAError(f"The following options are not supported by NVVM backend: {', '.join(unsupported)}") 2`f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxg_fyg
1454 _assert_single_dashed_nvvm_options(options) 2PdQdMdcfq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1456 if as_bytes: 2PdQdMdcfq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1457 return [o.encode() for o in options] 2PdQdMdcfq FeNdKeTeLeUeMeVeVdYdNeWeWdZdOeXeofrfd e qfsftfufvfwfxfnfpfJfKfLfMfyfzfAf
1458 else:
1459 return options