diff --git a/numba_cuda/numba/cuda/cuda_paths.py b/numba_cuda/numba/cuda/cuda_paths.py index 1c7f8e827..80a731343 100644 --- a/numba_cuda/numba/cuda/cuda_paths.py +++ b/numba_cuda/numba/cuda/cuda_paths.py @@ -1,27 +1,18 @@ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: BSD-2-Clause -import sys import os from collections import namedtuple -import platform -import importlib.metadata -from numba.cuda.core.config import IS_WIN32 -from numba.cuda.misc.findlib import find_lib -from numba.cuda import config +from contextlib import contextmanager + from cuda import pathfinder + +from numba.cuda import config + import pathlib -from contextlib import contextmanager _env_path_tuple = namedtuple("_env_path_tuple", ["by", "info"]) -SEARCH_PRIORITY = [ - "Conda environment", - "NVIDIA NVCC Wheel", - "CUDA_HOME", - "System", -] - @contextmanager def temporary_env_var(key, value): @@ -37,390 +28,12 @@ def temporary_env_var(key, value): os.environ[key] = old_value -def _get_distribution(distribution_name): - """Get the distribution path using importlib.metadata, returning None if not found.""" - try: - dist = importlib.metadata.distribution(distribution_name) - return dist - except importlib.metadata.PackageNotFoundError: - return None - - -def _priority_index(label): - if label in SEARCH_PRIORITY: - return SEARCH_PRIORITY.index(label) - else: - raise ValueError(f"Can't determine search priority for {label}") - - -def _find_first_valid_lazy(options): - sorted_options = sorted(options, key=lambda x: _priority_index(x[0])) - for label, fn in sorted_options: - value = fn() - if value: - return label, value - return "", None - - -def _build_options(pairs): - """Sorts and returns a list of (label, value) tuples according to SEARCH_PRIORITY.""" - priority_index = {label: i for i, label in enumerate(SEARCH_PRIORITY)} - return sorted( - pairs, key=lambda pair: priority_index.get(pair[0], float("inf")) - ) - - -def _find_valid_path(options): - """Find valid path from *options*, which is a list of 2-tuple of - (name, path). Return first pair where *path* is not None. - If no valid path is found, return ('', None) - """ - for by, data in options: - if data is not None: - return by, data - else: - return "", None - - -def _get_libdevice_path_decision(): - options = _build_options( - [ - ("Conda environment", get_libdevice_conda_path), - ("NVIDIA NVCC Wheel", get_libdevice_wheel_path), - ( - "CUDA_HOME", - lambda: get_cuda_home("nvvm", "libdevice", "libdevice.10.bc"), - ), - ( - "System", - lambda: get_system_ctk("nvvm", "libdevice", "libdevice.10.bc"), - ), - ] - ) - return _find_first_valid_lazy(options) - - def _get_libdevice_path(): - by, out = _get_libdevice_path_decision() - if not out: - return _env_path_tuple(by, None) - return _env_path_tuple(by, out) - - -def _cuda_static_libdir(): - if IS_WIN32: - return ("lib", "x64") - else: - return ("lib64",) - - -def _get_cudalib_wheel_libdir(): - """Get the cudalib path from the cudart wheel.""" - cuda_module_lib_dir = None - cuda_runtime_distribution = _get_distribution("nvidia-cuda-runtime-cu12") - if cuda_runtime_distribution is not None: - site_packages_path = cuda_runtime_distribution.locate_file("") - cuda_module_lib_dir = os.path.join( - site_packages_path, - "nvidia", - "cuda_runtime", - "bin" if IS_WIN32 else "lib", - ) - else: - cuda_runtime_distribution = _get_distribution("nvidia-cuda-runtime") - if ( - cuda_runtime_distribution is not None - and cuda_runtime_distribution.version.startswith("13.") - ): - site_packages_path = cuda_runtime_distribution.locate_file("") - cuda_module_lib_dir = os.path.join( - site_packages_path, - "nvidia", - "cu13", - "bin" if IS_WIN32 else "lib", - "x86_64" if IS_WIN32 else "", - ) - - if cuda_module_lib_dir is None: - return None - - if cuda_module_lib_dir and os.path.isdir(cuda_module_lib_dir): - return cuda_module_lib_dir - return None - - -def _get_cudalib_dir_path_decision(): - options = _build_options( - [ - ("Conda environment", get_conda_ctk_libdir), - ("NVIDIA NVCC Wheel", _get_cudalib_wheel_libdir), - ("CUDA_HOME", get_cuda_home_libdir), - ("System", get_system_ctk_libdir), - ] - ) - return _find_first_valid_lazy(options) - - -def _get_static_cudalib_dir_path_decision(): - options = _build_options( - [ - ("Conda environment", get_conda_ctk_libdir), - ("NVIDIA NVCC Wheel", get_wheel_static_libdir), - ( - "CUDA_HOME", - lambda: get_cuda_home(*_cuda_static_libdir()), - ), - ("System", lambda: get_system_ctk(*_cuda_static_libdir())), - ] - ) - return _find_first_valid_lazy(options) - - -def _get_cudalib_dir(): - by, libdir = _get_cudalib_dir_path_decision() - return _env_path_tuple(by, libdir) - - -def _get_static_cudalib_dir(): - by, libdir = _get_static_cudalib_dir_path_decision() - return _env_path_tuple(by, libdir) - - -def get_system_ctk(*subdirs): - """Return path to system-wide cudatoolkit; or, None if it doesn't exist.""" - # Linux? - if not IS_WIN32: - # Is cuda alias to /usr/local/cuda? - # We are intentionally not getting versioned cuda installation. - result = os.path.join("/usr/local/cuda", *subdirs) - if os.path.exists(result): - return result - return None - return None - - -def get_system_ctk_libdir(): - """Return path to directory containing the shared libraries of cudatoolkit.""" - system_ctk_dir = get_system_ctk() - if system_ctk_dir is None: - return None - libdir = os.path.join( - system_ctk_dir, - "Library" if IS_WIN32 else "lib64", - "bin" if IS_WIN32 else "", - ) - # Windows CUDA 13 system CTK uses "bin\x64" directory - if IS_WIN32 and os.path.isdir(os.path.join(libdir, "x64")): - libdir = os.path.join(libdir, "x64") - - if libdir and os.path.isdir(libdir): - return os.path.normpath(libdir) - return None - - -def get_conda_ctk_libdir(): - """Return path to directory containing the shared libraries of cudatoolkit.""" - is_conda_env = os.path.isdir(os.path.join(sys.prefix, "conda-meta")) - if not is_conda_env: - return None - libdir = os.path.join( - sys.prefix, - "Library" if IS_WIN32 else "lib", - "bin" if IS_WIN32 else "", - ) - # Windows CUDA 13.0.0 uses "bin\x64" directory but 13.0.1+ just uses "bin" directory - if IS_WIN32 and os.path.isdir(os.path.join(libdir, "x64")): - libdir = os.path.join(libdir, "x64") - # Assume the existence of nvrtc to imply needed CTK libraries are installed - paths = find_lib("nvrtc", libdir) - if not paths: - return None - # Use the directory name of the max path - return os.path.dirname(max(paths)) - - -def get_libdevice_conda_path(): - """Return path to directory containing the libdevice bitcode library.""" - is_conda_env = os.path.isdir(os.path.join(sys.prefix, "conda-meta")) - if not is_conda_env: - return None - - # Linux: nvvm/libdevice/libdevice.10.bc - # Windows: Library/nvvm/libdevice/libdevice.10.bc - libdevice_path = os.path.join( - sys.prefix, - "Library" if IS_WIN32 else "", - "nvvm", - "libdevice", - "libdevice.10.bc", - ) - if os.path.isfile(libdevice_path): - return libdevice_path - return None - - -def get_wheel_static_libdir(): - cuda_module_static_lib_dir = None - # CUDA 12 - cuda_runtime_distribution = _get_distribution("nvidia-cuda-runtime-cu12") - if cuda_runtime_distribution is not None: - site_packages_path = cuda_runtime_distribution.locate_file("") - cuda_module_static_lib_dir = os.path.join( - site_packages_path, - "nvidia", - "cuda_runtime", - "lib", - "x64" if IS_WIN32 else "", - ) - else: - cuda_runtime_distribution = _get_distribution("nvidia-cuda-runtime") - if ( - cuda_runtime_distribution is not None - and cuda_runtime_distribution.version.startswith("13.") - ): - site_packages_path = cuda_runtime_distribution.locate_file("") - cuda_module_static_lib_dir = os.path.join( - site_packages_path, - "nvidia", - "cu13", - "lib", - "x64" if IS_WIN32 else "", - ) - - if cuda_module_static_lib_dir is None: - return None - - cudadevrt_path = os.path.join( - cuda_module_static_lib_dir, - "cudadevrt.lib" if IS_WIN32 else "libcudadevrt.a", - ) - - if cudadevrt_path and os.path.isfile(cudadevrt_path): - return os.path.dirname(cudadevrt_path) - return None - - -def get_cuda_home(*subdirs): - """Get paths of CUDA_HOME. - If *subdirs* are the subdirectory name to be appended in the resulting - path. - """ - cuda_home = os.environ.get("CUDA_HOME") - if cuda_home is None: - # Try Windows CUDA installation without Anaconda - cuda_home = os.environ.get("CUDA_PATH") - if cuda_home is not None: - return os.path.join(cuda_home, *subdirs) - return None - - -def get_cuda_home_libdir(): - """Return path to directory containing the shared libraries of cudatoolkit.""" - cuda_home_dir = get_cuda_home() - if cuda_home_dir is None: - return None - libdir = os.path.join( - cuda_home_dir, - "Library" if IS_WIN32 else "lib64", - "bin" if IS_WIN32 else "", - ) - # Windows CUDA 13 system CTK uses "bin\x64" directory while conda just uses "bin" directory - if IS_WIN32 and os.path.isdir(os.path.join(libdir, "x64")): - libdir = os.path.join(libdir, "x64") - return os.path.normpath(libdir) - - -def get_cuda_paths(): - """Returns a dictionary mapping component names to a 2-tuple - of (source_variable, info). - - The returned dictionary will have the following keys and infos: - - "nvrtc": file_path - - "nvvm": file_path - - "libdevice": file_path - - "cudalib_dir": directory_path - - "static_cudalib_dir": directory_path - - "include_dir": directory_path - - Note: The result of the function is cached. - """ - # Check cache - if hasattr(get_cuda_paths, "_cached_result"): - return get_cuda_paths._cached_result - else: - # Not in cache - d = { - "nvrtc": _get_nvrtc_path(), - "nvvm": _get_nvvm_path(), - "libdevice": _get_libdevice_path(), - "cudalib_dir": _get_cudalib_dir(), - "static_cudalib_dir": _get_static_cudalib_dir(), - "include_dir": _get_include_dir(), - } - # Cache result - get_cuda_paths._cached_result = d - return d - - -def get_libdevice_wheel_path(): - libdevice_path = None - # CUDA 12 - nvvm_distribution = _get_distribution("nvidia-cuda-nvcc-cu12") - if nvvm_distribution is not None: - site_packages_path = nvvm_distribution.locate_file("") - libdevice_path = os.path.join( - site_packages_path, - "nvidia", - "cuda_nvcc", - "nvvm", - "libdevice", - "libdevice.10.bc", - ) - - # CUDA 13 - if libdevice_path is None: - nvvm_distribution = _get_distribution("nvidia-nvvm") - if ( - nvvm_distribution is not None - and nvvm_distribution.version.startswith("13.") - ): - site_packages_path = nvvm_distribution.locate_file("") - libdevice_path = os.path.join( - site_packages_path, - "nvidia", - "cu13", - "nvvm", - "libdevice", - "libdevice.10.bc", - ) - - if libdevice_path and os.path.isfile(libdevice_path): - return libdevice_path - return None - - -def get_current_cuda_target_name(): - """Determine conda's CTK target folder based on system and machine arch. - - CTK's conda package delivers headers based on its architecture type. For example, - `x86_64` machine places header under `$CONDA_PREFIX/targets/x86_64-linux`, and - `aarch64` places under `$CONDA_PREFIX/targets/sbsa-linux`. Read more about the - nuances at cudart's conda feedstock: - https://github.com/conda-forge/cuda-cudart-feedstock/blob/main/recipe/meta.yaml#L8-L11 # noqa: E501 - """ - system = platform.system() - machine = platform.machine() - - if system == "Linux": - arch_to_targets = {"x86_64": "x86_64-linux", "aarch64": "sbsa-linux"} - elif system == "Windows": - arch_to_targets = { - "AMD64": "x64", - } - else: - arch_to_targets = {} - - return arch_to_targets.get(machine, None) + try: + located = pathfinder.locate_bitcode_lib("device") + return _env_path_tuple(located.found_via, located.abs_path) + except pathfinder.BitcodeLibNotFoundError: + return _env_path_tuple("", None) def _get_include_dir(): @@ -455,7 +68,6 @@ def _find_cuda_home_from_lib_path(lib_path): """ current = pathlib.Path(lib_path).resolve() - # Walk up the directory tree for parent in current.parents: nvvm_subdir = parent / "nvvm" if nvvm_subdir.is_dir(): @@ -470,7 +82,6 @@ def _get_nvvm(): # 2. If CUDA_HOME/CUDA_PATH are set, pathfinder would have found it - give up # 3. Use nvrtc's location to infer CUDA installation root # 4. Temporarily set CUDA_HOME and retry pathfinder - # First, try pathfinder directly try: return pathfinder.load_nvidia_dynamic_lib("nvvm") except pathfinder.DynamicLibNotFoundError as e: @@ -481,30 +92,27 @@ def _raise_original(reason: str) -> None: f"{reason}; original nvvm error: {nvvm_exc}" ) from nvvm_exc - # If CUDA_HOME or CUDA_PATH is set, pathfinder would have found libnvvm - # based on the environment variable(s) - nothing more we can do if os.environ.get("CUDA_HOME") or os.environ.get("CUDA_PATH"): _raise_original("nvvm not found and CUDA_HOME/CUDA_PATH is set") - # Try to locate nvrtc - this library is almost certainly needed if nvvm is needed (in the context of numba-cuda) + try: loaded_nvrtc = _get_nvrtc() except Exception as nvrtc_exc: raise pathfinder.DynamicLibNotFoundError( f"nvrtc load failed while inferring CUDA_HOME; original nvvm error: {nvvm_exc}" ) from nvrtc_exc - # If nvrtc was not found via system-search, we can't reliably determine - # the CUDA installation structure + if loaded_nvrtc.found_via != "system-search": _raise_original( f"nvrtc found via {loaded_nvrtc.found_via}, cannot infer CUDA_HOME" ) - # Search backward from nvrtc's location to find a directory with "nvvm" subdirectory + cuda_home = _find_cuda_home_from_lib_path(loaded_nvrtc.abs_path) if cuda_home is None: _raise_original( f"nvrtc path did not map to CUDA_HOME ({loaded_nvrtc.abs_path})" ) - # Temporarily set CUDA_HOME and retry pathfinder + with temporary_env_var("CUDA_HOME", cuda_home): try: library = pathfinder.load_nvidia_dynamic_lib("nvvm") @@ -522,12 +130,46 @@ def _get_nvrtc(): def _get_nvrtc_path(): - # the pathfinder API will either find the library or raise nvrtc = _get_nvrtc() return _env_path_tuple(nvrtc.found_via, nvrtc.abs_path) def _get_nvvm_path(): - # the pathfinder API will either find the library or raise nvvm = _get_nvvm() return _env_path_tuple(nvvm.found_via, nvvm.abs_path) + + +def _get_static_cudalib_path(name): + """Find a static library via pathfinder.""" + try: + located = pathfinder.locate_static_lib(name) + return _env_path_tuple(located.found_via, located.abs_path) + except pathfinder.StaticLibNotFoundError: + return _env_path_tuple("", None) + + +def get_cuda_paths(): + """Returns a dictionary mapping component names to a 2-tuple + of (source_variable, info). + + The returned dictionary will have the following keys and infos: + - "nvrtc": file_path + - "nvvm": file_path + - "libdevice": file_path + - "cudadevrt": file_path + - "include_dir": directory_path + + Note: The result of the function is cached. + """ + if hasattr(get_cuda_paths, "_cached_result"): + return get_cuda_paths._cached_result + else: + d = { + "nvrtc": _get_nvrtc_path(), + "nvvm": _get_nvvm_path(), + "libdevice": _get_libdevice_path(), + "cudadevrt": _get_static_cudalib_path("cudadevrt"), + "include_dir": _get_include_dir(), + } + get_cuda_paths._cached_result = d + return d diff --git a/numba_cuda/numba/cuda/cudadrv/libs.py b/numba_cuda/numba/cuda/cudadrv/libs.py index f99eb2b71..a58a2ffe1 100644 --- a/numba_cuda/numba/cuda/cudadrv/libs.py +++ b/numba_cuda/numba/cuda/cudadrv/libs.py @@ -3,37 +3,20 @@ """CUDA Toolkit libraries lookup utilities. -CUDA Toolkit libraries can be available via either: - -- the `cuda-nvcc` and `cuda-nvrtc` conda packages, -- a user supplied location from CUDA_HOME, -- a system wide location, -- package-specific locations (e.g. the Debian NVIDIA packages), -- or can be discovered by the system loader. +All path discovery is delegated to ``cuda.pathfinder``. This module +provides thin wrappers that expose the results via ``get_cuda_paths()``. """ import os import sys import ctypes -from numba.cuda.misc.findlib import find_lib from numba.cuda.cuda_paths import get_cuda_paths from numba.cuda.cudadrv.driver import locate_driver_and_loader, load_driver from numba.cuda.cudadrv.error import CudaSupportError from numba.cuda import config -if sys.platform == "win32": - _dllnamepattern = "%s.dll" - _staticnamepattern = "%s.lib" -elif sys.platform == "darwin": - _dllnamepattern = "lib%s.dylib" - _staticnamepattern = "lib%s.a" -else: - _dllnamepattern = "lib%s.so" - _staticnamepattern = "lib%s.a" - - def get_libdevice(): d = get_cuda_paths() paths = d["libdevice"].info @@ -47,22 +30,26 @@ def open_libdevice(): def get_cudalib(lib, static=False): """ - Find the path of a CUDA library based on a search of known locations. If - the search fails, return a generic filename for the library (e.g. - 'libnvvm.so' for 'nvvm') so that we may attempt to load it using the system - loader's search mechanism. + Find the path of a CUDA library via pathfinder. For dynamic libraries + (nvrtc, nvvm) the absolute path discovered by pathfinder is returned. + For static libraries (cudadevrt) the path is resolved by + ``pathfinder.find_static_lib``. """ if lib in {"nvrtc", "nvvm"}: - # System search either invoked inside cuda-pathfinder - # or, for nvvm, using custom logic inside cuda-paths return get_cuda_paths()[lib].info - dir_type = "static_cudalib_dir" if static else "cudalib_dir" - libdir = get_cuda_paths()[dir_type].info + if static and lib == "cudadevrt": + path = get_cuda_paths()["cudadevrt"].info + if path is not None: + return path - candidates = find_lib(lib, libdir, static=static) - namepattern = _staticnamepattern if static else _dllnamepattern - return max(candidates) if candidates else namepattern % lib + if sys.platform == "win32": + namepattern = "%s.lib" if static else "%s.dll" + elif sys.platform == "darwin": + namepattern = "lib%s.a" if static else "lib%s.dylib" + else: + namepattern = "lib%s.a" if static else "lib%s.so" + return namepattern % lib def get_cuda_include_dir(): @@ -93,17 +80,11 @@ def check_static_lib(path): def _get_source_variable(lib, static=False): - if lib == "nvvm": - return get_cuda_paths()["nvvm"].by - elif lib == "nvrtc": - return get_cuda_paths()["nvrtc"].by - elif lib == "libdevice": - return get_cuda_paths()["libdevice"].by - elif lib == "include_dir": - return get_cuda_paths()["include_dir"].by - else: - dir_type = "static_cudalib_dir" if static else "cudalib_dir" - return get_cuda_paths()[dir_type].by + if lib in {"nvvm", "nvrtc", "libdevice", "include_dir"}: + return get_cuda_paths()[lib].by + if static and lib == "cudadevrt": + return get_cuda_paths()["cudadevrt"].by + return "" def test(): diff --git a/numba_cuda/numba/cuda/testing.py b/numba_cuda/numba/cuda/testing.py index d9a295059..f98f2992a 100644 --- a/numba_cuda/numba/cuda/testing.py +++ b/numba_cuda/numba/cuda/testing.py @@ -4,10 +4,11 @@ import os import platform import shutil +import sys + import pytest from datetime import datetime from numba.cuda.utils import PYVERSION -from numba.cuda.cuda_paths import get_conda_ctk_libdir from numba.cuda.cudadrv import driver, devices, libs from numba.cuda.dispatcher import CUDADispatcher from numba.cuda import config @@ -202,10 +203,19 @@ def skip_unless_cudasim(reason): return unittest.skipUnless(config.ENABLE_CUDASIM, reason) +def _is_conda_cudatoolkit(): + """Check if the CUDA toolkit is available via a conda environment.""" + is_conda_env = os.path.isdir(os.path.join(sys.prefix, "conda-meta")) + if not is_conda_env: + return False + conda_prefix = os.environ.get("CONDA_PREFIX") + return conda_prefix is not None + + def skip_unless_conda_cudatoolkit(reason): """Skip test if the CUDA toolkit was not installed by Conda""" assert isinstance(reason, str) - return unittest.skipUnless(get_conda_ctk_libdir() is not None, reason) + return unittest.skipUnless(_is_conda_cudatoolkit(), reason) def skip_if_external_memmgr(reason): diff --git a/numba_cuda/numba/cuda/tests/nocuda/test_library_lookup.py b/numba_cuda/numba/cuda/tests/nocuda/test_library_lookup.py index 83f9de5cf..545c61a15 100644 --- a/numba_cuda/numba/cuda/tests/nocuda/test_library_lookup.py +++ b/numba_cuda/numba/cuda/tests/nocuda/test_library_lookup.py @@ -1,207 +1,42 @@ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: BSD-2-Clause -import sys -import os -import multiprocessing as mp -import warnings import pathlib +import tempfile -from numba.cuda.core.config import IS_WIN32 -from numba.cuda.core.errors import NumbaWarning -from numba.cuda.cudadrv import nvvm -from numba.cuda.testing import ( - unittest, - skip_on_cudasim, - skip_unless_conda_cudatoolkit, -) +from numba.cuda.testing import unittest from numba.cuda.cuda_paths import ( - _get_libdevice_path_decision, - _get_cudalib_dir_path_decision, - get_system_ctk, - get_system_ctk_libdir, _find_cuda_home_from_lib_path, + get_cuda_paths, ) -has_cuda = nvvm.is_available() -has_mp_get_context = hasattr(mp, "get_context") - - -class LibraryLookupBase(unittest.TestCase): - def setUp(self): - ctx = mp.get_context("spawn") - - qrecv = ctx.Queue() - qsend = ctx.Queue() - self.qsend = qsend - self.qrecv = qrecv - self.child_process = ctx.Process( - target=check_lib_lookup, - args=(qrecv, qsend), - daemon=True, - ) - self.child_process.start() - - def tearDown(self): - self.qsend.put(self.do_terminate) - self.child_process.join(3) - # Ensure the process is terminated - self.assertIsNotNone(self.child_process) - - def remote_do(self, action): - self.qsend.put(action) - out = self.qrecv.get() - self.assertNotIsInstance(out, BaseException) - return out - - @staticmethod - def do_terminate(): - return False, None - - -def remove_env(name): - try: - del os.environ[name] - except KeyError: - return False - else: - return True - - -def check_lib_lookup(qout, qin): - status = True - while status: - try: - action = qin.get() - except Exception as e: - qout.put(e) - status = False - else: - try: - with warnings.catch_warnings(record=True) as w: - warnings.simplefilter("always", NumbaWarning) - status, result = action() - qout.put(result + (w,)) - except Exception as e: - qout.put(e) - status = False - - -@skip_on_cudasim("Library detection unsupported in the simulator") -@unittest.skipUnless(has_mp_get_context, "mp.get_context not available") -@skip_unless_conda_cudatoolkit("test assumes conda installed cudatoolkit") -class TestLibDeviceLookUp(LibraryLookupBase): - def test_libdevice_path_decision(self): - # Check that the default is using conda environment - by, info, warns = self.remote_do(self.do_clear_envs) - if has_cuda: - self.assertEqual(by, "Conda environment") - else: - self.assertEqual(by, "") - self.assertIsNone(info) - self.assertFalse(warns) - # Check that CUDA_HOME works by removing conda-env - by, info, warns = self.remote_do(self.do_set_cuda_home) - self.assertEqual(by, "CUDA_HOME") - self.assertTrue( - info.startswith(os.path.join("mycudahome", "nvvm", "libdevice")) - ) - self.assertFalse(warns) - - if get_system_ctk("nvvm", "libdevice") is None: - # Fake remove conda environment so no cudatoolkit is available - by, info, warns = self.remote_do(self.do_clear_envs) - self.assertEqual(by, "") - self.assertIsNone(info) - self.assertFalse(warns) - else: - # Use system available cudatoolkit - by, info, warns = self.remote_do(self.do_clear_envs) - self.assertEqual(by, "System") - self.assertFalse(warns) - - @staticmethod - def do_clear_envs(): - remove_env("CUDA_HOME") - remove_env("CUDA_PATH") - return True, _get_libdevice_path_decision() - - @staticmethod - def do_set_cuda_home(): - os.environ["CUDA_HOME"] = os.path.join("mycudahome") - _fake_non_conda_env() - return True, _get_libdevice_path_decision() - - -@skip_on_cudasim("Library detection unsupported in the simulator") -@unittest.skipUnless(has_mp_get_context, "mp.get_context not available") -@skip_unless_conda_cudatoolkit("test assumes conda installed cudatoolkit") -class TestCudaLibLookUp(LibraryLookupBase): - def test_cudalib_path_decision(self): - # Check that the default is using conda environment - by, info, warns = self.remote_do(self.do_clear_envs) - if has_cuda: - self.assertEqual(by, "Conda environment") - else: - self.assertEqual(by, "") - self.assertIsNone(info) - self.assertFalse(warns) - - # Check that CUDA_HOME works by removing conda-env - self.remote_do(self.do_clear_envs) - by, info, warns = self.remote_do(self.do_set_cuda_home) - self.assertEqual(by, "CUDA_HOME") - self.assertFalse(warns) - if IS_WIN32: - # I think only wheels don't have the "Library" directory? +class TestGetCudaPaths(unittest.TestCase): + def test_expected_keys(self): + """get_cuda_paths() should return all expected component keys.""" + d = get_cuda_paths() + expected_keys = {"nvrtc", "nvvm", "libdevice", "cudadevrt", "include_dir"} + self.assertEqual(set(d.keys()), expected_keys) + + def test_values_are_named_tuples(self): + """Each value should be an _env_path_tuple with 'by' and 'info'.""" + d = get_cuda_paths() + for key, val in d.items(): self.assertTrue( - info - in ( - os.path.join("mycudahome", "bin"), - os.path.join("mycudahome", "Library", "bin"), - ) + hasattr(val, "by") and hasattr(val, "info"), + f"{key} value missing 'by' or 'info' attributes", ) - else: - self.assertEqual(info, os.path.join("mycudahome", "lib64")) - if get_system_ctk_libdir() is None: - # Fake remove conda environment so no cudatoolkit is available - by, info, warns = self.remote_do(self.do_clear_envs) - self.assertEqual(by, "") - self.assertIsNone(info) - self.assertFalse(warns) - else: - # Use system available cudatoolkit - by, info, warns = self.remote_do(self.do_clear_envs) - self.assertEqual(by, "System") - self.assertFalse(warns) - - @staticmethod - def do_clear_envs(): - remove_env("CUDA_HOME") - remove_env("CUDA_PATH") - return True, _get_cudalib_dir_path_decision() - - @staticmethod - def do_set_cuda_home(): - os.environ["CUDA_HOME"] = os.path.join("mycudahome") - _fake_non_conda_env() - return True, _get_cudalib_dir_path_decision() - - -def _fake_non_conda_env(): - """ - Monkeypatch sys.prefix to hide the fact we are in a conda-env - """ - sys.prefix = "" + + def test_result_is_cached(self): + """Repeated calls should return the same dict object.""" + d1 = get_cuda_paths() + d2 = get_cuda_paths() + self.assertIs(d1, d2) class TestCudaHomeDetection(unittest.TestCase): def test_find_cuda_home(self): """Test the directory walking logic.""" - import tempfile - - # Create a mock CUDA installation structure with tempfile.TemporaryDirectory() as tmpdir: cuda_root = pathlib.Path(tmpdir) / "cuda" lib64 = cuda_root / "lib64" @@ -211,25 +46,31 @@ def test_find_cuda_home(self): lib64.mkdir(parents=True) nvvm_lib64.mkdir(parents=True) - # Create mock library files nvrtc_path = lib64 / "libnvrtc.so.12" nvrtc_path.touch() nvvm_lib = nvvm_lib64 / "libnvvm.so.4" nvvm_lib.touch() - # Test finding CUDA_HOME from nvrtc path found_cuda_home = _find_cuda_home_from_lib_path(str(nvrtc_path)) - # Compare resolved paths to handle Windows short path names (e.g., RGROSS~1) expected = str(cuda_root.resolve()) assert found_cuda_home == expected, ( f"Expected {expected}, got {found_cuda_home}" ) - # Test that the nvvm directory exists at the found location assert (pathlib.Path(found_cuda_home) / "nvvm").is_dir() + def test_find_cuda_home_no_nvvm(self): + """Walking up with no nvvm directory returns None.""" + with tempfile.TemporaryDirectory() as tmpdir: + lib_path = pathlib.Path(tmpdir) / "lib64" / "libnvrtc.so.12" + lib_path.parent.mkdir(parents=True) + lib_path.touch() + + result = _find_cuda_home_from_lib_path(str(lib_path)) + self.assertIsNone(result) + if __name__ == "__main__": unittest.main() diff --git a/pixi.lock b/pixi.lock index 465d03974..138703896 100644 --- a/pixi.lock +++ b/pixi.lock @@ -212,7 +212,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-tools-12.0.76-h59595ed_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc_linux-64-12.0.76-hba56722_12.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvrtc-12.0.76-hd3aeb46_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-12.9.5-pyh698daf1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.0-hffde075_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda @@ -318,7 +318,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvcc-tools-12.0.76-hac28a21_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvcc_linux-aarch64-12.0.76-h028b88b_12.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvrtc-12.0.76-hac28a21_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-12.9.5-pyh698daf1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.0-hffde075_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda @@ -419,7 +419,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvcc-tools-12.0.76-h63175ca_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvcc_win-64-12.0.76-h8f04d04_12.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvrtc-12.0.76-h63175ca_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-12.9.5-pyh698daf1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.0-hffde075_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda @@ -485,7 +485,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - conda: . - build: py310h5d23e43_0 + build: py310hf0cc224_0 - pypi: https://files.pythonhosted.org/packages/5c/40/69ca9ea803303e14301fff9d4931b6d080b9603e134df0419c55e9764df4/filecheck-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/a3/51886727bd16e2f47587997b802dd56398692ce8c6c03c2e5bb32ecafe26/ml_dtypes-0.5.4-cp310-cp310-win_amd64.whl cu-12-0-py311: @@ -525,7 +525,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-tools-12.0.76-h59595ed_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc_linux-64-12.0.76-hba56722_12.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvrtc-12.0.76-hd3aeb46_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-12.9.5-pyh698daf1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.0-hffde075_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda @@ -631,7 +631,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvcc-tools-12.0.76-hac28a21_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvcc_linux-aarch64-12.0.76-h028b88b_12.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvrtc-12.0.76-hac28a21_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-12.9.5-pyh698daf1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.0-hffde075_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda @@ -732,7 +732,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvcc-tools-12.0.76-h63175ca_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvcc_win-64-12.0.76-h8f04d04_12.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvrtc-12.0.76-h63175ca_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-12.9.5-pyh698daf1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.0-hffde075_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda @@ -798,7 +798,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - conda: . - build: py311hb9e802a_0 + build: py311h17f48b4_0 - pypi: https://files.pythonhosted.org/packages/5c/40/69ca9ea803303e14301fff9d4931b6d080b9603e134df0419c55e9764df4/filecheck-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b4/24/70bd59276883fdd91600ca20040b41efd4902a923283c4d6edcb1de128d2/ml_dtypes-0.5.4-cp311-cp311-win_amd64.whl cu-12-2-py311: @@ -845,7 +845,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-64-12.2.140-ha770c72_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-impl-12.2.140-h59595ed_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-tools-12.2.140-h59595ed_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-12.9.5-pyh698daf1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.2-he2b69de_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda @@ -958,7 +958,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-aarch64-12.2.140-h579c4fd_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-impl-12.2.140-hac28a21_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-tools-12.2.140-hac28a21_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-12.9.5-pyh698daf1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.2-he2b69de_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda @@ -1067,7 +1067,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_win-64-12.2.140-h57928b3_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-impl-12.2.140-h63175ca_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-tools-12.2.140-h63175ca_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-12.9.5-pyh698daf1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.2-he2b69de_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda @@ -1133,7 +1133,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - conda: . - build: py311hb9e802a_0 + build: py311h17f48b4_0 - pypi: https://files.pythonhosted.org/packages/5c/40/69ca9ea803303e14301fff9d4931b6d080b9603e134df0419c55e9764df4/filecheck-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b4/24/70bd59276883fdd91600ca20040b41efd4902a923283c4d6edcb1de128d2/ml_dtypes-0.5.4-cp311-cp311-win_amd64.whl cu-12-8-py310: @@ -1183,7 +1183,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-impl-12.8.93-he02047a_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-tools-12.8.93-he02047a_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-opencl-12.8.90-h5888daf_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-12.9.5-pyh698daf1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-runtime-12.8.1-ha804496_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.8-h5d125a7_3.conda @@ -1312,7 +1312,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-aarch64-12.8.93-h579c4fd_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-impl-12.8.93-h614329b_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-tools-12.8.93-h614329b_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-12.9.5-pyh698daf1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-runtime-12.8.1-ha804496_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.8-h5d125a7_3.conda @@ -1435,7 +1435,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-impl-12.8.93-he0c23c2_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-tools-12.8.93-he0c23c2_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-opencl-12.8.90-he0c23c2_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-12.9.5-pyh698daf1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-runtime-12.8.1-h7428d3b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.8-h5d125a7_3.conda @@ -1511,7 +1511,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - conda: . - build: py310h5d23e43_0 + build: py310hf0cc224_0 - pypi: https://files.pythonhosted.org/packages/5c/40/69ca9ea803303e14301fff9d4931b6d080b9603e134df0419c55e9764df4/filecheck-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/a3/51886727bd16e2f47587997b802dd56398692ce8c6c03c2e5bb32ecafe26/ml_dtypes-0.5.4-cp310-cp310-win_amd64.whl cu-12-8-py311: @@ -1561,7 +1561,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-impl-12.8.93-he02047a_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-tools-12.8.93-he02047a_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-opencl-12.8.90-h5888daf_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-12.9.5-pyh698daf1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-runtime-12.8.1-ha804496_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.8-h5d125a7_3.conda @@ -1690,7 +1690,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-aarch64-12.8.93-h579c4fd_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-impl-12.8.93-h614329b_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-tools-12.8.93-h614329b_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-12.9.5-pyh698daf1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-runtime-12.8.1-ha804496_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.8-h5d125a7_3.conda @@ -1813,7 +1813,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-impl-12.8.93-he0c23c2_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-tools-12.8.93-he0c23c2_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-opencl-12.8.90-he0c23c2_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-12.9.5-pyh698daf1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-runtime-12.8.1-h7428d3b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.8-h5d125a7_3.conda @@ -1889,7 +1889,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - conda: . - build: py311hb9e802a_0 + build: py311h17f48b4_0 - pypi: https://files.pythonhosted.org/packages/5c/40/69ca9ea803303e14301fff9d4931b6d080b9603e134df0419c55e9764df4/filecheck-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b4/24/70bd59276883fdd91600ca20040b41efd4902a923283c4d6edcb1de128d2/ml_dtypes-0.5.4-cp311-cp311-win_amd64.whl cu-12-8-py312: @@ -1939,7 +1939,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-impl-12.8.93-he02047a_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-tools-12.8.93-he02047a_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-opencl-12.8.90-h5888daf_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-12.9.5-pyh698daf1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-runtime-12.8.1-ha804496_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.8-h5d125a7_3.conda @@ -2068,7 +2068,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-aarch64-12.8.93-h579c4fd_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-impl-12.8.93-h614329b_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-tools-12.8.93-h614329b_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-12.9.5-pyh698daf1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-runtime-12.8.1-ha804496_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.8-h5d125a7_3.conda @@ -2191,7 +2191,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-impl-12.8.93-he0c23c2_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-tools-12.8.93-he0c23c2_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-opencl-12.8.90-he0c23c2_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-12.9.5-pyh698daf1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-runtime-12.8.1-h7428d3b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.8-h5d125a7_3.conda @@ -2267,7 +2267,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - conda: . - build: py312ha067a5a_0 + build: py312h61be6c2_0 - pypi: https://files.pythonhosted.org/packages/5c/40/69ca9ea803303e14301fff9d4931b6d080b9603e134df0419c55e9764df4/filecheck-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f5/f0/0cfadd537c5470378b1b32bd859cf2824972174b51b873c9d95cfd7475a5/ml_dtypes-0.5.4-cp312-cp312-win_amd64.whl cu-12-8-py313: @@ -2317,7 +2317,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-impl-12.8.93-he02047a_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-tools-12.8.93-he02047a_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-opencl-12.8.90-h5888daf_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-12.9.5-pyh698daf1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-runtime-12.8.1-ha804496_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.8-h5d125a7_3.conda @@ -2444,7 +2444,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-aarch64-12.8.93-h579c4fd_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-impl-12.8.93-h614329b_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-tools-12.8.93-h614329b_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-12.9.5-pyh698daf1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-runtime-12.8.1-ha804496_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.8-h5d125a7_3.conda @@ -2566,7 +2566,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-impl-12.8.93-he0c23c2_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-tools-12.8.93-he0c23c2_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-opencl-12.8.90-he0c23c2_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-12.9.5-pyh698daf1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-runtime-12.8.1-h7428d3b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.8-h5d125a7_3.conda @@ -2643,7 +2643,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - conda: . - build: py313he80dd91_0 + build: py313h96b86a2_0 - pypi: https://files.pythonhosted.org/packages/5c/40/69ca9ea803303e14301fff9d4931b6d080b9603e134df0419c55e9764df4/filecheck-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e1/8b/200088c6859d8221454825959df35b5244fa9bdf263fd0249ac5fb75e281/ml_dtypes-0.5.4-cp313-cp313-win_amd64.whl cu-12-9-py312: @@ -2695,7 +2695,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-impl-12.9.86-h4bc722e_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-tools-12.9.86-h4bc722e_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-opencl-12.9.19-h5888daf_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-12.9.5-pyh698daf1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-runtime-12.9.1-ha804496_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.9-h4f385c5_3.conda @@ -2867,7 +2867,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-aarch64-12.9.86-h579c4fd_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-impl-12.9.86-h7b14b0b_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-tools-12.9.86-h7b14b0b_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-12.9.5-pyh698daf1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-runtime-12.9.1-ha804496_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.9-h4f385c5_3.conda @@ -3029,7 +3029,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-impl-12.9.86-h2466b09_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-tools-12.9.86-h2466b09_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-opencl-12.9.19-he0c23c2_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-12.9.5-pyh698daf1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-runtime-12.9.1-h7428d3b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.9-h4f385c5_3.conda @@ -3134,7 +3134,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - conda: . - build: py312ha067a5a_0 + build: py312h61be6c2_0 - pypi: https://files.pythonhosted.org/packages/5c/40/69ca9ea803303e14301fff9d4931b6d080b9603e134df0419c55e9764df4/filecheck-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f5/f0/0cfadd537c5470378b1b32bd859cf2824972174b51b873c9d95cfd7475a5/ml_dtypes-0.5.4-cp312-cp312-win_amd64.whl cu-13-0-py312: @@ -3184,7 +3184,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-impl-13.0.88-h4bc722e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-tools-13.0.88-h4bc722e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-opencl-13.0.85-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-13.1.1-pyhc455866_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-runtime-13.0.2-ha804496_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.0-hc7b4dd1_3.conda @@ -3315,7 +3315,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-aarch64-13.0.88-h579c4fd_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-impl-13.0.88-h7b14b0b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-tools-13.0.88-h7b14b0b_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-13.1.1-pyhc455866_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-runtime-13.0.2-ha804496_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.0-hc7b4dd1_3.conda @@ -3440,7 +3440,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-impl-13.0.88-h2466b09_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-tools-13.0.88-h2466b09_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-opencl-13.0.85-hac47afa_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-13.1.1-pyhc455866_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-runtime-13.0.2-h7428d3b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.0-hc7b4dd1_3.conda @@ -3518,7 +3518,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - conda: . - build: py312ha067a5a_0 + build: py312h61be6c2_0 - pypi: https://files.pythonhosted.org/packages/5c/40/69ca9ea803303e14301fff9d4931b6d080b9603e134df0419c55e9764df4/filecheck-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f5/f0/0cfadd537c5470378b1b32bd859cf2824972174b51b873c9d95cfd7475a5/ml_dtypes-0.5.4-cp312-cp312-win_amd64.whl cu-13-0-py313: @@ -3568,7 +3568,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-impl-13.0.88-h4bc722e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-tools-13.0.88-h4bc722e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-opencl-13.0.85-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-13.1.1-pyhc455866_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-runtime-13.0.2-ha804496_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.0-hc7b4dd1_3.conda @@ -3697,7 +3697,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-aarch64-13.0.88-h579c4fd_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-impl-13.0.88-h7b14b0b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-tools-13.0.88-h7b14b0b_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-13.1.1-pyhc455866_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-runtime-13.0.2-ha804496_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.0-hc7b4dd1_3.conda @@ -3821,7 +3821,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-impl-13.0.88-h2466b09_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-tools-13.0.88-h2466b09_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-opencl-13.0.85-hac47afa_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-13.1.1-pyhc455866_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-runtime-13.0.2-h7428d3b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.0-hc7b4dd1_3.conda @@ -3900,7 +3900,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - conda: . - build: py313he80dd91_0 + build: py313h96b86a2_0 - pypi: https://files.pythonhosted.org/packages/5c/40/69ca9ea803303e14301fff9d4931b6d080b9603e134df0419c55e9764df4/filecheck-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e1/8b/200088c6859d8221454825959df35b5244fa9bdf263fd0249ac5fb75e281/ml_dtypes-0.5.4-cp313-cp313-win_amd64.whl cu-13-0-py314: @@ -3950,7 +3950,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-impl-13.0.88-h4bc722e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-tools-13.0.88-h4bc722e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-opencl-13.0.85-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-13.1.1-pyhc455866_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-runtime-13.0.2-ha804496_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.0-hc7b4dd1_3.conda @@ -4079,7 +4079,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-aarch64-13.0.88-h579c4fd_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-impl-13.0.88-h7b14b0b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-tools-13.0.88-h7b14b0b_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-13.1.1-pyhc455866_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-runtime-13.0.2-ha804496_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.0-hc7b4dd1_3.conda @@ -4203,7 +4203,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-impl-13.0.88-h2466b09_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-tools-13.0.88-h2466b09_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-opencl-13.0.85-hac47afa_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-13.1.1-pyhc455866_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-runtime-13.0.2-h7428d3b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.0-hc7b4dd1_3.conda @@ -4282,7 +4282,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - conda: . - build: py314h625260f_0 + build: py314h3be3d12_0 - pypi: https://files.pythonhosted.org/packages/5c/40/69ca9ea803303e14301fff9d4931b6d080b9603e134df0419c55e9764df4/filecheck-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/93/2bfed22d2498c468f6bcd0d9f56b033eaa19f33320389314c19ef6766413/ml_dtypes-0.5.4-cp314-cp314-win_amd64.whl cu-13-1-py314: @@ -4332,7 +4332,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-impl-13.1.80-h4bc722e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-tools-13.1.80-h4bc722e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-opencl-13.1.80-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-13.1.1-pyhc455866_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-runtime-13.1.0-ha804496_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.1-h2ff5cdb_3.conda @@ -4461,7 +4461,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-aarch64-13.1.80-h579c4fd_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-impl-13.1.80-h7b14b0b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-tools-13.1.80-h7b14b0b_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-13.1.1-pyhc455866_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-runtime-13.1.0-ha804496_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.1-h2ff5cdb_3.conda @@ -4585,7 +4585,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-impl-13.1.80-h2466b09_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-tools-13.1.80-h2466b09_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-opencl-13.1.80-hac47afa_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-13.1.1-pyhc455866_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-runtime-13.1.0-h7428d3b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.1-h2ff5cdb_3.conda @@ -4664,7 +4664,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - conda: . - build: py314h625260f_0 + build: py314h3be3d12_0 - pypi: https://files.pythonhosted.org/packages/5c/40/69ca9ea803303e14301fff9d4931b6d080b9603e134df0419c55e9764df4/filecheck-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/93/2bfed22d2498c468f6bcd0d9f56b033eaa19f33320389314c19ef6766413/ml_dtypes-0.5.4-cp314-cp314-win_amd64.whl default: @@ -4714,7 +4714,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-impl-13.1.115-h4bc722e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-tools-13.1.115-h4bc722e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-opencl-13.1.80-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-13.1.1-pyhc455866_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-runtime-13.1.0-ha804496_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.1-h2ff5cdb_3.conda @@ -4843,7 +4843,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-aarch64-13.1.115-h579c4fd_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-impl-13.1.115-h7b14b0b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-tools-13.1.115-h7b14b0b_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-13.1.1-pyhc455866_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-runtime-13.1.0-ha804496_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.1-h2ff5cdb_3.conda @@ -4967,7 +4967,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-impl-13.1.115-h2466b09_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-tools-13.1.115-h2466b09_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-opencl-13.1.80-hac47afa_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-13.1.1-pyhc455866_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-runtime-13.1.0-h7428d3b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.1-h2ff5cdb_3.conda @@ -5046,7 +5046,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - conda: . - build: py314h625260f_0 + build: py314h3be3d12_0 - pypi: https://files.pythonhosted.org/packages/5c/40/69ca9ea803303e14301fff9d4931b6d080b9603e134df0419c55e9764df4/filecheck-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/93/2bfed22d2498c468f6bcd0d9f56b033eaa19f33320389314c19ef6766413/ml_dtypes-0.5.4-cp314-cp314-win_amd64.whl dev: @@ -5153,7 +5153,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart_linux-64-13.1.80-h376f20c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvrtc-13.1.80-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-impl-13.1.80-h4bc722e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-13.1.1-pyhc455866_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.1-h2ff5cdb_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_1.conda @@ -5250,7 +5250,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart_linux-aarch64-13.1.80-h8f3c8d4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvrtc-13.1.80-h8f3c8d4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-impl-13.1.80-h7b14b0b_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-13.1.1-pyhc455866_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.1-h2ff5cdb_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_1.conda @@ -5346,7 +5346,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart_win-64-13.1.80-hac47afa_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvrtc-13.1.80-hac47afa_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-impl-13.1.80-h2466b09_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-13.1.1-pyhc455866_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.1-h2ff5cdb_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_1.conda @@ -5416,7 +5416,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_8.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - conda: . - build: py314h625260f_0 + build: py314h3be3d12_0 - pypi: https://files.pythonhosted.org/packages/8d/3f/95338030883d8c8b91223b4e21744b04d11b161a3ef117295d8241f50ab4/accessible_pygments-0.0.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8c/79/017fab2f7167a9a9795665f894d04f77aafceca80821b51589bb4b23ff5c/nvidia_sphinx_theme-0.0.9.post1-py3-none-any.whl @@ -12658,9 +12658,9 @@ packages: purls: [] size: 23093 timestamp: 1764879706216 -- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.3.4-pyhcf101f3_0.conda - sha256: d8cfe77d65c29f7d7fdd7c2c7334a32c50ff3b71c5ae2638ec5ecb9404ae111e - md5: 5531bd855da47b70361e2e2207dd1864 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.4.0-pyhc364b38_0.conda + sha256: edf16fdfbcce5bbb445118fd8d070dda8afe36b4b437a94f472fde153bc38151 + md5: 2d13e524da66b60e6e7d5c6585729ea8 depends: - python >=3.10 - cuda-version >=12.0,<14 @@ -12668,8 +12668,8 @@ packages: license: Apache-2.0 purls: - pkg:pypi/cuda-pathfinder?source=hash-mapping - size: 34223 - timestamp: 1770871765693 + size: 39327 + timestamp: 1772059437166 - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-python-12.9.5-pyh698daf1_0.conda sha256: 1a65fd1316c31b7ffe7edde56ceb86665659e0e9c4a3d6f99f7d79f7e936bf8b md5: a4fb0d4ffdac1cf2cda9318d2f789d20 @@ -18474,7 +18474,7 @@ packages: - cuda-core >=0.5.1,<1 - cuda-bindings >=12.9,<14 - cuda-python >=12.9,<14 - - cuda-pathfinder >=1.3.4,<2 + - cuda-pathfinder >=1.4.0,<2 - cuda-cudart - libstdcxx >=14 - libgcc >=14 @@ -18496,7 +18496,7 @@ packages: - cuda-core >=0.5.1,<1 - cuda-bindings >=12.9,<14 - cuda-python >=12.9,<14 - - cuda-pathfinder >=1.3.4,<2 + - cuda-pathfinder >=1.4.0,<2 - cuda-cudart - libstdcxx >=14 - libgcc >=14 @@ -18506,9 +18506,10 @@ packages: - conda: . name: numba-cuda version: 0.27.0 - build: py310h5d23e43_0 + build: py310hf0cc224_0 subdir: win-64 variants: + cxx_compiler: vs2022 python: 3.10.* target_platform: win-64 depends: @@ -18518,21 +18519,23 @@ packages: - cuda-core >=0.5.1,<1 - cuda-bindings >=12.9,<14 - cuda-python >=12.9,<14 - - cuda-pathfinder >=1.3.4,<2 + - cuda-pathfinder >=1.4.0,<2 - cuda-cudart - - vc >=14.1,<15 - - vc14_runtime >=14.16.27033 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 - python_abi 3.10.* *_cp310 - numpy >=1.21,<3 license: BSD-2-Clause - conda: . name: numba-cuda version: 0.27.0 - build: py311h2894be0_0 - subdir: linux-aarch64 + build: py311h17f48b4_0 + subdir: win-64 variants: + cxx_compiler: vs2022 python: 3.11.* - target_platform: linux-aarch64 + target_platform: win-64 depends: - python - packaging @@ -18540,21 +18543,22 @@ packages: - cuda-core >=0.5.1,<1 - cuda-bindings >=12.9,<14 - cuda-python >=12.9,<14 - - cuda-pathfinder >=1.3.4,<2 + - cuda-pathfinder >=1.4.0,<2 - cuda-cudart - - libstdcxx >=14 - - libgcc >=14 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 - python_abi 3.11.* *_cp311 - numpy >=1.23,<3 license: BSD-2-Clause - conda: . name: numba-cuda version: 0.27.0 - build: py311hb9e802a_0 - subdir: win-64 + build: py311h2894be0_0 + subdir: linux-aarch64 variants: python: 3.11.* - target_platform: win-64 + target_platform: linux-aarch64 depends: - python - packaging @@ -18562,10 +18566,10 @@ packages: - cuda-core >=0.5.1,<1 - cuda-bindings >=12.9,<14 - cuda-python >=12.9,<14 - - cuda-pathfinder >=1.3.4,<2 + - cuda-pathfinder >=1.4.0,<2 - cuda-cudart - - vc >=14.1,<15 - - vc14_runtime >=14.16.27033 + - libstdcxx >=14 + - libgcc >=14 - python_abi 3.11.* *_cp311 - numpy >=1.23,<3 license: BSD-2-Clause @@ -18584,7 +18588,7 @@ packages: - cuda-core >=0.5.1,<1 - cuda-bindings >=12.9,<14 - cuda-python >=12.9,<14 - - cuda-pathfinder >=1.3.4,<2 + - cuda-pathfinder >=1.4.0,<2 - cuda-cudart - libstdcxx >=14 - libgcc >=14 @@ -18606,7 +18610,7 @@ packages: - cuda-core >=0.5.1,<1 - cuda-bindings >=12.9,<14 - cuda-python >=12.9,<14 - - cuda-pathfinder >=1.3.4,<2 + - cuda-pathfinder >=1.4.0,<2 - cuda-cudart - libstdcxx >=14 - libgcc >=14 @@ -18616,11 +18620,12 @@ packages: - conda: . name: numba-cuda version: 0.27.0 - build: py312h8e85db0_0 - subdir: linux-aarch64 + build: py312h61be6c2_0 + subdir: win-64 variants: + cxx_compiler: vs2022 python: 3.12.* - target_platform: linux-aarch64 + target_platform: win-64 depends: - python - packaging @@ -18628,21 +18633,22 @@ packages: - cuda-core >=0.5.1,<1 - cuda-bindings >=12.9,<14 - cuda-python >=12.9,<14 - - cuda-pathfinder >=1.3.4,<2 + - cuda-pathfinder >=1.4.0,<2 - cuda-cudart - - libstdcxx >=14 - - libgcc >=14 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 - python_abi 3.12.* *_cp312 - numpy >=1.23,<3 license: BSD-2-Clause - conda: . name: numba-cuda version: 0.27.0 - build: py312ha067a5a_0 - subdir: win-64 + build: py312h8e85db0_0 + subdir: linux-aarch64 variants: python: 3.12.* - target_platform: win-64 + target_platform: linux-aarch64 depends: - python - packaging @@ -18650,10 +18656,10 @@ packages: - cuda-core >=0.5.1,<1 - cuda-bindings >=12.9,<14 - cuda-python >=12.9,<14 - - cuda-pathfinder >=1.3.4,<2 + - cuda-pathfinder >=1.4.0,<2 - cuda-cudart - - vc >=14.1,<15 - - vc14_runtime >=14.16.27033 + - libstdcxx >=14 + - libgcc >=14 - python_abi 3.12.* *_cp312 - numpy >=1.23,<3 license: BSD-2-Clause @@ -18672,7 +18678,7 @@ packages: - cuda-core >=0.5.1,<1 - cuda-bindings >=12.9,<14 - cuda-python >=12.9,<14 - - cuda-pathfinder >=1.3.4,<2 + - cuda-pathfinder >=1.4.0,<2 - cuda-cudart - libstdcxx >=14 - libgcc >=14 @@ -18682,9 +18688,10 @@ packages: - conda: . name: numba-cuda version: 0.27.0 - build: py313he80dd91_0 + build: py313h96b86a2_0 subdir: win-64 variants: + cxx_compiler: vs2022 python: 3.13.* target_platform: win-64 depends: @@ -18694,10 +18701,11 @@ packages: - cuda-core >=0.5.1,<1 - cuda-bindings >=12.9,<14 - cuda-python >=12.9,<14 - - cuda-pathfinder >=1.3.4,<2 + - cuda-pathfinder >=1.4.0,<2 - cuda-cudart - - vc >=14.1,<15 - - vc14_runtime >=14.16.27033 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 - python_abi 3.13.* *_cp313 - numpy >=1.23,<3 license: BSD-2-Clause @@ -18716,7 +18724,7 @@ packages: - cuda-core >=0.5.1,<1 - cuda-bindings >=12.9,<14 - cuda-python >=12.9,<14 - - cuda-pathfinder >=1.3.4,<2 + - cuda-pathfinder >=1.4.0,<2 - cuda-cudart - libstdcxx >=14 - libgcc >=14 @@ -18726,11 +18734,12 @@ packages: - conda: . name: numba-cuda version: 0.27.0 - build: py314h59f3c06_0 - subdir: linux-64 + build: py314h3be3d12_0 + subdir: win-64 variants: + cxx_compiler: vs2022 python: 3.14.* - target_platform: linux-64 + target_platform: win-64 depends: - python - packaging @@ -18738,21 +18747,22 @@ packages: - cuda-core >=0.5.1,<1 - cuda-bindings >=12.9,<14 - cuda-python >=12.9,<14 - - cuda-pathfinder >=1.3.4,<2 + - cuda-pathfinder >=1.4.0,<2 - cuda-cudart - - libstdcxx >=15 - - libgcc >=15 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 - python_abi 3.14.* *_cp314 - numpy >=1.23,<3 license: BSD-2-Clause - conda: . name: numba-cuda version: 0.27.0 - build: py314h625260f_0 - subdir: win-64 + build: py314h59f3c06_0 + subdir: linux-64 variants: python: 3.14.* - target_platform: win-64 + target_platform: linux-64 depends: - python - packaging @@ -18760,10 +18770,10 @@ packages: - cuda-core >=0.5.1,<1 - cuda-bindings >=12.9,<14 - cuda-python >=12.9,<14 - - cuda-pathfinder >=1.3.4,<2 + - cuda-pathfinder >=1.4.0,<2 - cuda-cudart - - vc >=14.1,<15 - - vc14_runtime >=14.16.27033 + - libstdcxx >=15 + - libgcc >=15 - python_abi 3.14.* *_cp314 - numpy >=1.23,<3 license: BSD-2-Clause @@ -18782,7 +18792,7 @@ packages: - cuda-core >=0.5.1,<1 - cuda-bindings >=12.9,<14 - cuda-python >=12.9,<14 - - cuda-pathfinder >=1.3.4,<2 + - cuda-pathfinder >=1.4.0,<2 - cuda-cudart - libstdcxx >=14 - libgcc >=14 diff --git a/pixi.toml b/pixi.toml index eadd2dd41..323f79cb7 100644 --- a/pixi.toml +++ b/pixi.toml @@ -307,5 +307,5 @@ numba = ">=0.60" cuda-core = ">=0.5.1,<1" cuda-bindings = ">=12.9,<14" cuda-python = ">=12.9,<14" -cuda-pathfinder = ">=1.3.4,<2" +cuda-pathfinder = ">=1.4.0,<2" cuda-cudart = "*" diff --git a/pyproject.toml b/pyproject.toml index d9c2c5ab3..ad8f5f2fe 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,13 +24,13 @@ dependencies = [ [project.optional-dependencies] cu12 = [ "cuda-bindings>=12.9.1,<13.0.0", - "cuda-pathfinder>=1.3.4,<2.0.0", + "cuda-pathfinder>=1.4.0,<2.0.0", # install nvcc for libNVVM "cuda-toolkit[cudart,nvcc,nvrtc,nvjitlink,cccl]==12.*", ] cu13 = [ "cuda-bindings==13.*", - "cuda-pathfinder>=1.3.4,<2.0.0", + "cuda-pathfinder>=1.4.0,<2.0.0", "cuda-toolkit[cudart,nvvm,nvrtc,nvjitlink,cccl]==13.*", ]